{"action":"created","comment":{"url":"https://api.github.com/repos/mapsme/omim/pulls/comments/82567191","pull_request_review_id":3465062,"id":82567191,"diff_hunk":"@@ -0,0 +1,323 @@\n+#!/usr/bin/env python2.7\n+\n+from __future__ import print_function\n+\n+import logging\n+import re\n+import subprocess\n+from argparse import ArgumentParser\n+from collections import defaultdict\n+from itertools import chain\n+from os.path import abspath, isabs\n+\n+from find_untranslated_strings import StringsTxt\n+\n+\"\"\"\n+This script determines which strings are used in the platform code (iOS and\n+Android) and removes all the other strings from strings.txt. For more information,\n+run this script with the -h option.\n+\"\"\"\n+\n+\n+OMIM_ROOT = \"\"\n+\n+MACRO_RE =  re.compile('L\\(.*?@\\\"(.*?)\\\"\\)')\n+XML_RE = re.compile(\"value=\\\"(.*?)\\\"\")\n+ANDROID_JAVA_RE = re.compile(\"R\\.string\\.([\\w_]*)\")\n+ANDROID_XML_RE = re.compile(\"@string/(.*?)\\W\")\n+IOS_CANDIDATES_RE = re.compile(\"(.*?):[^L\\(]@\\\"([a-z0-9_]*?)\\\"\")\n+\n+HARDCODED_CATEGORIES = None\n+\n+HARDCODED_COLORS = [\n+    \"red\", \"yellow\", \"blue\", \"green\", \"purple\", \"orange\", \"brown\", \"pink\"\n+]\n+\n+\n+def exec_shell(test, *flags):\n+    spell = [\"{0} {1}\".format(test, list(*flags))]\n+\n+    process = subprocess.Popen(\n+        spell,\n+        stdout=subprocess.PIPE, stderr=subprocess.PIPE,\n+        shell=True\n+    )\n+\n+    logging.info(\" \".join(spell))\n+    out, _ = process.communicate()\n+    return filter(None, out.splitlines())\n+\n+\n+def grep_ios():\n+    logging.info(\"Grepping ios\")\n+    grep = \"grep -r -I 'L(\\|localizedText\\|localizedPlaceholder' {0}/iphone/*\".format(OMIM_ROOT)\n+    ret = exec_shell(grep)\n+    return filter_ios_grep(ret)\n+\n+\n+def grep_android():\n+    logging.info(\"Grepping android\")\n+    grep = \"grep -r -I 'R.string.' {0}/android/src\".format(OMIM_ROOT)\n+    ret = android_grep_wrapper(grep, ANDROID_JAVA_RE)\n+    grep = \"grep -r -I '@string/' {0}/android/res\".format(OMIM_ROOT)\n+    ret.update(android_grep_wrapper(grep, ANDROID_XML_RE))\n+    grep = \"grep -r -I '@string/' {0}/android/AndroidManifest.xml\".format(OMIM_ROOT)\n+    ret.update(android_grep_wrapper(grep, ANDROID_XML_RE))\n+\n+    return parenthesize(ret)\n+\n+\n+def grep_ios_candidates():\n+    logging.info(\"Grepping ios candidates\")\n+    grep = \"grep -nr -I '@\\\"' {0}/iphone/*\".format(OMIM_ROOT)\n+    ret = exec_shell(grep)\n+\n+    strs = strings_from_grepped(ret, IOS_CANDIDATES_RE)\n+    return strs\n+\n+\n+def android_grep_wrapper(grep, regex):\n+    grepped = exec_shell(grep)\n+    return strings_from_grepped(grepped, regex)\n+\n+\n+def filter_ios_grep(strings):\n+    filtered = strings_from_grepped(strings, MACRO_RE)\n+    filtered = parenthesize(process_ternary_operators(filtered))\n+    filtered.update(parenthesize(strings_from_grepped(strings, XML_RE)))\n+    filtered.update(parenthesize(HARDCODED_CATEGORIES))\n+    filtered.update(parenthesize(HARDCODED_COLORS))\n+    return filtered\n+\n+\n+def process_ternary_operators(filtered):\n+    return chain(*map(lambda s: s.split('\" : @\"'), filtered))\n+\n+\n+def strings_from_grepped(grepped, regexp):\n+    return set(\n+        chain(\n+            *filter(\n+                None, map(lambda s: regexp.findall(s), grepped)\n+            )\n+        )\n+    )\n+\n+\n+def parenthesize(strings):\n+    return set(map(lambda s: \"[{0}]\".format(s), strings))\n+\n+\n+def write_filtered_strings_txt(filtered, filepath, languages=None):\n+    logging.info(\"Writing strings to file {0}\".format(filepath))\n+    strings_txt = StringsTxt()\n+    strings_dict = {key : dict(strings_txt.translations[key]) for key in filtered}\n+    strings_txt.translations = strings_dict\n+    strings_txt.comments_and_tags = {}\n+    strings_txt.write_formatted(filepath, languages=languages)\n+\n+\n+def get_args():\n+    parser = ArgumentParser(\n+        description=\"\"\"\n+        A script for cleaning up the strings.txt file. It can cleanup the file\n+        inplace, that is all the unused strings will be removed from strings.txt,\n+        or it can produce two separate files for ios and android. We can also\n+        produce the compiled string resources specifically for each platform\n+        that do not contain strings for other platforms or comments.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-s\", \"--single-file\",\n+        dest=\"single\", default=False,\n+        action=\"store_true\",\n+        help=\"\"\"Create single cleaned up file for both platform. All strings\n+        that are not used in the project will be thrown away. Otherwise, two\n+        platform specific files will be produced.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-l\", \"--language\",\n+        dest=\"langs\", default=None,\n+        action=\"append\",\n+        help=\"\"\"The languages to be included into the resulting strings.txt\n+        file or files. If this param is empty, all languages from the current\n+        strings.txt file will be preserved.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-g\", \"--generate-localizations\",\n+        dest=\"generate\", default=False,\n+        action=\"store_true\",\n+        help=\"Generate localizations for the platforms.\"\n+    )\n+\n+    parser.add_argument(\n+        \"-o\", \"--output\",\n+        dest=\"output\", default=\"strings.txt\",\n+        help=\"\"\"The name for the resulting file. It will be saved to the\n+        project folder. Only relevant if the -s option is set.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-m\", \"--missing-strings\",\n+        dest=\"missing\", default=False,\n+        action=\"store_true\",\n+        help=\"\"\"Find the keys that are used in iOS, but are not translated\n+        in strings.txt and exit.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-c\", \"--candidates\",\n+        dest=\"candidates\", default=False,\n+        action=\"store_true\",\n+        help=\"\"\"Find the strings in iOS that are not in the L() macros, but that\n+        look like they might be keys.\"\"\"\n+    )\n+\n+    parser.add_argument(\n+        \"-r\", \"--root\",\n+        dest=\"omim_root\", default=find_omim(),\n+        help=\"Path to the root of the OMIM project\"\n+    )\n+\n+    parser.add_argument(\n+        \"-ct\", \"--categories\",\n+        dest=\"hardcoded_cagegories\",\n+        default=\"{0}/data/hardcoded_categories.txt\".format(find_omim()),\n+        help=\"\"\"Path to the list of the categories that are displayed in the\n+        interface, but are not taken from strings.txt\"\"\"\n+    )\n+\n+    return parser.parse_args()\n+\n+\n+def do_multiple(args):\n+    write_filtered_strings_txt(\n+        grep_ios(), \"{0}/ios_strings.txt\".format(OMIM_ROOT), args.langs\n+    )\n+    write_filtered_strings_txt(\n+        grep_android(), \"{0}/android_strings.txt\".format(OMIM_ROOT), args.langs\n+    )\n+    if args.generate:\n+        print(\"Going to generate locs\")\n+        exec_shell(\n+            \"{0}/tools/unix/generate_localizations.sh\".format(OMIM_ROOT),\n+            \"android_strings.txt ios_strings.txt\"\n+        )\n+\n+\n+def generate_auto_tags(ios, android):\n+    new_tags = defaultdict(list)\n+    for i in ios:\n+        new_tags[i].append(\"ios\")\n+\n+    for a in android:\n+        new_tags[a].append(\"android\")\n+\n+    for key in new_tags:\n+        new_tags[key] = \", \".join(new_tags[key])\n+\n+    return new_tags\n+\n+\n+def new_comments_and_tags(strings_txt, filtered, new_tags):\n+    comments_and_tags = {key: strings_txt.comments_and_tags[key] for key in filtered}\n+    for key in comments_and_tags:\n+        comments_and_tags[key][\"tags\"] = new_tags[key]\n+    return comments_and_tags\n+\n+\n+def do_single(args):\n+    ios = grep_ios()\n+    android = grep_android()\n+\n+    new_tags = generate_auto_tags(ios, android)\n+\n+    filtered = ios\n+    filtered.update(android)\n+\n+    strings_txt = StringsTxt()\n+    strings_txt.translations = {key: dict(strings_txt.translations[key]) for key in filtered}\n+\n+    strings_txt.comments_and_tags = new_comments_and_tags(strings_txt, filtered, new_tags)\n+\n+    path = args.output if isabs(args.output) else \"{0}/{1}\".format(OMIM_ROOT, args.output)\n+    strings_txt.write_formatted(languages=args.langs, target_file=path)\n+\n+    if args.generate:\n+        exec_shell(\n+            \"{}/../unix/generate_localizations.sh\".format(OMIM_ROOT),\n+            \"{0} {0}\".format(args.output)","path":"tools/python/clean_strings_txt.py","position":251,"original_position":251,"commit_id":"135b24df98801f077ca0538fb3d8854cff80b753","original_commit_id":"135b24df98801f077ca0538fb3d8854cff80b753","user":{"login":"ygorshenin","id":454567,"avatar_url":"https://avatars.githubusercontent.com/u/454567?v=3","gravatar_id":"","url":"https://api.github.com/users/ygorshenin","html_url":"https://github.com/ygorshenin","followers_url":"https://api.github.com/users/ygorshenin/followers","following_url":"https://api.github.com/users/ygorshenin/following{/other_user}","gists_url":"https://api.github.com/users/ygorshenin/gists{/gist_id}","starred_url":"https://api.github.com/users/ygorshenin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ygorshenin/subscriptions","organizations_url":"https://api.github.com/users/ygorshenin/orgs","repos_url":"https://api.github.com/users/ygorshenin/repos","events_url":"https://api.github.com/users/ygorshenin/events{/privacy}","received_events_url":"https://api.github.com/users/ygorshenin/received_events","type":"User","site_admin":false},"body":"args.output, args.output","created_at":"2016-10-10T09:08:09Z","updated_at":"2016-10-10T09:08:09Z","html_url":"https://github.com/mapsme/omim/pull/4438#discussion_r82567191","pull_request_url":"https://api.github.com/repos/mapsme/omim/pulls/4438","_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments/82567191"},"html":{"href":"https://github.com/mapsme/omim/pull/4438#discussion_r82567191"},"pull_request":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4438"}}},"pull_request":{"url":"https://api.github.com/repos/mapsme/omim/pulls/4438","id":87896555,"html_url":"https://github.com/mapsme/omim/pull/4438","diff_url":"https://github.com/mapsme/omim/pull/4438.diff","patch_url":"https://github.com/mapsme/omim/pull/4438.patch","issue_url":"https://api.github.com/repos/mapsme/omim/issues/4438","number":4438,"state":"open","locked":false,"title":"Strings cleaner","user":{"login":"therearesomewhocallmetim","id":14867234,"avatar_url":"https://avatars.githubusercontent.com/u/14867234?v=3","gravatar_id":"","url":"https://api.github.com/users/therearesomewhocallmetim","html_url":"https://github.com/therearesomewhocallmetim","followers_url":"https://api.github.com/users/therearesomewhocallmetim/followers","following_url":"https://api.github.com/users/therearesomewhocallmetim/following{/other_user}","gists_url":"https://api.github.com/users/therearesomewhocallmetim/gists{/gist_id}","starred_url":"https://api.github.com/users/therearesomewhocallmetim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/therearesomewhocallmetim/subscriptions","organizations_url":"https://api.github.com/users/therearesomewhocallmetim/orgs","repos_url":"https://api.github.com/users/therearesomewhocallmetim/repos","events_url":"https://api.github.com/users/therearesomewhocallmetim/events{/privacy}","received_events_url":"https://api.github.com/users/therearesomewhocallmetim/received_events","type":"User","site_admin":false},"body":"And modifications to find_untranslated_strings to work with it.\r\n\r\nTo use it (or to check it) go to tools/python and run `python clean_strings_txt.py -s`","created_at":"2016-10-04T13:42:55Z","updated_at":"2016-10-10T09:08:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b0e806f4ad7195071eb07aa77fb1a01dbd680f25","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/mapsme/omim/pulls/4438/commits","review_comments_url":"https://api.github.com/repos/mapsme/omim/pulls/4438/comments","review_comment_url":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mapsme/omim/issues/4438/comments","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/135b24df98801f077ca0538fb3d8854cff80b753","head":{"label":"therearesomewhocallmetim:strings-txt-filter","ref":"strings-txt-filter","sha":"135b24df98801f077ca0538fb3d8854cff80b753","user":{"login":"therearesomewhocallmetim","id":14867234,"avatar_url":"https://avatars.githubusercontent.com/u/14867234?v=3","gravatar_id":"","url":"https://api.github.com/users/therearesomewhocallmetim","html_url":"https://github.com/therearesomewhocallmetim","followers_url":"https://api.github.com/users/therearesomewhocallmetim/followers","following_url":"https://api.github.com/users/therearesomewhocallmetim/following{/other_user}","gists_url":"https://api.github.com/users/therearesomewhocallmetim/gists{/gist_id}","starred_url":"https://api.github.com/users/therearesomewhocallmetim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/therearesomewhocallmetim/subscriptions","organizations_url":"https://api.github.com/users/therearesomewhocallmetim/orgs","repos_url":"https://api.github.com/users/therearesomewhocallmetim/repos","events_url":"https://api.github.com/users/therearesomewhocallmetim/events{/privacy}","received_events_url":"https://api.github.com/users/therearesomewhocallmetim/received_events","type":"User","site_admin":false},"repo":{"id":43429309,"name":"omim","full_name":"therearesomewhocallmetim/omim","owner":{"login":"therearesomewhocallmetim","id":14867234,"avatar_url":"https://avatars.githubusercontent.com/u/14867234?v=3","gravatar_id":"","url":"https://api.github.com/users/therearesomewhocallmetim","html_url":"https://github.com/therearesomewhocallmetim","followers_url":"https://api.github.com/users/therearesomewhocallmetim/followers","following_url":"https://api.github.com/users/therearesomewhocallmetim/following{/other_user}","gists_url":"https://api.github.com/users/therearesomewhocallmetim/gists{/gist_id}","starred_url":"https://api.github.com/users/therearesomewhocallmetim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/therearesomewhocallmetim/subscriptions","organizations_url":"https://api.github.com/users/therearesomewhocallmetim/orgs","repos_url":"https://api.github.com/users/therearesomewhocallmetim/repos","events_url":"https://api.github.com/users/therearesomewhocallmetim/events{/privacy}","received_events_url":"https://api.github.com/users/therearesomewhocallmetim/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/therearesomewhocallmetim/omim","description":"MAPS.ME - Offline OpenStreetMap maps for iOS/Android/Mac/Linux/Windows","fork":true,"url":"https://api.github.com/repos/therearesomewhocallmetim/omim","forks_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/forks","keys_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/teams","hooks_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/hooks","issue_events_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/issues/events{/number}","events_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/events","assignees_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/assignees{/user}","branches_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/branches{/branch}","tags_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/tags","blobs_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/languages","stargazers_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/stargazers","contributors_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/contributors","subscribers_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/subscribers","subscription_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/subscription","commits_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/contents/{+path}","compare_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/merges","archive_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/downloads","issues_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/issues{/number}","pulls_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/labels{/name}","releases_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/releases{/id}","deployments_url":"https://api.github.com/repos/therearesomewhocallmetim/omim/deployments","created_at":"2015-09-30T11:33:11Z","updated_at":"2015-09-30T11:35:20Z","pushed_at":"2016-10-10T09:01:31Z","git_url":"git://github.com/therearesomewhocallmetim/omim.git","ssh_url":"git@github.com:therearesomewhocallmetim/omim.git","clone_url":"https://github.com/therearesomewhocallmetim/omim.git","svn_url":"https://github.com/therearesomewhocallmetim/omim","homepage":null,"size":2689379,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"mapsme:master","ref":"master","sha":"75b38035b7aca2cad9aa9498b70d09972bbebc7e","user":{"login":"mapsme","id":14185141,"avatar_url":"https://avatars.githubusercontent.com/u/14185141?v=3","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"repo":{"id":42798033,"name":"omim","full_name":"mapsme/omim","owner":{"login":"mapsme","id":14185141,"avatar_url":"https://avatars.githubusercontent.com/u/14185141?v=3","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mapsme/omim","description":"MAPS.ME - Offline OpenStreetMap maps for iOS/Android/Mac/Linux/Windows","fork":false,"url":"https://api.github.com/repos/mapsme/omim","forks_url":"https://api.github.com/repos/mapsme/omim/forks","keys_url":"https://api.github.com/repos/mapsme/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mapsme/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mapsme/omim/teams","hooks_url":"https://api.github.com/repos/mapsme/omim/hooks","issue_events_url":"https://api.github.com/repos/mapsme/omim/issues/events{/number}","events_url":"https://api.github.com/repos/mapsme/omim/events","assignees_url":"https://api.github.com/repos/mapsme/omim/assignees{/user}","branches_url":"https://api.github.com/repos/mapsme/omim/branches{/branch}","tags_url":"https://api.github.com/repos/mapsme/omim/tags","blobs_url":"https://api.github.com/repos/mapsme/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mapsme/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mapsme/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/mapsme/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/mapsme/omim/languages","stargazers_url":"https://api.github.com/repos/mapsme/omim/stargazers","contributors_url":"https://api.github.com/repos/mapsme/omim/contributors","subscribers_url":"https://api.github.com/repos/mapsme/omim/subscribers","subscription_url":"https://api.github.com/repos/mapsme/omim/subscription","commits_url":"https://api.github.com/repos/mapsme/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/mapsme/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/mapsme/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/mapsme/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/mapsme/omim/contents/{+path}","compare_url":"https://api.github.com/repos/mapsme/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mapsme/omim/merges","archive_url":"https://api.github.com/repos/mapsme/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mapsme/omim/downloads","issues_url":"https://api.github.com/repos/mapsme/omim/issues{/number}","pulls_url":"https://api.github.com/repos/mapsme/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/mapsme/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/mapsme/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mapsme/omim/labels{/name}","releases_url":"https://api.github.com/repos/mapsme/omim/releases{/id}","deployments_url":"https://api.github.com/repos/mapsme/omim/deployments","created_at":"2015-09-20T02:57:13Z","updated_at":"2016-10-09T22:18:13Z","pushed_at":"2016-10-10T09:06:43Z","git_url":"git://github.com/mapsme/omim.git","ssh_url":"git@github.com:mapsme/omim.git","clone_url":"https://github.com/mapsme/omim.git","svn_url":"https://github.com/mapsme/omim","homepage":null,"size":2815734,"stargazers_count":2000,"watchers_count":2000,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":369,"mirror_url":null,"open_issues_count":344,"forks":369,"open_issues":344,"watchers":2000,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4438"},"html":{"href":"https://github.com/mapsme/omim/pull/4438"},"issue":{"href":"https://api.github.com/repos/mapsme/omim/issues/4438"},"comments":{"href":"https://api.github.com/repos/mapsme/omim/issues/4438/comments"},"review_comments":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4438/comments"},"review_comment":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mapsme/omim/pulls/4438/commits"},"statuses":{"href":"https://api.github.com/repos/mapsme/omim/statuses/135b24df98801f077ca0538fb3d8854cff80b753"}}}}
{"actor":{"display_login":"ygorshenin"}}