{"id":30887621,"url":"https://github.com/susu9/pick-patch","last_synced_at":"2026-05-17T17:03:02.634Z","repository":{"id":57452564,"uuid":"149227531","full_name":"susu9/pick-patch","owner":"susu9","description":"A tool helps you cherry pick patches from Gerrit server in a huge project","archived":false,"fork":false,"pushed_at":"2020-08-16T06:02:04.000Z","size":133,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-24T06:38:42.382Z","etag":null,"topics":["cherry-pick","gerrit","git","repo"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/susu9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-18T04:10:09.000Z","updated_at":"2020-08-16T06:01:48.000Z","dependencies_parsed_at":"2022-09-02T08:23:15.831Z","dependency_job_id":null,"html_url":"https://github.com/susu9/pick-patch","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/susu9/pick-patch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susu9%2Fpick-patch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susu9%2Fpick-patch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susu9%2Fpick-patch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susu9%2Fpick-patch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/susu9","download_url":"https://codeload.github.com/susu9/pick-patch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/susu9%2Fpick-patch/sbom","scorecard":{"id":860515,"data":{"date":"2025-08-11","repo":{"name":"github.com/susu9/pick-patch","commit":"b588674e52f634d9d91a8a8342c07ab448ff1d3c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: Apache License 2.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-24T01:08:08.920Z","repository_id":57452564,"created_at":"2025-08-24T01:08:08.920Z","updated_at":"2025-08-24T01:08:08.920Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274196120,"owners_count":25239148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cherry-pick","gerrit","git","repo"],"created_at":"2025-09-08T14:04:10.893Z","updated_at":"2026-05-17T17:02:57.601Z","avatar_url":"https://github.com/susu9.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Pypi version](https://img.shields.io/pypi/v/pick-patch)](https://pypi.org/project/pick-patch/)\n[![Build Status](https://travis-ci.com/susu9/pick-patch.svg?branch=master)](https://travis-ci.com/susu9/pick-patch)\n[![Python Compatibility](https://img.shields.io/pypi/pyversions/pick-patch)](https://travis-ci.com/susu9/pick-patch)\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/susu9/pick-patch.svg)\n![GitHub](https://img.shields.io/github/license/susu9/pick-patch.svg)\n# pick-patch\nHelp you cherry pick patches from Gerrit server\n\n![pick-patch-demo-optimize](https://user-images.githubusercontent.com/6793352/90324839-a0578e80-df28-11ea-9a59-7591eface688.gif)\n\n## Installation\n```shell\npip install pick-patch\n```\n## Configuration\n1. Get user name and http password in gerrit setting webpage (ex. https://review.gerrithub.io/settings/#HTTPCredentials)\n2. Add user name and http password in ~/.netrc (ex. machine review.gerrithub.io login susu9 password XXXOOOXXXOO)\n3. Now you are good to go. (script parses ~/.netrc by default)\n\n## Custimization\nYou can create a config file in ~/.pickrc to customize your preference\n```\n# Supported configurations and format\nrepo = repo\nuser = susu9\npassword = XXXOOOXXXOO\ngerritUrl = https://review.gerrithub.io\nconnectTimeout = 30\nfetchProtocols = http ssh git\nnetrcPath = ~/.netrc\ndelimiter = ....................\ndelimiterEnd = ********************\npatchPreview = git log --oneline -1\n```\n\n## Features\n1. Input a list of change numbers, pick-patch can help you cherry pick patches from Gerrit server\n2. Reolve install path automatically (if your project is created by Repo). You can cherry pick\n   multiple patches in different repositories at the same time\n```\n$pick-patch -g https://gerrit.mycompany.com 1234 5566 7788/1\nGetting patches from 'https://gerrit.mycompany.com' ...\nFetching and installing patches\n------------------------------------------------------------\n[kernel]\nPick: https://gerrit.mycompany.com/kernel refs/changes/34/1234/5\n------------------------------------------------------------\n...\n============================================================\n[middleware]\nPick: https://gerrit.mycompany.com/middleware refs/changes/66/5566/3\n------------------------------------------------------------\n...\n============================================================\n[app]\nPick: https://gerrit.mycompany.com/app refs/changes/88/7788/1\n------------------------------------------------------------\n...\n============================================================\n```\n3. Support gerrit search changes and cherry pick\n```\n$pick-patch -g https://gerrit.mycompany.com -q 'branch:master after:\"2018-01-01\"'\nQuerying change numbers from 'https://gerrit.mycompany.com'\nSearching patches by 'branch:master after:\"2018-01-01\"' ...\n------------------------------------------------------------\n  1234 - kernel: add defconfig\n  5566 - middleware: fix playback issue\n  7788 - app: Update UI\n(Total: 3 changes)\n============================================================\nGetting patches from 'https://gerrit.mycompany.com' ...\nFetching and installing patches\n------------------------------------------------------------\n[kernel]\nPick: https://gerrit.mycompany.com/kernel refs/changes/34/1234/5\n------------------------------------------------------------\n...\n============================================================\n[middleware]\nPick: https://gerrit.mycompany.com/middleware refs/changes/66/5566/3\n------------------------------------------------------------\n...\n============================================================\n[app]\nPick: https://gerrit.mycompany.com/app refs/changes/88/7788/2\n------------------------------------------------------------\n...\n============================================================\n```\n\n## Usage\n```\nusage: pick-patch [-h] [-u USER] [-p PASSWORD] [-q QUERY] [--query-only]\n                  [-r PREVIEW] [-g GERRIT] [-d] [-n NETRC_FILE]\n                  [-c CONFIG_FILE] [-m NAME.xml] [-i INSTALL_PATH] [-F] [-N]\n                  [-x EXE] [--verbose] [-v]\n                  [change_num [change_num ...]]\n\npositional arguments:\n  change_num            ex. '12345', '12345/1'\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -u USER, --user USER  gerrit user id\n  -p PASSWORD, --password PASSWORD\n                        gerrit HTTP password\n  -q QUERY, --query QUERY\n                        get patches from query command (change_num arguments\n                        will be ignored if any) ex. 'branch:master\n                        status:merged after:\"2018-11-17 22:06:00\"'\n  --query-only          do not install patch\n  -r PREVIEW, --preview PREVIEW\n                        preview command for changes (default: git log --no-\n                        decorate -1)\n  -g GERRIT, --gerrit GERRIT\n                        gerrit server url (default:\n                        https://review.gerrithub.io)\n  -d, --dryrun          show what would be done\n  -n NETRC_FILE, --netrc-file NETRC_FILE\n                        netrc path (default: ~/.netrc). (if user or password\n                        has been specified, netrc config will be ignored)\n  -c CONFIG_FILE, --config-file CONFIG_FILE\n                        config path (default: ~/.pickrc)\n  -m NAME.xml, --manifest NAME.xml\n                        assign manifest file to resolve patch install path\n                        instead of using repo command\n  -i INSTALL_PATH, --install-path INSTALL_PATH\n                        assign patch install path instead of resolving path by\n                        repo command or manifest\n  -F, --full-path       display the full install path instead of the relative\n                        install path\n  -N, --name-path       display the project name instead of the relative\n                        install path\n  -x EXE, --exec EXE    append command after all changes installed in each\n                        project\n  --verbose             show more logs\n  -v, --version         show program's version number and exit\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusu9%2Fpick-patch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsusu9%2Fpick-patch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsusu9%2Fpick-patch/lists"}