{"action":"created","comment":{"url":"https://api.github.com/repos/voidlinux/void-packages/pulls/comments/49129970","id":49129970,"diff_hunk":"@@ -0,0 +1,550 @@\n+# -*- coding: utf-8 -*-\n+'''\n+Package support for XBPS packaging system (VoidLinux distribution)\n+\n+XXX please fix \"versionadded\" in this file on once merged into SaltStack.\n+'''\n+\n+\n+# Import python libs\n+from __future__ import absolute_import\n+import os\n+import re\n+import logging\n+\n+# Import salt libs\n+import salt.utils\n+import salt.utils.decorators as decorators\n+from salt.exceptions import CommandExecutionError, MinionError\n+\n+# Import 3rd-party libs\n+import salt.ext.six as six\n+\n+log = logging.getLogger(__name__)\n+\n+# Define the module's virtual name\n+__virtualname__ = 'pkg'\n+\n+\n+@decorators.memoize\n+def _check_xbps():\n+    '''\n+    Looks to see if xbps-install is present on the system, return full path\n+    '''\n+    return salt.utils.which('xbps-install')\n+\n+\n+@decorators.memoize\n+def _get_version():\n+    '''\n+    Get the xbps- tools version\n+    '''\n+    xpath = _check_xbps()\n+    version_string = __salt__['cmd.run'](\n+        '{0} --version'.format(xpath), output_loglevel='trace'\n+    )\n+    if version_string is None:\n+        # Dunno why it would, but...\n+        return False\n+\n+    VERSION_MATCH = re.compile(r'(?:XBPS:[\\s]+)([\\d.]+)(?:[\\s]+.*)')\n+    version_match = VERSION_MATCH.search(version_string)\n+    if not version_match:\n+        return False\n+\n+    return version_match.group(1).split('.')\n+\n+\n+def _rehash():\n+    '''\n+    Recomputes internal hash table for the PATH variable.\n+    Use whenever a new command is created during the current\n+    session.\n+    '''\n+    shell = __salt__['environ.get']('SHELL')\n+    if shell.split('/')[-1] in ('csh', 'tcsh'):\n+        __salt__['cmd.run']('rehash', output_loglevel='trace')\n+\n+\n+def __virtual__():\n+    '''\n+    Set the virtual pkg module if the os is void and xbps-install found\n+    '''\n+    if __grains__['os'] in ( 'void') and _check_xbps():\n+        return __virtualname__\n+    return False\n+\n+\n+def list_pkgs(versions_as_list=False, **kwargs):\n+    '''\n+    List the packages currently installed as a dict::\n+\n+        {'<package_name>': '<version>'}\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.list_pkgs\n+    '''\n+    versions_as_list = salt.utils.is_true(versions_as_list)\n+    # not yet implemented or not applicable\n+    if any([salt.utils.is_true(kwargs.get(x))\n+            for x in ('removed', 'purge_desired')]):\n+        return {}\n+\n+    cmd = 'xbps-query -l'\n+    ret = {}\n+    out = __salt__['cmd.run'](cmd, output_loglevel='trace')\n+    for line in out.splitlines():\n+        if not line:\n+            continue\n+        try:\n+            # xbps-query -l output sample: \n+            # ii desktop-file-utils-0.22_4  Utilities to ...\n+            #\n+            # XXX handle package status (like 'ii') ?\n+            pkg, ver = line.split(None)[1].rsplit('-', 1)\n+        except ValueError:\n+            log.error('xbps-query: Unexpected formatting in '\n+                      'line: \"{0}\"'.format(line))\n+\n+        __salt__['pkg_resource.add_pkg'](ret, pkg, ver)\n+    \n+    __salt__['pkg_resource.sort_pkglist'](ret)\n+    if not versions_as_list:\n+        __salt__['pkg_resource.stringify'](ret)\n+    return ret\n+\n+\n+def list_upgrades(**kwargs):\n+    '''\n+    Check whether or not an upgrade is available for all packages\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.list_upgrades\n+    '''\n+\n+    # sample output of 'xbps-install -un':\n+    #     fuse-2.9.4_4 update i686 http://repo.voidlinux.eu/current 298133 91688\n+    #     xtools-0.34_1 update noarch http://repo.voidlinux.eu/current 21424 10752\n+\n+    refresh = salt.utils.is_true(kwargs.pop('refresh', False))\n+    \n+    # Refresh repo index before checking for latest version available\n+    if refresh:\n+        refresh_db()\n+\n+    ret = {}\n+\n+    # retrieve list of updatable packages\n+    cmd = \"xbps-install -un\"\n+    out = __salt__['cmd.run'](cmd, output_loglevel='trace')\n+    for line in out.splitlines():\n+        if not line:\n+            continue\n+        try:\n+            pkg, ver = line.split()[0].rsplit('-', 1)\n+        except (ValueError, IndexError):\n+            log.error('xbps-query: Unexpected formatting in '\n+                      'line: \"{0}\"'.format(line))\n+            continue\n+\n+        log.trace(\"pkg={0} version={1}\".format(pkg, ver))\n+        ret[pkg] = ver\n+\n+    return ret\n+\n+\n+def latest_version(*names, **kwargs):\n+    '''\n+    Return the latest version of the named package available for upgrade or\n+    installation. If more than one package name is specified, a dict of\n+    name/version pairs is returned.\n+\n+    If the latest version of a given package is already installed, an empty\n+    string will be returned for that package.\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.latest_version <package name>\n+        salt '*' pkg.latest_version <package1> <package2> <package3> ...\n+    '''\n+\n+    # Why using 'xbps-install -un' and not 'xbps-query -R':\n+    # if several repos, xbps-query will produces this kind of output,\n+    # that is difficult to handle correctly:\n+    #     [*] salt-2015.8.3_2 Remote execution system ...\n+    #     [-] salt-2015.8.3_1 Remote execution system ...\n+    #\n+    # XXX 'xbps-install -un pkg1 pkg2' won't produce any info on updatable pkg1 \n+    # if pkg2 is up-to-date.\n+    # this is a bug of xbps-install 0.51, see opened issue https://github.com/voidlinux/xbps/issues/145\n+    #\n+    # sample outputs of 'xbps-install -un':\n+    #     fuse-2.9.4_4 update i686 http://repo.voidlinux.eu/current 298133 91688\n+    #     xtools-0.34_1 update noarch http://repo.voidlinux.eu/current 21424 10752\n+    #     Package 'vim' is up to date.\n+\n+    refresh = salt.utils.is_true(kwargs.pop('refresh', False))\n+    \n+    if len(names) == 0:\n+        return ''\n+\n+    # Refresh repo index before checking for latest version available\n+    if refresh:\n+        refresh_db()\n+\n+    # Initialize the dict with empty strings\n+    ret = {}\n+    for name in names:\n+        ret[name] = ''\n+\n+    # retrieve list of updatable packages\n+    # ignore return code since 'is up to date' case produces retcode==17 (xbps 0.51)\n+    cmd = '{0} {1}'.format(\"xbps-install -un\", ' '.join(names))\n+    out = __salt__['cmd.run'](cmd, ignore_retcode=True, \n+                                   output_loglevel='trace')\n+    for line in out.splitlines():\n+        if not line:\n+            continue\n+        if line.find(' is up to date.') != -1:\n+            continue\n+        # retrieve tuple pkgname version\n+        try:\n+            pkg, ver = line.split()[0].rsplit('-', 1)\n+        except (ValueError, IndexError):\n+            log.error('xbps-query: Unexpected formatting in '\n+                      'line: \"{0}\"'.format(line))\n+            continue\n+\n+        log.trace(\"pkg={0} version={1}\".format(pkg, ver))\n+        if pkg in names:\n+            ret[pkg] = ver\n+\n+    # Return a string if only one package name passed\n+    if len(names) == 1:\n+        return ret[names[0]]\n+    return ret\n+\n+\n+# available_version is being deprecated\n+available_version = latest_version\n+\n+\n+def upgrade_available(name):\n+    '''\n+    Check whether or not an upgrade is available for a given package\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.upgrade_available <package name>\n+    '''\n+    return latest_version(name) != ''\n+\n+\n+def refresh_db():\n+    '''\n+    Update list of available package(s) from repo(s)\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+    \n+    .. code-block:: bash\n+\n+        salt '*' pkg.refresh_db\n+    '''\n+    cmd = 'xbps-install -Sy'\n+    ret = {}\n+    call = __salt__['cmd.run_all'](cmd, output_loglevel='trace')\n+    if call['retcode'] != 0:\n+        comment = ''\n+        if 'stderr' in call:\n+            comment += call['stderr']\n+\n+        raise CommandExecutionError(\n+            '{0}'.format(comment))\n+\n+    return {}\n+\n+\n+def version(*names, **kwargs):\n+    '''\n+    Returns a string representing the package version or an empty string if not\n+    installed. If more than one package name is specified, a dict of\n+    name/version pairs is returned.\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.version <package name>\n+        salt '*' pkg.version <package1> <package2> <package3> ...\n+    '''\n+    return __salt__['pkg_resource.version'](*names, **kwargs)\n+\n+\n+def upgrade(refresh=False):\n+    '''\n+    Run a full system upgrade\n+\n+    refresh\n+        Whether or not to refresh the package database before installing.\n+\n+    Return a dict containing the new package names and versions::\n+\n+        {'<package>': {'old': '<old-version>',\n+                       'new': '<new-version>'}}\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.upgrade\n+    '''\n+    \n+    # XXX if xbps has to be upgraded, 2 times is required to fully upgrade system:\n+    #     one for xbps, a subsequent one for all other packages.\n+\n+    old = list_pkgs()\n+    cmd = 'xbps-install -Suy'\n+\n+    __salt__['cmd.run'](cmd, output_loglevel='trace')\n+    __context__.pop('pkg.list_pkgs', None)\n+    new = list_pkgs()\n+    return salt.utils.compare_dicts(old, new)\n+\n+\n+def install(name=None, refresh=False, fromrepo=None,\n+            pkgs=None, sources=None, **kwargs):\n+    '''\n+    Install the passed package\n+\n+    name\n+        The name of the package to be installed.\n+\n+    refresh\n+        Whether or not to refresh the package database before installing.\n+\n+    fromrepo\n+        Specify a package repository to install from.\n+\n+\n+    Multiple Package Installation Options:\n+\n+    pkgs\n+        A list of packages to install from a software repository. Must be\n+        passed as a python list.\n+\n+        CLI Example:\n+\n+        .. code-block:: bash\n+\n+            salt '*' pkg.install pkgs='[\"foo\",\"bar\"]'\n+\n+    sources\n+        A list of packages to install. Must be passed as a list of dicts,\n+        with the keys being package names, and the values being the source URI\n+        or local path to the package.\n+\n+        CLI Example:\n+\n+        .. code-block:: bash\n+\n+            salt '*' pkg.install sources='[{\"foo\": \"salt://foo.deb\"},{\"bar\": \"salt://bar.deb\"}]'\n+\n+    Return a dict containing the new package names and versions::\n+\n+        {'<package>': {'old': '<old-version>',\n+                       'new': '<new-version>'}}\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.install <package name>\n+    '''\n+    try:\n+        pkg_params, pkg_type = __salt__['pkg_resource.parse_targets'](\n+            name, pkgs, sources, **kwargs\n+        )\n+    except MinionError as exc:\n+        raise CommandExecutionError(exc)\n+\n+    if pkg_params is None or len(pkg_params) == 0:\n+        return {}\n+\n+    if pkg_type != 'repository':\n+        log.error('xbps: pkg_type \"{0}\" not supported.'.format(pkg_type))\n+        return {}\n+\n+    args = []\n+\n+    if refresh:\n+        args.append('-S')  # update repo db\n+    args.append('-y')      # assume yes when asked\n+    args.extend(pkg_params)\n+\n+    old = list_pkgs()\n+    __salt__['cmd.run'](\n+        '{0} {1}'.format('xbps-install', ' '.join(args)),\n+        output_loglevel='trace'\n+    )\n+    __context__.pop('pkg.list_pkgs', None)\n+    new = list_pkgs()\n+\n+    _rehash()\n+    return salt.utils.compare_dicts(old, new)\n+\n+\n+def remove(name=None, pkgs=None, recursive=True, **kwargs):\n+    '''\n+    name\n+        The name of the package to be deleted.\n+\n+    recursive\n+        Also remove dependant packages (not required elsewhere).\n+        This is the default mode.\n+\n+    Multiple Package Options:\n+\n+    pkgs\n+        A list of packages to delete. Must be passed as a python list. The\n+        ``name`` parameter will be ignored if this option is passed.\n+\n+    Returns a list containing the removed packages.\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.remove <package name> [recursive=False]\n+        salt '*' pkg.remove <package1>,<package2>,<package3> [recursive=False]\n+        salt '*' pkg.remove pkgs='[\"foo\", \"bar\"]' [recursive=False]\n+    '''\n+\n+    # XXX default mode is recursive removal. good idea ?\n+\n+    try:\n+        pkg_params, pkg_type = __salt__['pkg_resource.parse_targets'](\n+            name, pkgs\n+        )\n+    except MinionError as exc:\n+        raise CommandExecutionError(exc)\n+\n+    if not pkg_params:\n+        return {}\n+\n+    old = list_pkgs()\n+    \n+    # keep only installed packages\n+    targets = [x for x in pkg_params if x in old]\n+    if not targets:\n+        return {}\n+\n+    cmd = ['xbps-remove', '-y']\n+    if recursive:\n+        cmd.append('-R')\n+    cmd.extend(targets)\n+    __salt__['cmd.run'](cmd, output_loglevel='trace')\n+    __context__.pop('pkg.list_pkgs', None)\n+    new = list_pkgs()\n+\n+    return salt.utils.compare_dicts(old, new)\n+\n+\n+def list_repos():\n+    '''\n+    Lists all repos known by XBPS\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Example:\n+\n+    .. code-block:: bash\n+\n+       salt '*' pkg.list_repos\n+    '''\n+    repos = {}\n+    out = __salt__['cmd.run']('xbps-query -L', output_loglevel='trace')\n+    for line in out.splitlines():\n+        repo = {}\n+        if not line:\n+            continue\n+        try:\n+            nb, url, rsa = line.strip().split(' ',2)\n+        except ValueError:\n+            log.error('Problem parsing xbps-query: Unexpected formatting in '\n+                      'line: \"{0}\"'.format(line))\n+        repo['nbpkg'] = int(nb) if nb.isdigit() else 0\n+        repo['url'] = url\n+        repo['rsasigned'] = True if rsa == '(RSA signed)' else False\n+        repos[repo['url']] = repo\n+    return repos\n+\n+\n+def get_repo(repo, **kwargs):\n+    '''\n+    Display information about the repo.\n+\n+    .. versionadded:: XXX 201X.XX\n+\n+    CLI Examples:\n+\n+    .. code-block:: bash\n+\n+        salt '*' pkg.get_repo \"repo-url\"\n+    '''\n+    repos = list_repos()\n+    if repo in repos:\n+        # XXX return only the first match\n+        return repos[repo]\n+    return {}\n+\n+\n+def del_repo(repo):\n+    '''\n+    Unimplemented; manage XBPS file(s) of repo definition instead.\n+\n+    .. versionadded:: XXX 201X.XX\n+    '''\n+\n+    # XXX unimplemented\n+    log.error('del_repo(): unimplemented for XPBS')","path":"srcpkgs/salt/files/xbps-runit-void-support/modules/xbps-pkg.py","position":535,"original_position":535,"commit_id":"5689a19cd4ed3e4c3096bc889fec541377f4e305","original_commit_id":"5689a19cd4ed3e4c3096bc889fec541377f4e305","user":{"login":"Vaelatern","id":7906072,"avatar_url":"https://avatars.githubusercontent.com/u/7906072?v=3","gravatar_id":"","url":"https://api.github.com/users/Vaelatern","html_url":"https://github.com/Vaelatern","followers_url":"https://api.github.com/users/Vaelatern/followers","following_url":"https://api.github.com/users/Vaelatern/following{/other_user}","gists_url":"https://api.github.com/users/Vaelatern/gists{/gist_id}","starred_url":"https://api.github.com/users/Vaelatern/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Vaelatern/subscriptions","organizations_url":"https://api.github.com/users/Vaelatern/orgs","repos_url":"https://api.github.com/users/Vaelatern/repos","events_url":"https://api.github.com/users/Vaelatern/events{/privacy}","received_events_url":"https://api.github.com/users/Vaelatern/received_events","type":"User","site_admin":false},"body":"Thank you. @yopito, ^","created_at":"2016-01-07T21:42:29Z","updated_at":"2016-01-07T21:42:29Z","html_url":"https://github.com/voidlinux/void-packages/pull/3326#discussion_r49129970","pull_request_url":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326","_links":{"self":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/comments/49129970"},"html":{"href":"https://github.com/voidlinux/void-packages/pull/3326#discussion_r49129970"},"pull_request":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326"}}},"pull_request":{"url":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326","id":55339451,"html_url":"https://github.com/voidlinux/void-packages/pull/3326","diff_url":"https://github.com/voidlinux/void-packages/pull/3326.diff","patch_url":"https://github.com/voidlinux/void-packages/pull/3326.patch","issue_url":"https://api.github.com/repos/voidlinux/void-packages/issues/3326","number":3326,"state":"open","locked":false,"title":"[DO NOT MERGE] salt: add support of XBPS (package & repo management) and runit/sv (service management)","user":{"login":"yopito","id":12870617,"avatar_url":"https://avatars.githubusercontent.com/u/12870617?v=3","gravatar_id":"","url":"https://api.github.com/users/yopito","html_url":"https://github.com/yopito","followers_url":"https://api.github.com/users/yopito/followers","following_url":"https://api.github.com/users/yopito/following{/other_user}","gists_url":"https://api.github.com/users/yopito/gists{/gist_id}","starred_url":"https://api.github.com/users/yopito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yopito/subscriptions","organizations_url":"https://api.github.com/users/yopito/orgs","repos_url":"https://api.github.com/users/yopito/repos","events_url":"https://api.github.com/users/yopito/events{/privacy}","received_events_url":"https://api.github.com/users/yopito/received_events","type":"User","site_admin":false},"body":"This is a first working version.\r\nFor details and limitations of this implementation, please see `srcpkgs/salt/files/xbps-runit-void-support/README.md` in this packaging.","created_at":"2016-01-07T13:49:40Z","updated_at":"2016-01-07T21:42:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"72dbb08905659674167afb840010ecd21ec8dfee","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326/commits","review_comments_url":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326/comments","review_comment_url":"https://api.github.com/repos/voidlinux/void-packages/pulls/comments{/number}","comments_url":"https://api.github.com/repos/voidlinux/void-packages/issues/3326/comments","statuses_url":"https://api.github.com/repos/voidlinux/void-packages/statuses/5689a19cd4ed3e4c3096bc889fec541377f4e305","head":{"label":"yopito:salt","ref":"salt","sha":"5689a19cd4ed3e4c3096bc889fec541377f4e305","user":{"login":"yopito","id":12870617,"avatar_url":"https://avatars.githubusercontent.com/u/12870617?v=3","gravatar_id":"","url":"https://api.github.com/users/yopito","html_url":"https://github.com/yopito","followers_url":"https://api.github.com/users/yopito/followers","following_url":"https://api.github.com/users/yopito/following{/other_user}","gists_url":"https://api.github.com/users/yopito/gists{/gist_id}","starred_url":"https://api.github.com/users/yopito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yopito/subscriptions","organizations_url":"https://api.github.com/users/yopito/orgs","repos_url":"https://api.github.com/users/yopito/repos","events_url":"https://api.github.com/users/yopito/events{/privacy}","received_events_url":"https://api.github.com/users/yopito/received_events","type":"User","site_admin":false},"repo":{"id":42416384,"name":"void-packages","full_name":"yopito/void-packages","owner":{"login":"yopito","id":12870617,"avatar_url":"https://avatars.githubusercontent.com/u/12870617?v=3","gravatar_id":"","url":"https://api.github.com/users/yopito","html_url":"https://github.com/yopito","followers_url":"https://api.github.com/users/yopito/followers","following_url":"https://api.github.com/users/yopito/following{/other_user}","gists_url":"https://api.github.com/users/yopito/gists{/gist_id}","starred_url":"https://api.github.com/users/yopito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yopito/subscriptions","organizations_url":"https://api.github.com/users/yopito/orgs","repos_url":"https://api.github.com/users/yopito/repos","events_url":"https://api.github.com/users/yopito/events{/privacy}","received_events_url":"https://api.github.com/users/yopito/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/yopito/void-packages","description":"The XBPS source packages collection","fork":true,"url":"https://api.github.com/repos/yopito/void-packages","forks_url":"https://api.github.com/repos/yopito/void-packages/forks","keys_url":"https://api.github.com/repos/yopito/void-packages/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yopito/void-packages/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yopito/void-packages/teams","hooks_url":"https://api.github.com/repos/yopito/void-packages/hooks","issue_events_url":"https://api.github.com/repos/yopito/void-packages/issues/events{/number}","events_url":"https://api.github.com/repos/yopito/void-packages/events","assignees_url":"https://api.github.com/repos/yopito/void-packages/assignees{/user}","branches_url":"https://api.github.com/repos/yopito/void-packages/branches{/branch}","tags_url":"https://api.github.com/repos/yopito/void-packages/tags","blobs_url":"https://api.github.com/repos/yopito/void-packages/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yopito/void-packages/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yopito/void-packages/git/refs{/sha}","trees_url":"https://api.github.com/repos/yopito/void-packages/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yopito/void-packages/statuses/{sha}","languages_url":"https://api.github.com/repos/yopito/void-packages/languages","stargazers_url":"https://api.github.com/repos/yopito/void-packages/stargazers","contributors_url":"https://api.github.com/repos/yopito/void-packages/contributors","subscribers_url":"https://api.github.com/repos/yopito/void-packages/subscribers","subscription_url":"https://api.github.com/repos/yopito/void-packages/subscription","commits_url":"https://api.github.com/repos/yopito/void-packages/commits{/sha}","git_commits_url":"https://api.github.com/repos/yopito/void-packages/git/commits{/sha}","comments_url":"https://api.github.com/repos/yopito/void-packages/comments{/number}","issue_comment_url":"https://api.github.com/repos/yopito/void-packages/issues/comments{/number}","contents_url":"https://api.github.com/repos/yopito/void-packages/contents/{+path}","compare_url":"https://api.github.com/repos/yopito/void-packages/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yopito/void-packages/merges","archive_url":"https://api.github.com/repos/yopito/void-packages/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yopito/void-packages/downloads","issues_url":"https://api.github.com/repos/yopito/void-packages/issues{/number}","pulls_url":"https://api.github.com/repos/yopito/void-packages/pulls{/number}","milestones_url":"https://api.github.com/repos/yopito/void-packages/milestones{/number}","notifications_url":"https://api.github.com/repos/yopito/void-packages/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yopito/void-packages/labels{/name}","releases_url":"https://api.github.com/repos/yopito/void-packages/releases{/id}","created_at":"2015-09-13T23:08:16Z","updated_at":"2015-09-13T23:08:30Z","pushed_at":"2016-01-07T14:02:35Z","git_url":"git://github.com/yopito/void-packages.git","ssh_url":"git@github.com:yopito/void-packages.git","clone_url":"https://github.com/yopito/void-packages.git","svn_url":"https://github.com/yopito/void-packages","homepage":"http://www.voidlinux.eu","size":69359,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"voidlinux:master","ref":"master","sha":"17920b4848d115c49dc4fb76f2d082e53a06e17f","user":{"login":"voidlinux","id":1512782,"avatar_url":"https://avatars.githubusercontent.com/u/1512782?v=3","gravatar_id":"","url":"https://api.github.com/users/voidlinux","html_url":"https://github.com/voidlinux","followers_url":"https://api.github.com/users/voidlinux/followers","following_url":"https://api.github.com/users/voidlinux/following{/other_user}","gists_url":"https://api.github.com/users/voidlinux/gists{/gist_id}","starred_url":"https://api.github.com/users/voidlinux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/voidlinux/subscriptions","organizations_url":"https://api.github.com/users/voidlinux/orgs","repos_url":"https://api.github.com/users/voidlinux/repos","events_url":"https://api.github.com/users/voidlinux/events{/privacy}","received_events_url":"https://api.github.com/users/voidlinux/received_events","type":"Organization","site_admin":false},"repo":{"id":2060910,"name":"void-packages","full_name":"voidlinux/void-packages","owner":{"login":"voidlinux","id":1512782,"avatar_url":"https://avatars.githubusercontent.com/u/1512782?v=3","gravatar_id":"","url":"https://api.github.com/users/voidlinux","html_url":"https://github.com/voidlinux","followers_url":"https://api.github.com/users/voidlinux/followers","following_url":"https://api.github.com/users/voidlinux/following{/other_user}","gists_url":"https://api.github.com/users/voidlinux/gists{/gist_id}","starred_url":"https://api.github.com/users/voidlinux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/voidlinux/subscriptions","organizations_url":"https://api.github.com/users/voidlinux/orgs","repos_url":"https://api.github.com/users/voidlinux/repos","events_url":"https://api.github.com/users/voidlinux/events{/privacy}","received_events_url":"https://api.github.com/users/voidlinux/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/voidlinux/void-packages","description":"The XBPS source packages collection","fork":false,"url":"https://api.github.com/repos/voidlinux/void-packages","forks_url":"https://api.github.com/repos/voidlinux/void-packages/forks","keys_url":"https://api.github.com/repos/voidlinux/void-packages/keys{/key_id}","collaborators_url":"https://api.github.com/repos/voidlinux/void-packages/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/voidlinux/void-packages/teams","hooks_url":"https://api.github.com/repos/voidlinux/void-packages/hooks","issue_events_url":"https://api.github.com/repos/voidlinux/void-packages/issues/events{/number}","events_url":"https://api.github.com/repos/voidlinux/void-packages/events","assignees_url":"https://api.github.com/repos/voidlinux/void-packages/assignees{/user}","branches_url":"https://api.github.com/repos/voidlinux/void-packages/branches{/branch}","tags_url":"https://api.github.com/repos/voidlinux/void-packages/tags","blobs_url":"https://api.github.com/repos/voidlinux/void-packages/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/voidlinux/void-packages/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/voidlinux/void-packages/git/refs{/sha}","trees_url":"https://api.github.com/repos/voidlinux/void-packages/git/trees{/sha}","statuses_url":"https://api.github.com/repos/voidlinux/void-packages/statuses/{sha}","languages_url":"https://api.github.com/repos/voidlinux/void-packages/languages","stargazers_url":"https://api.github.com/repos/voidlinux/void-packages/stargazers","contributors_url":"https://api.github.com/repos/voidlinux/void-packages/contributors","subscribers_url":"https://api.github.com/repos/voidlinux/void-packages/subscribers","subscription_url":"https://api.github.com/repos/voidlinux/void-packages/subscription","commits_url":"https://api.github.com/repos/voidlinux/void-packages/commits{/sha}","git_commits_url":"https://api.github.com/repos/voidlinux/void-packages/git/commits{/sha}","comments_url":"https://api.github.com/repos/voidlinux/void-packages/comments{/number}","issue_comment_url":"https://api.github.com/repos/voidlinux/void-packages/issues/comments{/number}","contents_url":"https://api.github.com/repos/voidlinux/void-packages/contents/{+path}","compare_url":"https://api.github.com/repos/voidlinux/void-packages/compare/{base}...{head}","merges_url":"https://api.github.com/repos/voidlinux/void-packages/merges","archive_url":"https://api.github.com/repos/voidlinux/void-packages/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/voidlinux/void-packages/downloads","issues_url":"https://api.github.com/repos/voidlinux/void-packages/issues{/number}","pulls_url":"https://api.github.com/repos/voidlinux/void-packages/pulls{/number}","milestones_url":"https://api.github.com/repos/voidlinux/void-packages/milestones{/number}","notifications_url":"https://api.github.com/repos/voidlinux/void-packages/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/voidlinux/void-packages/labels{/name}","releases_url":"https://api.github.com/repos/voidlinux/void-packages/releases{/id}","created_at":"2011-07-17T07:26:35Z","updated_at":"2016-01-07T05:16:11Z","pushed_at":"2016-01-07T21:11:54Z","git_url":"git://github.com/voidlinux/void-packages.git","ssh_url":"git@github.com:voidlinux/void-packages.git","clone_url":"https://github.com/voidlinux/void-packages.git","svn_url":"https://github.com/voidlinux/void-packages","homepage":"http://www.voidlinux.eu","size":77531,"stargazers_count":139,"watchers_count":139,"language":"Shell","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":172,"mirror_url":null,"open_issues_count":227,"forks":172,"open_issues":227,"watchers":139,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326"},"html":{"href":"https://github.com/voidlinux/void-packages/pull/3326"},"issue":{"href":"https://api.github.com/repos/voidlinux/void-packages/issues/3326"},"comments":{"href":"https://api.github.com/repos/voidlinux/void-packages/issues/3326/comments"},"review_comments":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326/comments"},"review_comment":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/voidlinux/void-packages/pulls/3326/commits"},"statuses":{"href":"https://api.github.com/repos/voidlinux/void-packages/statuses/5689a19cd4ed3e4c3096bc889fec541377f4e305"}}}}