summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* git_config: fix encoding handling in GetUrlCookieFileMike Frysinger2020-02-081-2/+2
| | | | | | | | | | Make sure we decode the bytes coming from the subprocess.Popen as we're treating them as strings. Change-Id: I44100ca5cd94f68a35d489936292eb641006edbe Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253973 Reviewed-by: Jonathan Nieder <jrn@google.com> Tested-by: Mike Frysinger <vapier@google.com>
* Fix inverted logic around [gitc-]init and -cDan Willemsen2020-02-071-1/+1
| | | | | | | | | | | | | Instead of not using '-c' for '--current-branch' when using gitc, we were only using '-c' when using gitc, so we still had the conflict with the gitc option, and other users still couldn't use '-c'. Test: repo init -u https://android.googlesource.com/platform/manifest; repo init -c Test: repo gitc-init -u ... -b ... -c testing Change-Id: I71e4950a49c281418249f0783c6a2ea34f0d3e2b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253795 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Dan Willemsen <dwillemsen@google.com>
* [Win32] Make platform_utils compatible for Python3Remy Böhmer2020-02-061-4/+9
| | | | | | | | | | On Python 3 several imports are to be imported from different locations. Signed-off-by: Remy Böhmer <linux@bohmer.net> Change-Id: I4f243d145f65e38f74743a742583cfc5c5d76deb Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/249610 Reviewed-by: Mike Frysinger <vapier@google.com>
* sync: try to checkout repos across sync failuresMike Frysinger2020-02-051-29/+57
| | | | | | | | | | | | | | | | | | | | | | Currently our default behavior is: * Try to sync all repos * If any errors seen, exit * Try to garbage collect all repos * If any errors seen, exit * Try to update local project list * If any errors seen, exit * Try to checkout out all local repos * If any errors seen, exit Users find these incomplete syncs confusing, so lets try to complete as much as possible by default and printing out summaries at the end. Bug: https://crbug.com/gerrit/11293 Change-Id: Idd17cc9c3bbc574d8a0f08a30225dec7bfe414cb Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/238554 Reviewed-by: Michael Mortensen <mmortensen@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Mike Frysinger <vapier@google.com>
* repo: try to reexec self with Python 3 as neededMike Frysinger2020-02-051-24/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We want to start warning about Python 2 usage, but we can't do it simply because the shebang is /usr/bin/python which might be an old version like python2.7. We can't change the shebang because program name usage is spotty at best: on some platforms (like macOS), it's not uncommon to not have a `python3` wrapper, only a major.minor one like `python3.6`. Using python3 wouldn't guarantee a new enough version of Python 3 anyways, and we don't want to require Python 3.6 exactly, just that minimum. So we check the current Python version. If it's older than the ver of Python 3 we want, we search for a `python3.X` version to run. If those don't work, we see if `python3` exists and is a new enough ver. If it's not, we die if the current Python 3 is too old, and we start issuing warnings if the current Python version is 2.7. This should allow the user to take a bit more action by installing Python 3 on their system without having to worry about changing /usr/bin/python. Once we require Python 3 completely, we can simplify this logic a bit by always bootstrapping up to Python 3 and failing with Python 2. We have a few KI with Windows atm though, so keep it disabled there until the fixes are merged. Bug: https://crbug.com/gerrit/10418 Change-Id: I5e157defc788e31efb3e21e93f53fabdc7d75a3c Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253136 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* repo: raise min version of gitMike Frysinger2020-02-053-3/+4
| | | | | | | | | | | | The git-2.10 series was released in 2016. Since we're moving to require Python 3.6 which was also released in 2016, bumping up the git version seems reasonable. Also we don't really test any git versions close to as old as 1.7.2 which was released in 2010. Change-Id: Ib71b714de6cd0b7dd50d0b300b108a560ee27331 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253134 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
* sync: add option to skip manifest updateFredrik de Groot2020-02-051-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | The use case is any situation where your manifest does not exist on server, but where you still want to do full sync for the projects, without having your workspace manifest switched to other branch or forwarded to latest or similar. This allows syncing to a historical manifest in git log, that does not have a branch, as well as when integrating something together that has not been pushed upstream yet. Changes can also exist locally on a manifest that is behind head, meaning not requiring rebase to latest. Tested using: $ cd .repo/manifests/ $ git checkout <any hash 1> $ <do local modifications> $ repo sync --no-manifest-update $ git checkout <any hash 2> $ repo sync --no-manifest-update Change-Id: I0c9773aa8bc5876813a2e7d7fec697abcb2d9e94 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/246445 Tested-by: Fredrik de Groot <fredrik.de.groot@volvocars.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* init: handle -c conflicts with gitc-initMike Frysinger2020-02-052-3/+8
| | | | | | | | | | | | We keep getting requests for init to support -c. This conflicts with gitc-init which allocates -c for its own use. Lets make this dynamic so we keep it with "init" but omit it for "gitc-init". Bug: https://crbug.com/gerrit/10200 Change-Id: Ibf69c2bbeff638e28e63cb08926fea0c622258db Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253252 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* Do not try to fetch default revision for mirrors alwaysChirayu Desai2020-02-051-1/+4
| | | | | | | | | | | | | | | | | * Mirrors may contain multiple projects, some of which may not always contain the default revision. * Only fetch the default revision explicitly if '--current-branch' is set. * Fixes breakage casued by commit 6856f98467aa5c98085cdee02587dbab984cebb1 "Fix repo mirror with --current-branch" Bug: https://crbug.com/gerrit/12274 Change-Id: Iaafabe2992f76f3644b841f24245d3e19c9515a9 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253093 Reviewed-by: Kuang-che Wu <kcwu@chromium.org> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Chirayu Desai <chirayudesai1@gmail.com>
* Add a way to override the remote using <extend-project>Kyunam Jo2020-02-042-0/+9
| | | | | | | | | | | This commit supports for the 'remote' attribute in <extend-project>. This avoids the need to perform a <remove-project> followed by a <project> in local manifests. Change-Id: I9f9347913337ec9d159bc264d15ce97881ae5398 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253092 Tested-by: Kyunam Jo <kyunam.jo@gmail.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* project: add basic path checks for <copyfile> & <linkfile>Mike Frysinger2020-02-043-40/+314
| | | | | | | | | | | | | | | | | | Reject paths in <copyfile> & <linkfile> that try to use symlinks or non-file or non-dirs. We don't fully validate <linkfile> when src is a glob as it's a bit complicated -- any component in the src could be the glob. We make sure the destination is a directory, and that any paths in that dir are created as symlinks. So while this can be used to read any path, it can't be abused to write to any paths. Bug: https://crbug.com/gerrit/11218 Change-Id: I68b6d789b5ca4e43f569e75e8b293b3e13d3224b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/233074 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Reviewed-by: Michael Mortensen <mmortensen@google.com>
* manifest: add basic path checks for <copyfile> & <linkfile>Mike Frysinger2020-02-044-4/+170
| | | | | | | | | | | | | | Reject paths in <copyfile> & <linkfile> that point outside of their respective scopes. This validates paths while parsing the manifest as this should be quick & cheap: we don't access the filesystem as this code runs before we've synced. Bug: https://crbug.com/gerrit/11218 Change-Id: I8e17bb91f3f5b905a9d76391b29fbab4cb77aa58 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/232932 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Reviewed-by: Michael Mortensen <mmortensen@google.com>
* repo: drop old signing keyMike Frysinger2020-02-041-33/+1
| | | | | | | | | | | This hasn't been used in many years to sign a release, so drop it from the keyring to avoid confusing people. Bug: https://crbug.com/gerrit/12229 Change-Id: Ifca7eee713d167c11f32252975724e5858e4c007 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253133 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* repo: bump launcher version to 2.0Mike Frysinger2020-02-041-1/+1
| | | | | | | | | | | This reflects the transition to the new 2.x series which will be migrating to Python 3-only. Bug: https://crbug.com/gerrit/10418 Change-Id: I6355ac955d26b930f8a3721d3526eec5bed92400 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253132 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* Revert "Port _FileDescriptorStreamsNonBlocking to use poll()"v1.13.9.1Mike Frysinger2020-02-031-15/+3
| | | | | | | | | | | | | | | | This reverts commit 1e01a7444536b4865feb94c398b68a936a463ddc. Not all platforms support select.poll() currently it seems. At least macOS's Python 2 doesn't (while macOS Python 3 does). Lets back this out for the existing release series and once we start repo-2 which is Python 3-only, we can put this back in. Change-Id: I205206b0fa4fe2d755f4fbc6ec683ad125f27cc2 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/253072 Reviewed-by: Michael Mortensen <mmortensen@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Mike Frysinger <vapier@google.com>
* Fix docstring of project.Project.PrintWorkTreeStatus()v1.13.9Rostislav Krasny2020-01-251-1/+1
| | | | | | | Change-Id: I1a9139d2ea3b3331a6f3ad3cae9e0ac37074d716 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251837 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Rostislav Krasny <rostigm@gmail.com>
* Fix method signature of platform_utils.FileDescriptorStreams._create_stream()Rostislav Krasny2020-01-251-1/+1
| | | | | | | Change-Id: Ib80e4ec5e540d97488e7564703ddbcb74350fdfd Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251836 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Rostislav Krasny <rostigm@gmail.com>
* Fix a typoRostislav Krasny2020-01-251-3/+3
| | | | | | | Change-Id: I1d1d1c7ec6c0c706eb08ceb803c37e1ce1baf8b3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251834 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Rostislav Krasny <rostigm@gmail.com>
* Add PyCharm project directory into the .gitignoreRostislav Krasny2020-01-241-0/+3
| | | | | | | Change-Id: I9a785a9d045e44c6ec8bd4bd8d0169a81d5ccfde Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251835 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Rostislav Krasny <rostigm@gmail.com>
* Make _preserve_encoding in platform_utils_win32 compatible with Python 3Rostislav Krasny2020-01-241-0/+5
| | | | | | | | Bug: https://crbug.com/gerrit/12145 Change-Id: I01d1ef96ff7b474f55ed42ecc13bd5943006d3b5 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251833 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Rostislav Krasny <rostigm@gmail.com>
* repo: Do not even try to set up GPG with opt.no_repo_verifySebastian Schuberth2020-01-241-4/+7
| | | | | | | | | | | | | | In order to be able to use "--no-repo-verify" to work around an issue with gpg-agent and long socket paths (see e.g. [1]), this change avoids GPG being set up at all if that option is passed. [1] https://github.com/elastic/elasticsearch/issues/17053 Change-Id: I1e5cbd8be2dc0084f12afe0ca33c789fdbc6fef9 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/251108 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Mike Frysinger <vapier@google.com>
* init: Add '-c' as an alias to '--current-branch'Diogo Ferreira2020-01-241-1/+1
| | | | | | | | | | | This makes it consistent with the short option for current-branch in repo sync. Change-Id: I2848e87f45a66ef8d829576d0c0c4c0f7a8636a0 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/241700 Tested-by: Diogo Ferreira <deovferreira@gmail.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net> Reviewed-by: Mike Frysinger <vapier@google.com>
* info: Add the manifest revisionDiogo Ferreira2020-01-241-0/+4
| | | | | | | | | | | | | | After Ib546f5ebbc8a23875fbd14bf166fbe95b7dd244e, repo info now displays the current project revision in the 'Current revision' field. While the output is more consistent, there are use cases for the revision expression as shown in the manifest. This patch re-adds the manifest revision as a new 'Manifest revision' field. Change-Id: I50c1559dcb7ceb69af07352b956d78f85b8f592e Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/240799 Tested-by: Diogo Ferreira <deovferreira@gmail.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* Port _FileDescriptorStreamsNonBlocking to use poll()Theodore Dubois2019-12-181-3/+15
| | | | | | | | | | | select() has a limit of FD_SETSIZE file descriptors. If you run repo sync -j500 you'll pretty quickly hit this limit and get "file descriptor out of range for select" errors. poll() has no such limit. Change-Id: I21f350e472bda1db03dcbcc437645c23dbc7a901 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/248852 Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Theodore Dubois <tbodt@google.com>
* repo: include subcommands in --help outputMike Frysinger2019-12-051-2/+13
| | | | | | | | | | Also point people to `repo help` so it's easier to navigate the tool. Bug: https://crbug.com/gerrit/12022 Change-Id: Ib3be331a2cef32caa193640bf8d54bd1443fce60 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247292 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
* docs: add Windows support infoMike Frysinger2019-12-052-0/+145
| | | | | | | Change-Id: I82a1bec3a29d622c76b5709b96bbe8bff8aa427f Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247573 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
* help: unify command displayMike Frysinger2019-12-031-17/+9
| | | | | | | | | No functional changes, just unifying duplicate code paths. Change-Id: I6afa797ca1e1eb90abdc0236325003ae070cbfb3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247293 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* tox: add & document tox usageMike Frysinger2019-12-023-3/+55
| | | | | | | | | | This makes it easy to run all the tests against multiple versions of Python. We want to make sure Python 2.7 & 3.6+ work. Change-Id: Ia7b16eb46a2aa7c240f03bb291987fa8cb215267 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247174 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* setup.py: add basic packaging filesMike Frysinger2019-12-024-0/+72
| | | | | | | | | | This is needed to use tox, and tox lets us test multiple Python versions easily. Change-Id: I813c418a8f7109294a4adb9f6b21be459cbeca70 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247173 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* run_tests: improve exit code behaviorMike Frysinger2019-12-021-3/+2
| | | | | | | | | | Rather than throw an exception when pytest itself exits non-zero, pass that back up. The traceback is never useful, only confusing. Change-Id: I0cd7bea730e13c9969154326057196295e550843 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/247175 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* Fix repo mirror with --current-branchKuang-che Wu2019-11-251-23/+28
| | | | | | | | | | | | | | | | | | | | | | Before a2cd6aeae8, "repo mirror with --current-branch" fetches git data using command git fetch --progress --update-head-ok cros --tags No refspec is specified, thus it fetches default refspec, which is +refs/heads/*:refs/heads/* After a2cd6aeae8, the fetch command became git fetch --progress --update-head-ok cros --tags +refs/tags/*:refs/tags/* It did not only add tags refspec, but also suppressed the fetching of default refspec. In other words, repo mirrors doesn't work if current_branch_only=True. This CL explicitly adds the default refspec to command line if none is specified. Bug: https://crbug.com/gerrit/11990 Change-Id: Iadcf7b9aa50f53c47132cfe6c53b3fb2076ebca2 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/246632 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Kuang-che Wu <kcwu@chromium.org>
* README: add install detailsv1.13.8Mike Frysinger2019-11-181-0/+19
| | | | | | | Change-Id: I57043449a7927068fa5735cb71633353e1039532 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/245816 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* upload/editor: fix bytes/string confusionMike Frysinger2019-11-163-12/+70
| | | | | | | | | | | | | | | | The upload module tries to turn the strings into bytes before passing to EditString, but it combines bytes & strings causing an error. The return value might be bytes or string, but the caller only expects a string. Lets simplify this by sticking to strings everywhere and have EditString take care of converting to/from bytes when reading/writing the underlying files. This also avoids possible locale confusion when reading the file by forcing UTF-8 everywhere. Bug: https://crbug.com/gerrit/11929 Change-Id: I07b146170c5e8b5b0500a2c79e4213cd12140a96 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/245621 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* prune: handle branches that track missing branchesMike Frysinger2019-11-163-12/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | Series of steps: * Create a local "b1" branch with `repo start b1` that tracks a remote branch (totally fine) * Manually create a local "b2" branch with `git branch --track b1 b2` that tracks the local "b1" (uh-oh...) * Delete the local "b1" branch manually or via `repo prune` (....) * Try to process the "b2" branch with `repo prune` Since b2 tracks a branch that no longer exists, everything blows up at this point as we try to probe the non-existent ref. Instead, we should flag this as unknown and leave it up to the user to resolve. This probably could come up if a local branch was tracking a remote branch that was deleted from the server, and users ran something like `repo sync --prune` which cleaned up the remote refs. Bug: https://crbug.com/gerrit/11485 Change-Id: I6b6b6041943944b8efa6e2ad0b8b10f13a75a5c2 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/236793 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Reviewed-by: Kirtika Ruchandani <kirtika@google.com> Reviewed-by: Mike Frysinger <vapier@google.com> Tested-by: Mike Frysinger <vapier@google.com>
* sync: try to fast forward merge branches before checking published stateMike Frysinger2019-11-131-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | If the local branch changed state since its last upload, the data cached in .git/config related to the last uploaded CL might not be that relevant. If we're able to fast forward merge to the latest tree state, then let's do that. This would be akin to checking out a detached head before syncing where we already switch state. If we aren't able to fast forward merge, then it's not a big deal as we'll continue on to the existing branch checking logic. This would be easy to reproduce by doing something like: $ repo start foo . $ git revert HEAD $ repo upload --cbr . $ git reset --hard HEAD^ <CL is merged> $ repo sync . <we can fast forward> Change-Id: I7d62f3d1ba5314a349d85b4dbb0ec8352eca18bb Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/238552 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Michael Mortensen <mmortensen@google.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* sync: merge project updates with status barMike Frysinger2019-11-122-13/+7
| | | | | | | | | | | | | | The current sync output displays "Fetching project" and "Checking out project" messages and progress bar updates independently leading to a lot of spam. Lets merge these periodic outputs with the status bar to get a little bit tighter output in the normal case. This doesn't solve all our problems, but gets us closer. Bug: https://crbug.com/gerrit/11293 Change-Id: Icd627830af4dd934a9355b7ace754b56dc96cfef Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244934 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* sync: add sanity check for local checkouts missing networkMike Frysinger2019-11-121-0/+7
| | | | | | | | | | | If you run `repo sync -l foo` without first `repo sync -n foo`, repo sets up an invalid gitdir tree that gets wedged and requires manual recovery. Add a sanity check to abort cleanly first. Change-Id: Iad865ea860a3f1fd2f39ce683fe66bd4380745a5 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244732 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* sync: report list of failing git treesVadim Bendebury2019-11-121-2/+11
| | | | | | | | | | | | | | | | | | When repo sync fails because some git trees are not in clean state and as such can not be rebased automatically, it is a pain to figure out which trees are the culprits. With this patch the list of offending trees is printed when repo sync reports checkout errors. TEST=ran 'repo sync' and observed the proper list of directories show up after the final error message Bug: https://crbug.com/gerrit/11293 Change-Id: Icdf1a03e9014ecb184f331f513cc9a2efc7d11ed Signed-off-by: Vadim Bendebury <vbendeb@google.com> Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244053 Reviewed-by: Mike Frysinger <vapier@google.com>
* use open context managers in more placesMike Frysinger2019-11-127-66/+21
| | | | | | | | | | Use open() as a context manager to simplify the close logic and make the code easier to read & understand. This is also more Pythonic. Change-Id: I579d03cca86f99b2c6c6a1f557f6e5704e2515a7 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244734 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* sync: make .git init more robustMike Frysinger2019-11-122-34/+39
| | | | | | | | | | | | | | | | Hitting Ctrl-C in the middle of this func will leave the .git in a bad state that requires manual recovery. The code tries to catch all exceptions and recover by deleting the incomplete .git dir, but it omits KeyboardInterrupt which Exception misses. We could add that to the recovery path, but we can make this more robust with a different approach: set up everything in .git.tmp/ and only move it to .git/ once we've fully initialized it. Change-Id: I0f5b97f2e19fc39cffc3e5e23993a2da7220f4e3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/244733 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* forall: add an --ignore-missing optionv1.13.7.1Mike Frysinger2019-10-221-0/+7
| | | | | | | | | | | | | | | In CrOS, our infra has to deal with partial checkouts constantly (for a variety of reasons). To help reset back to a good state, we run git commands via `repo forall`, but don't care about the missing checkouts. Add a flag so we can disambiguate between missing repos and failing git subcommands. Bug: https://crbug.com/1013377 Bug: https://crbug.com/1013623 Change-Id: Ie3498c6d111276c60d2ecedbba21bfa778588d50 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/241935 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* python-support: adjust major versionsMike Frysinger2019-10-111-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | The plan previously documented was <=1.13.x is Python 2 and >=1.14.x is Python 3. Other projects that migrated Python versions and drop support for older have tended to take a more drastic version jump to make it clearer to users. So lets adjust the plan to say <=1.x will support Python 2, and >=2.x will be Python 3-only. This also allows us to harmonize the repo launcher version. It is currently sitting at v1.26 and has been incremented independently of the repo version for the life of the project. While we might know these lower nuances, pretty much no one else does and it just leads to confusion: do I know version 1.26 or version 1.13.7? Or do I have both? What does that even mean? Once we update the major version to 2.0.0, we can also adjust the launcher script to 2.0.0, and then the launcher release process will be tied to a new repo release in general. Bug: https://crbug.com/gerrit/10418 Change-Id: Idb2257371a06e56d2923cf717345c028f49176a2 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/240372 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* command: filter projects by active manifest groupsv1.13.7Mike Frysinger2019-10-081-2/+5
| | | | | | | | | | | | | | | | | | | `repo forall <proj>` will look up all <proj> in the manifest for all manifest groups regardless of which are active. If <proj> is checked out to different locations depending on the group, this ultimately fails as we're unable to locate all of them. Simple fix is to only include projects that match the manifest groups that we already passed down & initialized to the active set, and that we already use when getting the default project list. Bug: https://crbug.com/gerrit/11677 Bug: https://crbug.com/1011226 Change-Id: I975f10f9a9e5a1cad7d87344123f8003732dab27 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239652 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: Raul Rangel <rrangel@chromium.org> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
* info: fix "current" outputMike Frysinger2019-10-051-2/+8
| | | | | | | | | | | | | The "Current revision" field shows the revision as listed in the manifest. I think most users expect this to show the revision that the git tree is checked out to instead. Switch the output to show that revision instead, and add a "Current branch" if it matches a local branch. Change-Id: Ib546f5ebbc8a23875fbd14bf166fbe95b7dd244e Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239240 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* Only import imp on py2Rashed Abdel-Tawab2019-10-051-1/+1
| | | | | | | | | | | | imp is deprecatedon py3. It's also not used with py3, so just move it to the py2 import block Test: run `repo` command and verify warning is no longer present Test: verify `repo sync` and `repo upload` function as expected Change-Id: I9d59403d7819c4a478c9f54cbef114f8a96486a5 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239713 Tested-by: Rashed Abdel-Tawab <rashedabdeltawab@gmail.com> Reviewed-by: Mike Frysinger <vapier@google.com>
* project: allow CurrentBranch to return None on errorsMike Frysinger2019-10-011-3/+10
| | | | | | | | | | | If the repo client checkout is in an incomplete sync state, the work git repo might be in a bad way. Turn errors parsing HEAD into None since callers of CurrentBranch already need to account for it. Change-Id: Ia7682e29ef4182006b1fb5f5e57800f8ab67a9f4 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239239 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* info: allow NoSuchProjectError to bubble upMike Frysinger2019-10-011-5/+2
| | | | | | | | | | | If the user passes in bad projects like `repo info asdf`, we currently silently swallow those and do nothing. Allow NoSuchProjectError to bubble up to main which will handle & triage this correctly for us. Change-Id: Ie04528e7b7a164293063a636813a73eaabdd5bc3 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239238 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* version: add source versions & User-Agents to the outputMike Frysinger2019-10-011-2/+10
| | | | | | | | | | | | | | | | Depending on where/how repo is invoked, the active version might be from a git tree, and it might be different from the .repo/repo.git/ version in the current repo client checkout. Report both if they're different so it's clearer. Lets also include the two different User-Agent's that we set up when talking to networked services. Bug: https://crbug.com/gerrit/11144 Change-Id: I2ebb6e3ac30e374a8406cab3e4438087246a8c57 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239234 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
* git_command: set GIT_HTTP_USER_AGENT on all requestsMike Frysinger2019-10-012-0/+21
| | | | | | | | | | | | | | | | | We've been setting the User-Agent header when making connections from repo itself, but not when running git (as the latter will set up User-Agent itself). Our Gerrit/Git admins say it'll be helpful if we pass through the repo version settings even when running git. We currently set GIT_HTTP_USER_AGENT and not GIT_USER_AGENT as it's unclear if the extended form works over all protocols. We can wait for a user request. Bug: https://crbug.com/gerrit/11144 Change-Id: I21d293f49534058dbc23225152451df26c5b7bef Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239233 Tested-by: Mike Frysinger <vapier@google.com> Reviewed-by: David Pursehouse <dpursehouse@collab.net>
* grep: handle errors gracefullyMike Frysinger2019-10-011-7/+23
| | | | | | | | | | | | If `git grep` fails in any project checkout (e.g. an incomplete sync), make sure we print that error clearly rather than blowing up, and exit non-zero in the process. Bug: https://crbug.com/gerrit/11613 Change-Id: I31de1134fdcc7aaa9814cf2eb6a67d398eebf9cf Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/239237 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>