{ "info": { "author": "Anthony Sottile", "author_email": "asottile@umich.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "[![Build Status](https://travis-ci.org/asottile/all-repos.svg?branch=master)](https://travis-ci.org/asottile/all-repos)\n[![Coverage Status](https://coveralls.io/repos/github/asottile/all-repos/badge.svg?branch=master)](https://coveralls.io/github/asottile/all-repos?branch=master)\n\nall-repos\n=========\n\nClone all your repositories and apply sweeping changes.\n\n## Installation\n\n`pip install all-repos`\n\n\n## CLI\n\nAll command line interfaces provided by `all-repos` provide the following\noptions:\n\n- `-h` / `--help`: show usage information\n- `-C CONFIG_FILENAME` / `--config-filename CONFIG_FILENAME`: use a non-default\n config file (the default `all-repos.json` can be changed with the environment\n variable `ALL_REPOS_CONFIG_FILENAME`).\n- `--color {auto,always,never}`: use color in output (default `auto`).\n\n\n### `all-repos-complete [options]`\n\nAdd `git clone` tab completion for all-repos repositories.\n\nRequires [jq](https://stedolan.github.io/jq/) to function.\n\nAdd to `.bash_profile`:\n\n```bash\neval \"$(all-repos-complete -C ~/.../all-repos.json --bash)\"\n```\n\n### `all-repos-clone [options]`\n\nClone all the repositories into the `output_dir`. If run again, this command\nwill update existing repositories.\n\nOptions:\n\n- `-j JOBS` / `--jobs JOBS`: how many concurrent jobs will be used to complete\n the operation. Specify 0 or -1 to match the number of cpus. (default `8`).\n\nSample invocations:\n\n- `all-repos-clone`: clone the repositories specified in `all-repos.json`\n- `all-repos-clone -C all-repos2.json`: clone using a non-default config\n filename.\n\n### `all-repos-find-files [options] PATTERN`\n\nSimilar to a distributed `git ls-files | grep -P PATTERN`.\n\nArguments:\n- `PATTERN`: the [python regex](https://docs.python.org/3/library/re.html)\n to match.\n\nOptions:\n\n- `--repos-with-matches`: only print repositories with matches.\n\nSample invocations:\n\n- `all-repos-find-files setup.py`: find all `setup.py` files.\n- `all-repos-find-files --repos setup.py`: find all repositories containing\n a `setup.py`.\n\n### `all-repos-grep [options] [GIT_GREP_OPTIONS]`\n\nSimilar to a distributed `git grep ...`.\n\nOptions:\n\n- `--repos-with-matches`: only print repositories with matches.\n- `GIT_GREP_OPTIONS`: additional arguments will be passed on to `git grep`.\n see `git grep --help` for available options.\n\nSample invocations:\n\n- `all-repos-grep pre-commit -- 'requirements*.txt'`: find all repositories\n which have `pre-commit` listed in a requirements file.\n- `all-repos-grep -L six -- setup.py`: find setup.py files which do not\n contain `six`.\n\n### `all-repos-list-repos [options]`\n\nList all cloned repository names.\n\n### `all-repos-manual [options]`\n\nInteractively apply a manual change across repos.\n\n_note_: `all-repos-manual` will always run in `--interactive` autofixing mode.\n\n_note_: `all-repos-manual` _requires_ the `--repos` autofixer option.\n\nOptions:\n\n- [autofix options](#all_reposautofix_libadd_fixer_args): `all-repos-manual` is\n an autofixer and supports all of the autofixer options.\n- `--branch-name BRANCH_NAME`: override the autofixer branch name (default\n `all-repos-manual`).\n- `--commit-msg COMMIT_MSG` (required): set the autofixer commit message.\n\n\n### `all-repos-sed [options] EXPRESSION FILENAMES`\n\nSimilar to a distributed\n`git ls-files -z -- FILENAMES | xargs -0 sed -i EXPRESSION`.\n\n_note_: this assumes GNU sed. If you're on macOS, install `gnu-sed` with Homebrew:\n\n```bash\nbrew install gnu-sed\n\n# Add to .bashrc / .zshrc\nexport PATH=\"/usr/local/opt/gnu-sed/libexec/gnubin:$PATH\"\n```\n\nArguments:\n\n- `EXPRESSION`: sed program. For example: `s/hi/hello/g`.\n- `FILENAMES`: filenames glob (passed to `git ls-files`).\n\nOptions:\n\n- [autofix options](#all_reposautofix_libadd_fixer_args): `all-repos-sed` is\n an autofixer and supports all of the autofixer options.\n- `-r` / `--regexp-extended`: use extended regular expressions in the script.\n See `man sed` for further details.\n- `--branch-name BRANCH_NAME` override the autofixer branch name (default\n `all-repos-sed`).\n- `--commit-msg COMMIT_MSG` override the autofixer commit message. (default\n `git ls-files -z -- FILENAMES | xargs -0 sed -i ... EXPRESSION`).\n\nSample invocations:\n\n- `all-repos-sed 's/foo/bar/g' -- '*'`: replace `foo` with `bar` in all files.\n\n## Configuring\n\nA configuration file looks roughly like this:\n\n```json\n{\n \"output_dir\": \"output\",\n \"source\": \"all_repos.source.github\",\n \"source_settings\": {\n \"api_key\": \"...\",\n \"username\": \"asottile\"\n },\n \"push\": \"all_repos.push.github_pull_request\",\n \"push_settings\": {\n \"api_key\": \"...\",\n \"username\": \"asottile\"\n }\n}\n```\n\n- `output_dir`: where repositories will be cloned to when `all-repos-clone` is\n run.\n- `source`: the module import path to a `source`, see below for builtin\n source modules as well as directions for writing your own.\n- `source_settings`: the source-type-specific settings, the source module's\n documentation will explain the various possible values.\n- `push`: the module import path to a `push`, see below for builtin push\n modules as well as directions for writing your own.\n- `push_settings`: the push-type-specific settings, the push module's\n documentation will explain the various possible values.\n- `include` (default `\"\"`): python regex for selecting repositories. Only\n repository names which match this regex will be included.\n- `exclude` (default `\"^$\"`): python regex for excluding repositories.\n Repository names which match this regex will be excluded.\n- `all_branches` (default `false`): whether to clone all of the branches or\n just the default upstream branch.\n\n## Source modules\n\n### `all_repos.source.json_file`\n\nClones all repositories listed in a file. The file must be formatted as\nfollows:\n\n```json\n{\n \"example/repo1\": \"https://git.example.com/example/repo1\",\n \"repo2\": \"https://git.example.com/repo2\"\n}\n```\n\n#### Required `source_settings`\n\n- `filename`: file containing repositories one-per-line.\n\n#### Directory location\n\n```\noutput/\n+--- repos.json\n+--- repos_filtered.json\n+--- {repo_key1}/\n+--- {repo_key2}/\n+--- {repo_key3}/\n```\n\n### `all_repos.source.github`\n\nClones all repositories available to a user on github.\n\n#### Required `source_settings`\n\n- `api_key`: the api key which the user will log in as.\n - Use [the settings tab](//github.com/settings/tokens/new) to create a\n personal access token.\n - The minimum scope required to function is `public_repo`, though you'll\n need `repo` to access private repositories.\n- `username`: the github username you will log in as.\n\n#### Optional `source_settings`\n\n- `collaborator` (default `false`): whether to include repositories which are\n not owned but can be contributed to as a collaborator.\n- `forks` (default `false`): whether to include repositories which are forks.\n- `private` (default `false`): whether to include private repositories.\n\n#### Directory location\n\n```\noutput/\n+--- repos.json\n+--- repos_filtered.json\n+--- {username1}/\n +--- {repo1}/\n +--- {repo2}/\n+--- {username2}/\n +--- {repo3}/\n```\n\n### `all_repos.source.github_org`\n\nClones all repositories from an organization on github.\n\n#### Required `source_settings`\n\n- `api_key`: the api key which the user will log in as.\n - Use [the settings tab](//github.com/settings/tokens/new) to create a\n personal access token.\n - The minimum scope required to function is `public_repo`, though you'll\n need `repo` to access private repositories.\n- `org`: the organization to clone from\n\n#### Optional `source_settings`\n\n- `collaborator` (default `true`): whether to include repositories which are\n not owned but can be contributed to as a collaborator.\n- `forks` (default `false`): whether to include repositories which are forks.\n- `private` (default `false`): whether to include private repositories.\n\n#### Directory location\n\nSee the directory structure for\n[`all_repos.source.github`](#all_repossourcegithub).\n\n### `all_repos.source.gitolite`\n\nClones all repositories available to a user on a\n[gitolite](http://gitolite.com/gitolite/index.html) host.\n\n#### Required `source_settings`\n\n- `username`: the user to SSH to the server as (usually `git`)\n- `hostname`: the hostname of your gitolite server (e.g. `git.mycompany.com`)\n\nThe gitolite API is served over SSH. It is assumed that when `all-repos-clone`\nis called, it's possible to make SSH connections with the username and hostname\nconfigured here in order to query that API.\n\n#### Optional `source_settings`\n\n- `mirror_path` (default `None`): an optional mirror to clone repositories from.\n This is a Python format string, and can use the variable `repo_name`.\n\n This can be anything git understands, such as another remote server (e.g.\n `gitmirror.mycompany.com:{repo_name}`) or a local path (e.g.\n `/gitolite/git/{repo_name}.git`).\n\n#### Directory location\n\n```\noutput/\n+--- repos.json\n+--- repos_filtered.json\n+--- {repo_name1}.git/\n+--- {repo_name2}.git/\n+--- {repo_name3}.git/\n```\n\n\n### `all_repos.source.bitbucket`\n\nClones all repositories available to a user on Bitbucket.\n\n#### Required `source_settings`\n\n- `username`: the Bitbucket username you will log in as.\n- `app_password`: the authentication method for the above user to login with\n - Create an application password within your [account settings](https://bitbucket.org/account/admin/app-passwords).\n - We need the scope: Repositories -> Read\n\n#### Directory location\n\n```\noutput/\n+--- repos.json\n+--- repos_filtered.json\n+--- {username1}/\n +--- {repo1}/\n +--- {repo2}/\n+--- {username2}/\n +--- {repo3}/\n```\n\n## Writing your own source\n\nFirst create a module. This module must have the following api:\n\n### A `Settings` class\n\nThis class will receive keyword arguments for all values in the\n`source_settings` dictionary.\n\nAn easy way to implement the `Settings` class is by using a `namedtuple`:\n\n```python\nSettings = collections.namedtuple('Settings', ('required_thing', 'optional'))\nSettings.__new__.__defaults__ = ('optional default value',)\n```\n\nIn this example, the `required_thing` setting is a **required** setting\nwhereas `optional` may be omitted (and will get a default value of\n`'optional default value'`).\n\n### `def list_repos(settings: Settings) -> Dict[str, str]:` callable\n\nThis callable will be passed an instance of your `Settings` class. It must\nreturn a mapping from `{repo_name: repository_url}`. The `repo_name` is the\ndirectory name inside the `output_dir`.\n\n## Push modules\n\n### `all_repos.push.merge_to_master`\n\nMerges the branch directly to `master` and pushes. The commands it runs look\nroughly like this:\n\n```bash\ngit checkout master\ngit pull\ngit merge --no-ff $BRANCH\ngit push origin HEAD\n```\n\n#### Optional `push_settings`\n\n- `fast_forward` (default: `false`): if `true`, perform a fast-forward\n merge (`--ff-only`). If `false`, create a merge commit (`--no-ff`).\n\n### `all_repos.push.github_pull_request`\n\nPushes the branch to `origin` and then creates a github pull request for the\nbranch.\n\n#### Required `push_settings`\n\n- `api_key`: the api key which the user will log in as.\n - Use [the settings tab](//github.com/settings/tokens/new) to create a\n personal access token.\n - The minimum scope required to function is `public_repo`, though you'll\n need `repo` to access private repositories.\n- `username`: the github username you will log in as.\n\n#### Optional `push_settings`\n\n- `fork` (default: `false`): (if applicable) a fork will be created and pushed\n to instead of the upstream repository. The pull request will then be made\n to the upstream repository.\n\n\n### `all_repos.push.readonly`\n\nDoes nothing.\n\n#### `push_settings`\n\nThere are no configurable settings for `readonly`.\n\n## Writing your own push module\n\nFirst create a module. This module must have the following api:\n\n### A `Settings` class\n\nThis class will receive keyword arguments for all values in the `push_settings`\ndictionary.\n\n### `def push(settings: Settings, branch_name: str) -> None:`\n\nThis callable will be passed an instance of your `Settings` class. It should\ndeploy the branch. The function will be called with the root of the\nrepository as the `cwd`.\n\n## Writing an autofixer\n\nAn autofixer applies a change over all repositories.\n\n`all-repos` provides several api functions to write your autofixers with:\n\n### `all_repos.autofix_lib.add_fixer_args`\n\n```python\ndef add_fixer_args(parser):\n```\n\nAdds the autofixer cli options.\n\nOptions:\n\n- `--dry-run`: show what would happen but do not push.\n- `-i` / `--interactive`: interactively approve / deny fixes.\n- `-j JOBS` / `--jobs JOBS`: how many concurrent jobs will be used to complete\n the operation. Specify 0 or -1 to match the number of cpus. (default `1`).\n- `--limit LIMIT`: maximum number of repos to process (default: unlimited).\n- `--author AUTHOR`: override commit author. This is passed directly to\n `git commit`. An example: `--author='Herp Derp '`.\n- `--repos [REPOS [REPOS ...]]`: run against specific repositories instead.\n This is especially useful with `xargs autofixer ... --repos`. This can be\n used to specify repositories which are not managed by `all-repos`.\n\n### `all_repos.autofix_lib.from_cli`\n\n```python\ndef from_cli(args, *, find_repos, msg, branch_name):\n```\n\nParse cli arguments and produce `autofix_lib` primitives. Returns\n`(repos, config, commit, autofix_settings)`. This is handled separately from\n`fix` to allow for fixers to adjust arguments.\n\n- `find_repos`: callback taking `Config` as a positional argument.\n- `msg`: commit message.\n- `branch_name`: identifier used to construct the branch name.\n\n### `all_repos.autofix_lib.fix`\n\n```python\ndef fix(\n repos, *,\n apply_fix,\n check_fix=_noop_check_fix,\n config: Config,\n commit: Commit,\n autofix_settings: AutofixSettings,\n):\n```\n\nApply the fix.\n\n- `apply_fix`: callback which will be called once per repository. The `cwd`\n when the function is called will be the root of the repository.\n\n\n### `all_repos.autofix_lib.run`\n\n```python\ndef run(*cmd, **kwargs):\n```\n\nWrapper around `subprocess.run` which prints the command it will run. Unlike\n`subprocess.run`, this defaults `check=True` unless explicitly disabled.\n\n### Example autofixer\n\nThe trivial autofixer is as follows:\n\n```python\nimport argparse\n\nfrom all_repos import autofix_lib\n\ndef find_repos(config):\n return []\n\ndef apply_fix():\n pass\n\ndef main(argv=None):\n parser = argparse.ArgumentParser()\n autofix_lib.add_fixer_args(parser)\n args = parser.parse_args(argv)\n\n repos, config, commit, autofix_settings = autofix_lib.from_cli(\n args, find_repos=find_repos, msg='msg', branch_name='branch-name',\n )\n autofix_lib.fix(\n repos, apply_fix=apply_fix, config=config, commit=commit,\n autofix_settings=autofix_settings,\n )\n\nif __name__ == '__main__':\n exit(main())\n```\n\nYou can find some more involved examples in [all_repos/autofix](https://github.com/asottile/all-repos/tree/master/all_repos/autofix):\n- `all_repos.autofix.pre_commit_autoupdate`: runs `pre-commit autoupdate`.\n- `all_repos.autofix.pre_commit_autopep8_migrate`: migrates `autopep8-wrapper`\n from [pre-commit/pre-commit-hooks] to [mirrors-autopep8].\n- `all_repos.autofix.pre_commit_cache_dir`: updates the cache directory\n for travis-ci / appveyor for pre-commit 1.x.\n- `all_repos.autofix.pre_commit_flake8_migrate`: migrates `flake8` from\n [pre-commit/pre-commit-hooks] to [pycqa/flake8].\n- `all_repos.autofix.pre_commit_migrate_config`: runs\n `pre-commit migrate-config`.\n- `all_repos.autofix.setup_py_upgrade`: runs [setup-py-upgrade] and then\n tidies up the metadata fields and adds a few missing ones.\n\n[pre-commit/pre-commit-hooks]: https://github.com/pre-commit/pre-commit-hooks\n[mirrors-autopep8]: https://github.com/pre-commit/mirrors-autopep8\n[pycqa/flake8]: https://gitlab.com/pycqa/flake8\n[setup-py-upgrade]: https://github.com/asottile/setup-py-upgrade\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/asottile/all-repos", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "all-repos", "package_url": "https://pypi.org/project/all-repos/", "platform": "", "project_url": "https://pypi.org/project/all-repos/", "project_urls": { "Homepage": "https://github.com/asottile/all-repos" }, "release_url": "https://pypi.org/project/all-repos/1.14.0/", "requires_dist": [ "identify" ], "requires_python": ">=3.6", "summary": "Clone all your repositories and apply sweeping changes.", "version": "1.14.0" }, "last_serial": 5449536, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "d2b14146a99646e159d1e2ab51b4b27a", "sha256": "dc171d9507d6cbdb4c201c1b3da77c3d3f56bff82496e41f113badb7c761778f" }, "downloads": -1, "filename": "all_repos-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d2b14146a99646e159d1e2ab51b4b27a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5462, "upload_time": "2017-08-04T22:01:06", "url": "https://files.pythonhosted.org/packages/21/18/ef08ec19dae90b6c436c3a386864188a6bdf1c6ff78404b7b19c8cdadbbf/all_repos-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38a1d8ed45bb9d362960b839dc401318", "sha256": "ba3532692ba4b8e0a37bb49d9b4f21d6e59e4b5d45424853f87bc4eb81de73da" }, "downloads": -1, "filename": "all_repos-0.1.0.tar.gz", "has_sig": false, "md5_digest": "38a1d8ed45bb9d362960b839dc401318", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3290, "upload_time": "2017-08-04T22:00:52", "url": "https://files.pythonhosted.org/packages/95/1a/83d17089c0b211aa24f3c348da610c3f37efadb75517e4bc50beb58d4b45/all_repos-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bee16c69595cfcfc3f19600ae51a6630", "sha256": "a966bb13aa8af632f3f5bba334eecc577dfe4c1e8c8104942bb23ee6f29f3bdc" }, "downloads": -1, "filename": "all_repos-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bee16c69595cfcfc3f19600ae51a6630", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6964, "upload_time": "2017-08-09T16:53:21", "url": "https://files.pythonhosted.org/packages/1b/36/be0effc18ef575d6c43c43c09653d05a030c19b80862924016626d30b36c/all_repos-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0644b469875978207ebf4eb0597df936", "sha256": "2cc28a81409e600c8c2df7e88777c732e05f28d9cb9ef7bac11456c5d3d63b69" }, "downloads": -1, "filename": "all_repos-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0644b469875978207ebf4eb0597df936", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4007, "upload_time": "2017-08-09T16:53:24", "url": "https://files.pythonhosted.org/packages/41/9d/6e5c0c4e2483276ab8edc491d20b3430f7a866d7aad46d9f826eed40cb9d/all_repos-0.2.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "d096ab44819c5d1e970e852f566608eb", "sha256": "47a771dc71685972284d424a93262e92c3828bae5d5e185f56000a828b3d3957" }, "downloads": -1, "filename": "all_repos-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d096ab44819c5d1e970e852f566608eb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19917, "upload_time": "2017-10-25T03:50:49", "url": "https://files.pythonhosted.org/packages/3d/5b/372a51bb7b4c05b07667c26d3ac261b78e3270acf3808c77b08cdcee5b32/all_repos-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebb5c4220d8e48cc9fd491facfde08a1", "sha256": "0cf725390eb9f95873cb1d877ca3956d24239bffceceb6308b91ca182ad326bc" }, "downloads": -1, "filename": "all_repos-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ebb5c4220d8e48cc9fd491facfde08a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14584, "upload_time": "2017-10-25T03:50:50", "url": "https://files.pythonhosted.org/packages/d5/fb/ffbc3202a4f4ac7e3be088a68770d37ca587b669c7c86e574da6d9653195/all_repos-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "3fbacde33574bad5d80ba9257fa0a1e0", "sha256": "3eacb55382c53c761ab1012bcbd294b4f788887824075aaea86c9b3dc809cb82" }, "downloads": -1, "filename": "all_repos-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3fbacde33574bad5d80ba9257fa0a1e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20147, "upload_time": "2017-12-31T18:22:51", "url": "https://files.pythonhosted.org/packages/8b/9c/0a36f7fde1c138ef288d65f1173465833404f0bdcb11fb4edf90b2ccd4f3/all_repos-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36806921373a47d19cad40bdc4ac5630", "sha256": "4013e48da28dbdf1d06d55d1c62b40a10cd42edbb3b65555b39f776c9accc0ef" }, "downloads": -1, "filename": "all_repos-1.1.0.tar.gz", "has_sig": false, "md5_digest": "36806921373a47d19cad40bdc4ac5630", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14916, "upload_time": "2017-12-31T18:22:54", "url": "https://files.pythonhosted.org/packages/5d/ea/171f19c2241eeb29c970a33252b891ffd83852346277ee0ad25f1103f1ee/all_repos-1.1.0.tar.gz" } ], "1.10.0": [ { "comment_text": "", "digests": { "md5": "a2b71c8355e34d0eb8a3a605a510984f", "sha256": "0bd960a1ac751b7107d289779cbe577b4f8ec389d6b0fb9278ee3b9ce4fc460b" }, "downloads": -1, "filename": "all_repos-1.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2b71c8355e34d0eb8a3a605a510984f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26664, "upload_time": "2019-01-31T17:27:08", "url": "https://files.pythonhosted.org/packages/3c/12/6890ec49877b316b3dd3c3c7a2a7fa50b4a1a8c7ba27f76c0140d20ab562/all_repos-1.10.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b8fe70f92d538ea8d6a48fd93ff5d16", "sha256": "916358ccc1f313865b495e51009485162285264caf65c72e663cc2d18397f6ea" }, "downloads": -1, "filename": "all_repos-1.10.0.tar.gz", "has_sig": false, "md5_digest": "5b8fe70f92d538ea8d6a48fd93ff5d16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18497, "upload_time": "2019-01-31T17:27:09", "url": "https://files.pythonhosted.org/packages/3e/a2/1f26cbe70eebeeaf09d09253246f648235984728b24805c65869883dbdd1/all_repos-1.10.0.tar.gz" } ], "1.11.0": [ { "comment_text": "", "digests": { "md5": "698cdec3a93e8ecdb3ad0c7c747a4d81", "sha256": "eaca62153e680c9ca4c4bc37d7e2bf5a1eeafe9760d443315685f182f8be9862" }, "downloads": -1, "filename": "all_repos-1.11.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "698cdec3a93e8ecdb3ad0c7c747a4d81", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 32151, "upload_time": "2019-02-28T06:23:45", "url": "https://files.pythonhosted.org/packages/63/45/326bde444769ebc510bba2a9fa8d8b9030a1a877e79d6f32c1c9d5fb370a/all_repos-1.11.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5173814d3686e3d1d4978273d212178", "sha256": "66af6347d6194b4d10f9c6bf6285bceac4dc9c38c8d1c00dfa264dba373fed49" }, "downloads": -1, "filename": "all_repos-1.11.0.tar.gz", "has_sig": false, "md5_digest": "a5173814d3686e3d1d4978273d212178", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21125, "upload_time": "2019-02-28T06:23:46", "url": "https://files.pythonhosted.org/packages/6d/9c/2a222d85c3c83aa69afeeb92e0e5d4c2cf7639d1e05d57ea87932111be0e/all_repos-1.11.0.tar.gz" } ], "1.12.0": [ { "comment_text": "", "digests": { "md5": "373890840d49025b39ad4dbd5e67148f", "sha256": "c3e93490583c786f92d8711d37e7e356ef99211e7354f83e37e2cdb1577e88e5" }, "downloads": -1, "filename": "all_repos-1.12.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "373890840d49025b39ad4dbd5e67148f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 32193, "upload_time": "2019-03-05T00:08:48", "url": "https://files.pythonhosted.org/packages/1d/b7/f6296be5fcebc6e3361ef27679e81f3645aca4b9dcf7fe130be2aeeeef97/all_repos-1.12.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46b45acb7043f7a51ab1784f9df9a6bf", "sha256": "68eb6f34ce40fa2f096c59a51b6f11247b4557458ceaf3826d19beabe80d7f47" }, "downloads": -1, "filename": "all_repos-1.12.0.tar.gz", "has_sig": false, "md5_digest": "46b45acb7043f7a51ab1784f9df9a6bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 24615, "upload_time": "2019-03-05T00:08:49", "url": "https://files.pythonhosted.org/packages/bf/1c/a06551a4874be1089bf607b4fdcca4631c179cdf2857bbdba8713962954a/all_repos-1.12.0.tar.gz" } ], "1.13.0": [ { "comment_text": "", "digests": { "md5": "8e7adecc36993dba3bff02da6e152e07", "sha256": "787b37a6332212292adda3047da89033ecf1b494f35e6f1f4cb084cd4ad19018" }, "downloads": -1, "filename": "all_repos-1.13.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e7adecc36993dba3bff02da6e152e07", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 33418, "upload_time": "2019-06-02T15:41:01", "url": "https://files.pythonhosted.org/packages/f2/bb/e88bd28d7711f58ba0e61753d0782ec08d593ae351b9a22bb5e6a0e8e168/all_repos-1.13.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99582e86a75e3c7183295d850f95d2f1", "sha256": "e714e0901c36b64be14e2db81d97442a38c697dcda68bcc931cac0c12dacfacb" }, "downloads": -1, "filename": "all_repos-1.13.0.tar.gz", "has_sig": false, "md5_digest": "99582e86a75e3c7183295d850f95d2f1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21393, "upload_time": "2019-06-02T15:41:03", "url": "https://files.pythonhosted.org/packages/25/84/0ddd8d45eeace19fe688d91869cbb6111b8c440d3861fd2639e53a488b11/all_repos-1.13.0.tar.gz" } ], "1.14.0": [ { "comment_text": "", "digests": { "md5": "38bbe5b6adda6f94e30a4d7120aed3cb", "sha256": "fbaa0c5e1f7cd42f59d71380b5681b8992265dce6378af8fdf47c0dd47e2a5e7" }, "downloads": -1, "filename": "all_repos-1.14.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38bbe5b6adda6f94e30a4d7120aed3cb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 33579, "upload_time": "2019-06-26T04:50:54", "url": "https://files.pythonhosted.org/packages/26/60/2ed3ef5954ceea5523d3c30b4c3e86e8cb9600ad645d9f7ca40437fde1a0/all_repos-1.14.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cbf78f9f7c1acc6fa4aa95b31ca1e1f", "sha256": "1d49787245451b0a95d80a3c6393dbb847ff92042bac16c1febc2e4a67d6174f" }, "downloads": -1, "filename": "all_repos-1.14.0.tar.gz", "has_sig": false, "md5_digest": "8cbf78f9f7c1acc6fa4aa95b31ca1e1f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22072, "upload_time": "2019-06-26T04:50:55", "url": "https://files.pythonhosted.org/packages/75/b2/3d47e075aeb253c8479a3267b16d99cff52abd18f07d0126007e00f02ba8/all_repos-1.14.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c98278ecbdaab0dd399e2de327c39bce", "sha256": "8591a4aabccf3c45b6aa4e48395bdc6fb737dbcd6f3dbb5d3d3eebd723c0f3b4" }, "downloads": -1, "filename": "all_repos-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c98278ecbdaab0dd399e2de327c39bce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20328, "upload_time": "2017-12-31T22:12:22", "url": "https://files.pythonhosted.org/packages/04/51/ca130113f0a3d8b11b156fc140c9e3015f7a1e0ccbc5db0c04c472511545/all_repos-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46f509f1316af9311a683605ee6d1541", "sha256": "354bfddbe27fe253040ac02ecddf3115bb1a8b4d78c981100d025d21b9065894" }, "downloads": -1, "filename": "all_repos-1.2.0.tar.gz", "has_sig": false, "md5_digest": "46f509f1316af9311a683605ee6d1541", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15152, "upload_time": "2017-12-31T22:12:24", "url": "https://files.pythonhosted.org/packages/26/38/9f4bc9bc5fa6d8f41912936d633ecf74348399bacdd8a1cb64fa2f5bfa9a/all_repos-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "4a8eeadbfe1f3fbec9f8b5e16a4a9986", "sha256": "2767d4481e8de4775f94125c7392be80bcba40dbac56dbdf87a871d2b6e92205" }, "downloads": -1, "filename": "all_repos-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4a8eeadbfe1f3fbec9f8b5e16a4a9986", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20496, "upload_time": "2018-02-21T03:41:56", "url": "https://files.pythonhosted.org/packages/cf/16/c8f364ca6e275a85d0c8c468d99b656faef8a262b7d70ac45c1ceeefefd8/all_repos-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e104cb5ddb937fc31be71977484470c5", "sha256": "ca1daa72c5adcf8d93177e7d8a9f3731d4b1aa1fa23830524967a6d929475994" }, "downloads": -1, "filename": "all_repos-1.3.0.tar.gz", "has_sig": false, "md5_digest": "e104cb5ddb937fc31be71977484470c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15168, "upload_time": "2018-02-21T03:41:59", "url": "https://files.pythonhosted.org/packages/a2/ed/d038c07eb4b242ce74d3f404d4b24a97bd981ef96b7cb222ac1c5c0f96ac/all_repos-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "3ced82dbf3b37065c10fab90eaac7251", "sha256": "a2c2d64c14e3a0fc3ded39b3e2c9f47123675ed091ff85f1194b90466e2cceef" }, "downloads": -1, "filename": "all_repos-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ced82dbf3b37065c10fab90eaac7251", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20718, "upload_time": "2018-04-21T04:21:08", "url": "https://files.pythonhosted.org/packages/5e/f9/58690dfa41fc0f0325ff3515d599d0eb63ef9839d8ad2aed057b783f1d3c/all_repos-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "128c7ea4471ab979a198ad8cb19f4cf2", "sha256": "2b1fd42fd45dd5b945b152ae141127dc0e32e028dd4bbacf59d145540dd2b650" }, "downloads": -1, "filename": "all_repos-1.4.0.tar.gz", "has_sig": false, "md5_digest": "128c7ea4471ab979a198ad8cb19f4cf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15496, "upload_time": "2018-04-21T04:21:09", "url": "https://files.pythonhosted.org/packages/94/a8/b6e366906888f7b811634fe59608c032e40d369314b39e2305998e0a4c49/all_repos-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "0aa4f9a41ee001a54b399e2e77e319f7", "sha256": "33b2ec5bfdc3bf7d1ef95635d3c1a93332ac697acffe31d72ec22bbb61d80f50" }, "downloads": -1, "filename": "all_repos-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0aa4f9a41ee001a54b399e2e77e319f7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20502, "upload_time": "2018-05-12T19:47:39", "url": "https://files.pythonhosted.org/packages/e9/8e/4046d70537acfb876f1a7752a1e7d4b72aac81fd4f6076510e7f9f819956/all_repos-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09a1ef5391df854f15e6aa6b11c102ab", "sha256": "064939550b9e298e2568e691f223ae352b2e25f2d1a1db6eaf1562209633b2ae" }, "downloads": -1, "filename": "all_repos-1.5.0.tar.gz", "has_sig": false, "md5_digest": "09a1ef5391df854f15e6aa6b11c102ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15754, "upload_time": "2018-05-12T19:47:40", "url": "https://files.pythonhosted.org/packages/7f/da/3e9640f62b33a6f62ac531a60012983d749a88994b3217081e32888e9af3/all_repos-1.5.0.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "c65745aefa8c4692d825e6ca1426c8ec", "sha256": "dcc8bb75171a3e7dff0bbfb7a7c17152542b6e812c00921d62a5e1156ff138ba" }, "downloads": -1, "filename": "all_repos-1.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c65745aefa8c4692d825e6ca1426c8ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22899, "upload_time": "2018-06-26T03:59:09", "url": "https://files.pythonhosted.org/packages/1e/f3/361c9003b7bc04fe94d7be5576666542376340072efcc0322649a1debff1/all_repos-1.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28487deb7bbec6eac399552a9ae93f68", "sha256": "9b1d21cfeb289fac1a83d3c497a7e55ecef79074490fe1bc9b5422091bb8bcce" }, "downloads": -1, "filename": "all_repos-1.6.0.tar.gz", "has_sig": false, "md5_digest": "28487deb7bbec6eac399552a9ae93f68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17075, "upload_time": "2018-06-26T03:59:10", "url": "https://files.pythonhosted.org/packages/db/6c/436e756661d75404e87078ac3800924a1cbc9d26db2a369b76a6379d9889/all_repos-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "5f515ed1913f3b71ad250b9f559d9482", "sha256": "dae5e5a26a3f50933c5cf5c8983d0a43622065d209d8d3b4539346a0219c6806" }, "downloads": -1, "filename": "all_repos-1.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5f515ed1913f3b71ad250b9f559d9482", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22856, "upload_time": "2018-06-27T21:09:36", "url": "https://files.pythonhosted.org/packages/dc/7a/d731b4dd0e21145a21f75e12639b978447a9dd12e268feabd822c06511c1/all_repos-1.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1acbd7c53d27cb55c66cea2989f9a31e", "sha256": "79e9890217b581166208384f4ee7a136aaa526baa57d2a27798f234d71c448ed" }, "downloads": -1, "filename": "all_repos-1.6.1.tar.gz", "has_sig": false, "md5_digest": "1acbd7c53d27cb55c66cea2989f9a31e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16722, "upload_time": "2018-06-27T21:09:37", "url": "https://files.pythonhosted.org/packages/8e/2d/6484e3cd7c9f9ba53a98665fefd8e64a23a29b52917f2671e7bc40aea0c4/all_repos-1.6.1.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "121e9bbf729e63343ec6d051f6b01651", "sha256": "029e7e0e0efc08de7080b6eb030f56ddbb1c83cf6234284e10d11bdbcddc7e27" }, "downloads": -1, "filename": "all_repos-1.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "121e9bbf729e63343ec6d051f6b01651", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24918, "upload_time": "2018-10-13T02:41:19", "url": "https://files.pythonhosted.org/packages/99/83/5f3e2a851a7e0f2810e88eb7c5ef5ab6700dceedc6299cd2255566f8aae3/all_repos-1.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b26d8fc20cbea51c0200611a7732d7a", "sha256": "f89782ca31ce76c42bc8f78424d35f9504b1d0c1d310a8d9d6508e60992c8b55" }, "downloads": -1, "filename": "all_repos-1.7.0.tar.gz", "has_sig": false, "md5_digest": "7b26d8fc20cbea51c0200611a7732d7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17456, "upload_time": "2018-10-13T02:41:21", "url": "https://files.pythonhosted.org/packages/6e/c0/733b2e7fbd308bf9cf79cfbcc8a575b2ad45cba4a974dc47694d1da8fbe3/all_repos-1.7.0.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "be5b9dafdb466623519d3e4ead3b80db", "sha256": "7d5e14ea7b66542c5470da4f28a90078dd83cc467162c4df7a93fdfde1cf0405" }, "downloads": -1, "filename": "all_repos-1.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be5b9dafdb466623519d3e4ead3b80db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24283, "upload_time": "2019-01-15T22:04:06", "url": "https://files.pythonhosted.org/packages/ba/9d/9a4517f39c897e5c9bd7c02881fd98e1b88516e35bb558db57c3b8c9836b/all_repos-1.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "373c03feed8115a3d0bdf34ed19a43af", "sha256": "1737f4c1b8fd69d5ab2adcd965415581541222e9bc906b6abe9e9774b7e70099" }, "downloads": -1, "filename": "all_repos-1.8.0.tar.gz", "has_sig": false, "md5_digest": "373c03feed8115a3d0bdf34ed19a43af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17596, "upload_time": "2019-01-15T22:04:07", "url": "https://files.pythonhosted.org/packages/e4/2c/3292693e61456b9baababd259958fc840914d6ba6f506257c16979636541/all_repos-1.8.0.tar.gz" } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "9c85d4dfa907eeb457aae6a0d53870c5", "sha256": "5f20f8e174d38fcbd3c34e4589ce7f140d99938cf790dec27adb9917ea1a8989" }, "downloads": -1, "filename": "all_repos-1.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c85d4dfa907eeb457aae6a0d53870c5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25416, "upload_time": "2019-01-17T01:46:55", "url": "https://files.pythonhosted.org/packages/05/1a/698273fa85e4662765732f59d0872f8741d6ec5c01e5b94b0aceb373a2a0/all_repos-1.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff2b1229aff7f9adbb7d68218a298998", "sha256": "c0d36500fe07d9c960885c3de6f7a137856ae5a4cd55a59c679d1834c4273d94" }, "downloads": -1, "filename": "all_repos-1.9.0.tar.gz", "has_sig": false, "md5_digest": "ff2b1229aff7f9adbb7d68218a298998", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18024, "upload_time": "2019-01-17T01:46:56", "url": "https://files.pythonhosted.org/packages/4d/5d/d83dbd3c30a83977b9a89f02b7a5f860431227fddc7d39fd81a3be891bc6/all_repos-1.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "38bbe5b6adda6f94e30a4d7120aed3cb", "sha256": "fbaa0c5e1f7cd42f59d71380b5681b8992265dce6378af8fdf47c0dd47e2a5e7" }, "downloads": -1, "filename": "all_repos-1.14.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38bbe5b6adda6f94e30a4d7120aed3cb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 33579, "upload_time": "2019-06-26T04:50:54", "url": "https://files.pythonhosted.org/packages/26/60/2ed3ef5954ceea5523d3c30b4c3e86e8cb9600ad645d9f7ca40437fde1a0/all_repos-1.14.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cbf78f9f7c1acc6fa4aa95b31ca1e1f", "sha256": "1d49787245451b0a95d80a3c6393dbb847ff92042bac16c1febc2e4a67d6174f" }, "downloads": -1, "filename": "all_repos-1.14.0.tar.gz", "has_sig": false, "md5_digest": "8cbf78f9f7c1acc6fa4aa95b31ca1e1f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22072, "upload_time": "2019-06-26T04:50:55", "url": "https://files.pythonhosted.org/packages/75/b2/3d47e075aeb253c8479a3267b16d99cff52abd18f07d0126007e00f02ba8/all_repos-1.14.0.tar.gz" } ] }