{"action":"created","comment":{"url":"https://api.github.com/repos/ubtue/ub_tools/pulls/comments/82149186","pull_request_review_id":3073364,"id":82149186,"diff_hunk":"@@ -996,4 +983,508 @@ public String getRecordingDate(final Record record) {\n \n         return genres;\n     }\n+\n+    /**\n+     * Determine Record Formats\n+     *\n+     * Overwrite the original VuFindIndexer getFormats to do away with the\n+     * single bucket approach, i.e. collect all formats you find, i.e. this is\n+     * the original code without premature returns which are left in commented\n+     * out\n+     *\n+     * @param record\n+     *            MARC record\n+     * @return set of record format\n+     */\n+    public Set<String> getMultipleFormats(final Record record) {\n+        Set<String> result = new LinkedHashSet<String>();\n+        String leader = record.getLeader().toString();\n+        ControlField fixedField = (ControlField) record.getVariableField(\"008\");\n+        DataField title = (DataField) record.getVariableField(\"245\");\n+        String formatString;\n+        char formatCode = ' ';\n+        char formatCode2 = ' ';\n+        char formatCode4 = ' ';\n+\n+        // check if there's an h in the 245\n+        if (title != null) {\n+            if (title.getSubfield('h') != null) {\n+                if (title.getSubfield('h').getData().toLowerCase().contains(\"[electronic resource]\")) {\n+                    result.add(\"Electronic\");\n+                }\n+            }\n+        }\n+\n+        // check the 007 - this is a repeating field\n+        List<VariableField> fields = record.getVariableFields(\"007\");\n+        if (fields != null) {\n+            ControlField formatField;\n+            for (VariableField varField : fields) {\n+                formatField = (ControlField) varField;\n+                formatString = formatField.getData().toUpperCase();\n+                formatCode = formatString.length() > 0 ? formatString.charAt(0) : ' ';\n+                formatCode2 = formatString.length() > 1 ? formatString.charAt(1) : ' ';\n+                formatCode4 = formatString.length() > 4 ? formatString.charAt(4) : ' ';\n+                switch (formatCode) {\n+                case 'A':\n+                    switch (formatCode2) {\n+                    case 'D':\n+                        result.add(\"Atlas\");\n+                        break;\n+                    default:\n+                        result.add(\"Map\");\n+                        break;\n+                    }\n+                    break;\n+                case 'C':\n+                    switch (formatCode2) {\n+                    case 'A':\n+                        result.add(\"TapeCartridge\");\n+                        break;\n+                    case 'B':\n+                        result.add(\"ChipCartridge\");\n+                        break;\n+                    case 'C':\n+                        result.add(\"DiscCartridge\");\n+                        break;\n+                    case 'F':\n+                        result.add(\"TapeCassette\");\n+                        break;\n+                    case 'H':\n+                        result.add(\"TapeReel\");\n+                        break;\n+                    case 'J':\n+                        result.add(\"FloppyDisk\");\n+                        break;\n+                    case 'M':\n+                    case 'O':\n+                        result.add(\"CDROM\");\n+                        break;\n+                    case 'R':\n+                        // Do not return - this will cause anything with an\n+                        // 856 field to be labeled as \"Electronic\"\n+                        break;\n+                    default:\n+                        result.add(\"Software\");\n+                        break;\n+                    }\n+                    break;\n+                case 'D':\n+                    result.add(\"Globe\");\n+                    break;\n+                case 'F':\n+                    result.add(\"Braille\");\n+                    break;\n+                case 'G':\n+                    switch (formatCode2) {\n+                    case 'C':\n+                    case 'D':\n+                        result.add(\"Filmstrip\");\n+                        break;\n+                    case 'T':\n+                        result.add(\"Transparency\");\n+                        break;\n+                    default:\n+                        result.add(\"Slide\");\n+                        break;\n+                    }\n+                    break;\n+                case 'H':\n+                    result.add(\"Microfilm\");\n+                    break;\n+                case 'K':\n+                    switch (formatCode2) {\n+                    case 'C':\n+                        result.add(\"Collage\");\n+                        break;\n+                    case 'D':\n+                        result.add(\"Drawing\");\n+                        break;\n+                    case 'E':\n+                        result.add(\"Painting\");\n+                        break;\n+                    case 'F':\n+                        result.add(\"Print\");\n+                        break;\n+                    case 'G':\n+                        result.add(\"Photonegative\");\n+                        break;\n+                    case 'J':\n+                        result.add(\"Print\");\n+                        break;\n+                    case 'L':\n+                        result.add(\"Drawing\");\n+                        break;\n+                    case 'O':\n+                        result.add(\"FlashCard\");\n+                        break;\n+                    case 'N':\n+                        result.add(\"Chart\");\n+                        break;\n+                    default:\n+                        result.add(\"Photo\");\n+                        break;\n+                    }\n+                    break;\n+                case 'M':\n+                    switch (formatCode2) {\n+                    case 'F':\n+                        result.add(\"VideoCassette\");\n+                        break;\n+                    case 'R':\n+                        result.add(\"Filmstrip\");\n+                        break;\n+                    default:\n+                        result.add(\"MotionPicture\");\n+                        break;\n+                    }\n+                    break;\n+                case 'O':\n+                    result.add(\"Kit\");\n+                    break;\n+                case 'Q':\n+                    result.add(\"MusicalScore\");\n+                    break;\n+                case 'R':\n+                    result.add(\"SensorImage\");\n+                    break;\n+                case 'S':\n+                    switch (formatCode2) {\n+                    case 'D':\n+                        result.add(\"SoundDisc\");\n+                        break;\n+                    case 'S':\n+                        result.add(\"SoundCassette\");\n+                        break;\n+                    default:\n+                        result.add(\"SoundRecording\");\n+                        break;\n+                    }\n+                    break;\n+                case 'V':\n+                    switch (formatCode2) {\n+                    case 'C':\n+                        result.add(\"VideoCartridge\");\n+                        break;\n+                    case 'D':\n+                        switch (formatCode4) {\n+                        case 'S':\n+                            result.add(\"BRDisc\");\n+                            break;\n+                        case 'V':\n+                        default:\n+                            result.add(\"VideoDisc\");\n+                            break;\n+                        }\n+                        break;\n+                    case 'F':\n+                        result.add(\"VideoCassette\");\n+                        break;\n+                    case 'R':\n+                        result.add(\"VideoReel\");\n+                        break;\n+                    default:\n+                        result.add(\"Video\");\n+                        break;\n+                    }\n+                    break;\n+                }\n+            }\n+        }\n+        // check the Leader at position 6\n+        char leaderBit = leader.charAt(6);\n+        switch (Character.toUpperCase(leaderBit)) {\n+        case 'C':\n+        case 'D':\n+            result.add(\"MusicalScore\");\n+            break;\n+        case 'E':\n+        case 'F':\n+            result.add(\"Map\");\n+            break;\n+        case 'G':\n+            result.add(\"Slide\");\n+            break;\n+        case 'I':\n+            result.add(\"SoundRecording\");\n+            break;\n+        case 'J':\n+            result.add(\"MusicRecording\");\n+            break;\n+        case 'K':\n+            result.add(\"Photo\");\n+            break;\n+        case 'M':\n+            result.add(\"Electronic\");\n+            break;\n+        case 'O':\n+        case 'P':\n+            result.add(\"Kit\");\n+            break;\n+        case 'R':\n+            result.add(\"PhysicalObject\");\n+            break;\n+        case 'T':\n+            result.add(\"Manuscript\");\n+            break;\n+        }\n+ \n+        // check the Leader at position 7\n+        leaderBit = leader.charAt(7);\n+        switch (Character.toUpperCase(leaderBit)) {\n+        // Monograph\n+        case 'M':\n+            if (formatCode == 'C') {\n+                result.add(\"eBook\");\n+            } else {\n+                result.add(\"Book\");\n+            }\n+            break;\n+        // Component parts\n+        case 'A':\n+            result.add(\"BookComponentPart\");\n+            break;\n+        case 'B':\n+            result.add(\"SerialComponentPart\");\n+            break;\n+        // Serial\n+        case 'S':\n+            // Look in 008 to determine what type of Continuing Resource\n+            formatCode = fixedField.getData().toUpperCase().charAt(21);\n+            switch (formatCode) {\n+            case 'N':\n+                result.add(\"Newspaper\");\n+                break;\n+            case 'P':\n+                result.add(\"Journal\");\n+                break;\n+            default:\n+                result.add(\"Serial\");\n+                break;\n+            }\n+        }\n+\n+        // Nothing worked!\n+        if (result.isEmpty()) {\n+            result.add(\"Unknown\");\n+        }\n+\n+        return result;\n+    }\n+\n+    /**\n+     * Determine Record Format(s)\n+     *\n+     * @param record\n+     *            the record\n+     * @return format of record\n+     */\n+    public Set<String> getFormatsWithGermanHandling(final Record record) {\n+        // We've been facing the problem that the original SolrMarc cannot deal\n+        // with\n+        // german descriptions in the 245h and thus assigns a wrong format\n+        // for e.g. electronic resource\n+        // Thus we must handle this manually\n+\n+        Set<String> rawFormats = new LinkedHashSet<String>();\n+        DataField title = (DataField) record.getVariableField(\"245\");\n+\n+        if (title != null) {\n+            if (title.getSubfield('h') != null) {\n+                if (title.getSubfield('h').getData().toLowerCase().contains(\"[elektronische ressource]\")) {\n+                    rawFormats.add(\"Electronic\");\n+                    rawFormats.addAll(getMultipleFormats(record));\n+                    return rawFormats;\n+                } else {\n+                    return getMultipleFormats(record);\n+                }\n+            }\n+        }\n+\n+        // Catch case of empty title\n+        return getMultipleFormats(record);\n+    }\n+\n+    /**\n+     * Determine Record Format(s) including the electronic tag The electronic\n+     * category is filtered out in the actula getFormat function but needed to\n+     * determine the media type\n+     *\n+     * @param record\n+     *            the record\n+     * @return format of record\n+     */\n+    public Set<String> getFormatIncludingElectronic(final Record record) {\n+        final Set<String> formats = new HashSet<>();\n+        Set<String> rawFormats = getFormatsWithGermanHandling(record);\n+\n+        for (final String rawFormat : rawFormats) {\n+            if (rawFormat.equals(\"BookComponentPart\") || rawFormat.equals(\"SerialComponentPart\")) {\n+                formats.add(\"Article\");\n+            } else {\n+                formats.add(rawFormat);\n+            }\n+        }\n+\n+        // Determine whether an article is in fact a review\n+        final List<VariableField> _655Fields = record.getVariableFields(\"655\");\n+        for (final VariableField _655Field : _655Fields) {\n+            final DataField dataField = (DataField) _655Field;\n+            if (dataField.getIndicator1() == ' ' && dataField.getIndicator2() == '7' && dataField.getSubfield('a').getData().startsWith(\"Rezension\")) {\n+                formats.remove(\"Article\");\n+                formats.add(\"Review\");\n+                break;\n+            }\n+        }\n+\n+        // A review can also be indicated if 935$c set to \"uwre\"\n+        final List<VariableField> _935Fields = record.getVariableFields(\"935\");\n+        for (final VariableField _935Field : _935Fields) {\n+            final DataField dataField = (DataField) _935Field;\n+            final Subfield cSubfield = dataField.getSubfield('c');\n+            if (cSubfield != null && cSubfield.getData().contains(\"uwre\")) {\n+                formats.remove(\"Article\");\n+                formats.add(\"Review\");\n+                break;\n+            }\n+        }\n+\n+        // Determine whether record is a 'Festschrift', i.e. has \"fe\" in 935$c\n+        for (final VariableField _935Field : _935Fields) {\n+            final DataField dataField = (DataField) _935Field;\n+            final Subfield cSubfield = dataField.getSubfield('c');\n+            if (cSubfield != null && cSubfield.getData().contains(\"fe\")) {\n+                formats.add(\"Festschrift\");\n+                break;\n+            }\n+        }\n+\n+        // Determine whether record is a Website, i.e. has \"website\" in 935$c\n+        for (final VariableField _935Field : _935Fields) {\n+            final DataField dataField = (DataField) _935Field;\n+            List<Subfield> subfields = dataField.getSubfields();\n+            boolean foundMatch = false;\n+            for (Subfield subfield : subfields) {\n+                if (subfield.getCode() == 'c' && subfield.getData().contains(\"website\")) {\n+                    formats.add(\"Website\");\n+                    foundMatch = true;\n+                    break;\n+                }\n+            }\n+            if (foundMatch == true)\n+                break;\n+        }\n+\n+        // Rewrite all E-Books as electronic Books\n+        if (formats.contains(\"eBook\")) {\n+            formats.remove(\"eBook\");\n+            formats.add(\"Electronic\");\n+            formats.add(\"Book\");\n+        }\n+\n+        return formats;\n+    }\n+\n+    /**\n+     * Determine Format(s) but do away with the electronic tag\n+     *\n+     * @param record\n+     *            the record\n+     * @return mediatype of the record\n+     */\n+\n+    public Set<String> getFormat(final Record record) {\n+        Set<String> formats = getFormatIncludingElectronic(record);\n+\n+        // Since we now have an additional facet mediatype we remove the\n+        // electronic label\n+        formats.remove(\"Electronic\");\n+\n+        return formats;\n+    }\n+\n+    /**\n+     * Determine Mediatype For facets we need to differentiate between\n+     * electronic and non-electronic resources\n+     *\n+     * @param record\n+     *            the record\n+     * @return mediatype of the record\n+     */\n+\n+    public Set<String> getMediatype(final Record record) {\n+        final Set<String> mediatype = new HashSet<>();\n+        final Set<String> formats = getFormatIncludingElectronic(record);\n+        final String electronicRessource = \"Electronic\";\n+        final String nonElectronicRessource = \"Non-Electronic\";\n+\n+        if (formats.contains(electronicRessource)) {\n+            mediatype.add(electronicRessource);\n+        } else {\n+            mediatype.add(nonElectronicRessource);\n+        }\n+\n+        return mediatype;\n+    }\n+\n+    /**\n+     * Determine the publication date for \"date ascending/descending\" sorting in\n+     * accordance with the rules stated in issue 227\n+     *\n+     * @param record\n+     *            MARC record\n+     * @return the publication date to be used for\n+     */\n+\n+    public String getPublicationSortDate(final Record record) {\n+\n+        final Set<String> format = getFormatIncludingElectronic(record);\n+\n+        // Case 1 [Article or Review]\n+        // Match also the case of publication date transgressing one year\n+        // (Format YYYY/YY for older and Format YYYY/YYYY) for\n+        // newer entries\n+        if (format.contains(\"Article\") || format.contains(\"Review\")) {\n+            final DataField _936Field = (DataField) record.getVariableField(\"936\");\n+            if (_936Field != null) {\n+                final Subfield jSubfield = _936Field.getSubfield('j');\n+                if (jSubfield != null) {\n+                    final String yearOrYearRange = jSubfield.getData();\n+                    return yearOrYearRange.length() > 4 ? yearOrYearRange.substring(0, 4) : yearOrYearRange;\n+                } else {\n+                    System.err.println(\"getPublicationSortDate [No matching subfield 'j' in field 936]: \" + record.getControlNumber());\n+                }\n+            } else {\n+\n+                System.err.println(\"getPublicationSortDate [No matching 936 field:] \" + record.getControlNumber());\n+            }\n+\n+        // Case 2: Otherwise get from 260c \n+        } else {\n+            final Set<String> dates = new LinkedHashSet<>();\n+            final List<VariableField> list260 = record.getVariableFields(\"260\");\n+            for (final VariableField vf : list260) {\n+                final DataField df = (DataField) vf;\n+                final List<Subfield> currentDates = df.getSubfields('c');\n+                for (final Subfield sf : currentDates) {\n+                    // We have possibly a date that follows a different\n+                    // calculation of times\n+                    String currentDateStr = sf.getData();\n+                    final String DIFFERENT_CALCULATION_OF_TIME_REGEX = \".*?\\\\[(.*?)\\\\=\\\\s*(\\\\d+)\\\\s*\\\\].*\";\n+                    Matcher differentCalcOfTimeMatcher = Pattern.compile(DIFFERENT_CALCULATION_OF_TIME_REGEX).matcher(currentDateStr);\n+                    currentDateStr = differentCalcOfTimeMatcher.find() ? differentCalcOfTimeMatcher.group(2) : Utils.cleanDate(currentDateStr);\n+                    dates.add(currentDateStr);\n+                }\n+            }\n+\n+            String first_publication_date = null;","path":"solrmarc_mixin/src/de/unituebingen/ub/ubtools/solrmarcMixin/TuelibMixin.java","position":983,"original_position":983,"commit_id":"73c060442c01129ebe2f4779111ce3ea1519d862","original_commit_id":"73c060442c01129ebe2f4779111ce3ea1519d862","user":{"login":"ruschein","id":991243,"avatar_url":"https://avatars.githubusercontent.com/u/991243?v=3","gravatar_id":"","url":"https://api.github.com/users/ruschein","html_url":"https://github.com/ruschein","followers_url":"https://api.github.com/users/ruschein/followers","following_url":"https://api.github.com/users/ruschein/following{/other_user}","gists_url":"https://api.github.com/users/ruschein/gists{/gist_id}","starred_url":"https://api.github.com/users/ruschein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruschein/subscriptions","organizations_url":"https://api.github.com/users/ruschein/orgs","repos_url":"https://api.github.com/users/ruschein/repos","events_url":"https://api.github.com/users/ruschein/events{/privacy}","received_events_url":"https://api.github.com/users/ruschein/received_events","type":"User","site_admin":false},"body":"This does not conform to Java naming conventions.  Please use camel case.","created_at":"2016-10-06T09:28:31Z","updated_at":"2016-10-06T09:28:55Z","html_url":"https://github.com/ubtue/ub_tools/pull/564#discussion_r82149186","pull_request_url":"https://api.github.com/repos/ubtue/ub_tools/pulls/564","_links":{"self":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/comments/82149186"},"html":{"href":"https://github.com/ubtue/ub_tools/pull/564#discussion_r82149186"},"pull_request":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/564"}}},"pull_request":{"url":"https://api.github.com/repos/ubtue/ub_tools/pulls/564","id":88065985,"html_url":"https://github.com/ubtue/ub_tools/pull/564","diff_url":"https://github.com/ubtue/ub_tools/pull/564.diff","patch_url":"https://github.com/ubtue/ub_tools/pull/564.patch","issue_url":"https://api.github.com/repos/ubtue/ub_tools/issues/564","number":564,"state":"open","locked":false,"title":"Added new handling for date sort","user":{"login":"jriedl","id":13135579,"avatar_url":"https://avatars.githubusercontent.com/u/13135579?v=3","gravatar_id":"","url":"https://api.github.com/users/jriedl","html_url":"https://github.com/jriedl","followers_url":"https://api.github.com/users/jriedl/followers","following_url":"https://api.github.com/users/jriedl/following{/other_user}","gists_url":"https://api.github.com/users/jriedl/gists{/gist_id}","starred_url":"https://api.github.com/users/jriedl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jriedl/subscriptions","organizations_url":"https://api.github.com/users/jriedl/orgs","repos_url":"https://api.github.com/users/jriedl/repos","events_url":"https://api.github.com/users/jriedl/events{/privacy}","received_events_url":"https://api.github.com/users/jriedl/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-10-05T12:13:41Z","updated_at":"2016-10-06T09:28:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"babd2f3fc3d9bae4005c45b546ffaa292ed582f8","assignee":{"login":"ruschein","id":991243,"avatar_url":"https://avatars.githubusercontent.com/u/991243?v=3","gravatar_id":"","url":"https://api.github.com/users/ruschein","html_url":"https://github.com/ruschein","followers_url":"https://api.github.com/users/ruschein/followers","following_url":"https://api.github.com/users/ruschein/following{/other_user}","gists_url":"https://api.github.com/users/ruschein/gists{/gist_id}","starred_url":"https://api.github.com/users/ruschein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruschein/subscriptions","organizations_url":"https://api.github.com/users/ruschein/orgs","repos_url":"https://api.github.com/users/ruschein/repos","events_url":"https://api.github.com/users/ruschein/events{/privacy}","received_events_url":"https://api.github.com/users/ruschein/received_events","type":"User","site_admin":false},"assignees":[{"login":"ruschein","id":991243,"avatar_url":"https://avatars.githubusercontent.com/u/991243?v=3","gravatar_id":"","url":"https://api.github.com/users/ruschein","html_url":"https://github.com/ruschein","followers_url":"https://api.github.com/users/ruschein/followers","following_url":"https://api.github.com/users/ruschein/following{/other_user}","gists_url":"https://api.github.com/users/ruschein/gists{/gist_id}","starred_url":"https://api.github.com/users/ruschein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ruschein/subscriptions","organizations_url":"https://api.github.com/users/ruschein/orgs","repos_url":"https://api.github.com/users/ruschein/repos","events_url":"https://api.github.com/users/ruschein/events{/privacy}","received_events_url":"https://api.github.com/users/ruschein/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ubtue/ub_tools/pulls/564/commits","review_comments_url":"https://api.github.com/repos/ubtue/ub_tools/pulls/564/comments","review_comment_url":"https://api.github.com/repos/ubtue/ub_tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ubtue/ub_tools/issues/564/comments","statuses_url":"https://api.github.com/repos/ubtue/ub_tools/statuses/73c060442c01129ebe2f4779111ce3ea1519d862","head":{"label":"ubtue:riedl","ref":"riedl","sha":"73c060442c01129ebe2f4779111ce3ea1519d862","user":{"login":"ubtue","id":12495698,"avatar_url":"https://avatars.githubusercontent.com/u/12495698?v=3","gravatar_id":"","url":"https://api.github.com/users/ubtue","html_url":"https://github.com/ubtue","followers_url":"https://api.github.com/users/ubtue/followers","following_url":"https://api.github.com/users/ubtue/following{/other_user}","gists_url":"https://api.github.com/users/ubtue/gists{/gist_id}","starred_url":"https://api.github.com/users/ubtue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ubtue/subscriptions","organizations_url":"https://api.github.com/users/ubtue/orgs","repos_url":"https://api.github.com/users/ubtue/repos","events_url":"https://api.github.com/users/ubtue/events{/privacy}","received_events_url":"https://api.github.com/users/ubtue/received_events","type":"Organization","site_admin":false},"repo":{"id":35827831,"name":"ub_tools","full_name":"ubtue/ub_tools","owner":{"login":"ubtue","id":12495698,"avatar_url":"https://avatars.githubusercontent.com/u/12495698?v=3","gravatar_id":"","url":"https://api.github.com/users/ubtue","html_url":"https://github.com/ubtue","followers_url":"https://api.github.com/users/ubtue/followers","following_url":"https://api.github.com/users/ubtue/following{/other_user}","gists_url":"https://api.github.com/users/ubtue/gists{/gist_id}","starred_url":"https://api.github.com/users/ubtue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ubtue/subscriptions","organizations_url":"https://api.github.com/users/ubtue/orgs","repos_url":"https://api.github.com/users/ubtue/repos","events_url":"https://api.github.com/users/ubtue/events{/privacy}","received_events_url":"https://api.github.com/users/ubtue/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ubtue/ub_tools","description":"Various C++ utility programs typically relating to MARC 21 manipulation.","fork":false,"url":"https://api.github.com/repos/ubtue/ub_tools","forks_url":"https://api.github.com/repos/ubtue/ub_tools/forks","keys_url":"https://api.github.com/repos/ubtue/ub_tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ubtue/ub_tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ubtue/ub_tools/teams","hooks_url":"https://api.github.com/repos/ubtue/ub_tools/hooks","issue_events_url":"https://api.github.com/repos/ubtue/ub_tools/issues/events{/number}","events_url":"https://api.github.com/repos/ubtue/ub_tools/events","assignees_url":"https://api.github.com/repos/ubtue/ub_tools/assignees{/user}","branches_url":"https://api.github.com/repos/ubtue/ub_tools/branches{/branch}","tags_url":"https://api.github.com/repos/ubtue/ub_tools/tags","blobs_url":"https://api.github.com/repos/ubtue/ub_tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ubtue/ub_tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ubtue/ub_tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/ubtue/ub_tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ubtue/ub_tools/statuses/{sha}","languages_url":"https://api.github.com/repos/ubtue/ub_tools/languages","stargazers_url":"https://api.github.com/repos/ubtue/ub_tools/stargazers","contributors_url":"https://api.github.com/repos/ubtue/ub_tools/contributors","subscribers_url":"https://api.github.com/repos/ubtue/ub_tools/subscribers","subscription_url":"https://api.github.com/repos/ubtue/ub_tools/subscription","commits_url":"https://api.github.com/repos/ubtue/ub_tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/ubtue/ub_tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/ubtue/ub_tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/ubtue/ub_tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/ubtue/ub_tools/contents/{+path}","compare_url":"https://api.github.com/repos/ubtue/ub_tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ubtue/ub_tools/merges","archive_url":"https://api.github.com/repos/ubtue/ub_tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ubtue/ub_tools/downloads","issues_url":"https://api.github.com/repos/ubtue/ub_tools/issues{/number}","pulls_url":"https://api.github.com/repos/ubtue/ub_tools/pulls{/number}","milestones_url":"https://api.github.com/repos/ubtue/ub_tools/milestones{/number}","notifications_url":"https://api.github.com/repos/ubtue/ub_tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ubtue/ub_tools/labels{/name}","releases_url":"https://api.github.com/repos/ubtue/ub_tools/releases{/id}","deployments_url":"https://api.github.com/repos/ubtue/ub_tools/deployments","created_at":"2015-05-18T16:02:47Z","updated_at":"2016-07-12T15:32:09Z","pushed_at":"2016-10-06T09:20:30Z","git_url":"git://github.com/ubtue/ub_tools.git","ssh_url":"git@github.com:ubtue/ub_tools.git","clone_url":"https://github.com/ubtue/ub_tools.git","svn_url":"https://github.com/ubtue/ub_tools","homepage":null,"size":71907,"stargazers_count":2,"watchers_count":2,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":2,"default_branch":"master"}},"base":{"label":"ubtue:master","ref":"master","sha":"edd88f3288fbe842faebbd7ee34ee854fc7e33bb","user":{"login":"ubtue","id":12495698,"avatar_url":"https://avatars.githubusercontent.com/u/12495698?v=3","gravatar_id":"","url":"https://api.github.com/users/ubtue","html_url":"https://github.com/ubtue","followers_url":"https://api.github.com/users/ubtue/followers","following_url":"https://api.github.com/users/ubtue/following{/other_user}","gists_url":"https://api.github.com/users/ubtue/gists{/gist_id}","starred_url":"https://api.github.com/users/ubtue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ubtue/subscriptions","organizations_url":"https://api.github.com/users/ubtue/orgs","repos_url":"https://api.github.com/users/ubtue/repos","events_url":"https://api.github.com/users/ubtue/events{/privacy}","received_events_url":"https://api.github.com/users/ubtue/received_events","type":"Organization","site_admin":false},"repo":{"id":35827831,"name":"ub_tools","full_name":"ubtue/ub_tools","owner":{"login":"ubtue","id":12495698,"avatar_url":"https://avatars.githubusercontent.com/u/12495698?v=3","gravatar_id":"","url":"https://api.github.com/users/ubtue","html_url":"https://github.com/ubtue","followers_url":"https://api.github.com/users/ubtue/followers","following_url":"https://api.github.com/users/ubtue/following{/other_user}","gists_url":"https://api.github.com/users/ubtue/gists{/gist_id}","starred_url":"https://api.github.com/users/ubtue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ubtue/subscriptions","organizations_url":"https://api.github.com/users/ubtue/orgs","repos_url":"https://api.github.com/users/ubtue/repos","events_url":"https://api.github.com/users/ubtue/events{/privacy}","received_events_url":"https://api.github.com/users/ubtue/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ubtue/ub_tools","description":"Various C++ utility programs typically relating to MARC 21 manipulation.","fork":false,"url":"https://api.github.com/repos/ubtue/ub_tools","forks_url":"https://api.github.com/repos/ubtue/ub_tools/forks","keys_url":"https://api.github.com/repos/ubtue/ub_tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ubtue/ub_tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ubtue/ub_tools/teams","hooks_url":"https://api.github.com/repos/ubtue/ub_tools/hooks","issue_events_url":"https://api.github.com/repos/ubtue/ub_tools/issues/events{/number}","events_url":"https://api.github.com/repos/ubtue/ub_tools/events","assignees_url":"https://api.github.com/repos/ubtue/ub_tools/assignees{/user}","branches_url":"https://api.github.com/repos/ubtue/ub_tools/branches{/branch}","tags_url":"https://api.github.com/repos/ubtue/ub_tools/tags","blobs_url":"https://api.github.com/repos/ubtue/ub_tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ubtue/ub_tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ubtue/ub_tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/ubtue/ub_tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ubtue/ub_tools/statuses/{sha}","languages_url":"https://api.github.com/repos/ubtue/ub_tools/languages","stargazers_url":"https://api.github.com/repos/ubtue/ub_tools/stargazers","contributors_url":"https://api.github.com/repos/ubtue/ub_tools/contributors","subscribers_url":"https://api.github.com/repos/ubtue/ub_tools/subscribers","subscription_url":"https://api.github.com/repos/ubtue/ub_tools/subscription","commits_url":"https://api.github.com/repos/ubtue/ub_tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/ubtue/ub_tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/ubtue/ub_tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/ubtue/ub_tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/ubtue/ub_tools/contents/{+path}","compare_url":"https://api.github.com/repos/ubtue/ub_tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ubtue/ub_tools/merges","archive_url":"https://api.github.com/repos/ubtue/ub_tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ubtue/ub_tools/downloads","issues_url":"https://api.github.com/repos/ubtue/ub_tools/issues{/number}","pulls_url":"https://api.github.com/repos/ubtue/ub_tools/pulls{/number}","milestones_url":"https://api.github.com/repos/ubtue/ub_tools/milestones{/number}","notifications_url":"https://api.github.com/repos/ubtue/ub_tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ubtue/ub_tools/labels{/name}","releases_url":"https://api.github.com/repos/ubtue/ub_tools/releases{/id}","deployments_url":"https://api.github.com/repos/ubtue/ub_tools/deployments","created_at":"2015-05-18T16:02:47Z","updated_at":"2016-07-12T15:32:09Z","pushed_at":"2016-10-06T09:20:30Z","git_url":"git://github.com/ubtue/ub_tools.git","ssh_url":"git@github.com:ubtue/ub_tools.git","clone_url":"https://github.com/ubtue/ub_tools.git","svn_url":"https://github.com/ubtue/ub_tools","homepage":null,"size":71907,"stargazers_count":2,"watchers_count":2,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/564"},"html":{"href":"https://github.com/ubtue/ub_tools/pull/564"},"issue":{"href":"https://api.github.com/repos/ubtue/ub_tools/issues/564"},"comments":{"href":"https://api.github.com/repos/ubtue/ub_tools/issues/564/comments"},"review_comments":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/564/comments"},"review_comment":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ubtue/ub_tools/pulls/564/commits"},"statuses":{"href":"https://api.github.com/repos/ubtue/ub_tools/statuses/73c060442c01129ebe2f4779111ce3ea1519d862"}}}}
{"actor":{"display_login":"ruschein"}}