diff options
author | Srinidhi Kaushik <shrinidhi.kaushik@gmail.com> | 2020-10-03 17:40:44 +0530 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-10-03 09:59:18 -0700 |
commit | 99a1f9ae10816c2527d7197a5dde714f980b712b (patch) | |
tree | 95c75afca2199d9e9531266c4d7d5390a7d6c6f2 /send-pack.c | |
parent | Merge branch 'ds/in-merge-bases-many-optim-bug' into sk/force-if-includes (diff) | |
download | tgif-99a1f9ae10816c2527d7197a5dde714f980b712b.tar.xz |
push: add reflog check for "--force-if-includes"
Add a check to verify if the remote-tracking ref of the local branch
is reachable from one of its "reflog" entries.
The check iterates through the local ref's reflog to see if there
is an entry for the remote-tracking ref and collecting any commits
that are seen, into a list; the iteration stops if an entry in the
reflog matches the remote ref or if the entry timestamp is older
the latest entry of the remote ref's "reflog". If there wasn't an
entry found for the remote ref, "in_merge_bases_many()" is called
to check if it is reachable from the list of collected commits.
When a local branch that is based on a remote ref, has been rewound
and is to be force pushed on the remote, "--force-if-includes" runs
a check that ensures any updates to the remote-tracking ref that may
have happened (by push from another repository) in-between the time
of the last update to the local branch (via "git-pull", for instance)
and right before the time of push, have been integrated locally
before allowing a forced update.
If the new option is passed without specifying "--force-with-lease",
or specified along with "--force-with-lease=<refname>:<expect>" it
is a "no-op".
Signed-off-by: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'send-pack.c')
-rw-r--r-- | send-pack.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/send-pack.c b/send-pack.c index 2d2f9997ac..b4d4a10a71 100644 --- a/send-pack.c +++ b/send-pack.c @@ -299,6 +299,7 @@ static int check_to_send_update(const struct ref *ref, const struct send_pack_ar case REF_STATUS_REJECT_FETCH_FIRST: case REF_STATUS_REJECT_NEEDS_FORCE: case REF_STATUS_REJECT_STALE: + case REF_STATUS_REJECT_REMOTE_UPDATED: case REF_STATUS_REJECT_NODELETE: return CHECK_REF_STATUS_REJECTED; case REF_STATUS_UPTODATE: |