Add option for disabling thin pushes

There is a long standing issue with C Git pushing to Gerrit and Jgit
where the occasional push will fail because the negotiated packs are
missing a tree object. This happens very occasionally but when it does
it would be nice to be able to point users at an easy workaround.
Pushing with --no-thin is that workaround.

Note that --no-thin is much less efficient so shouldn't be used by
default.

This old bug, https://bugs.launchpad.net/git-review/+bug/1332549, has
details but it seems to affect current C git and Gerrit+Jgit.

Change-Id: Id6ba52a656a14c921acab1b14ef668e6251245da
This commit is contained in:
Clark Boylan
2021-04-09 13:16:52 -07:00
parent 18189abf59
commit 39cd763d5d
4 changed files with 31 additions and 2 deletions

View File

@@ -1538,6 +1538,9 @@ additional information:
parser.add_argument("-l", "--list", dest="list", action="count",
help="List available reviews for the current project, "
"if passed more than once, will show more information")
parser.add_argument("--no-thin", dest="no_thin", action="store_true",
help="git push with --no-thin. This may workaround "
"issues with pushing in some circumstances.")
parser.add_argument("-y", "--yes", dest="yes", action="store_true",
help="Indicate that you do, in fact, understand if "
"you are submitting more than one patch")
@@ -1701,10 +1704,14 @@ additional information:
sys.exit(1)
assert_one_change(remote, branch, yes, have_hook)
no_thin = ''
if options.no_thin:
no_thin = '--no-thin'
ref = "for"
cmd = ("git push --no-follow-tags %s HEAD:refs/%s/%s" %
(remote, ref, branch))
cmd = ("git push --no-follow-tags %s %s HEAD:refs/%s/%s" %
(no_thin, remote, ref, branch))
push_options = []
if options.topic is not None:
topic = options.topic