From: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com> To: git@vger.kernel.org Cc: Srinidhi Kaushik <shrinidhi.kaushik@gmail.com>, Junio C Hamano <gitster@pobox.com>, Johannes Schindelin <Johannes.Schindelin@gmx.de>, Phillip Wood <phillip.wood123@gmail.com> Subject: [PATCH v5 0/3] push: add "--[no-]force-if-includes" Date: Wed, 23 Sep 2020 13:00:19 +0530 [thread overview] Message-ID: <20200923073022.61293-1-shrinidhi.kaushik@gmail.com> (raw) In-Reply-To: <20200919170316.5310-1-shrinidhi.kaushik@gmail.com> Add a new option: "--force-if-includes" to "git-push" where forced updates are allowed only if the tip of the remote-tracking ref has been integrated locally, by verifying if the tip of the remote-tracking ref -- on which a local branch has based on -- is reachable from at least one of the "reflog" entries of the branch about to be updated by force on the remote. This option can be used with "--force-with-lease" with setups where the remote-tracking refs of the repository are implicitly updated in the background to help prevent unintended remote overwrites. If a local branch is based on a remote ref for a rewrite, and if that remote-tracking ref is updated by a push from another repository after it has been checked out locally, force updating that branch to remote with "--force-with-lease[=<refname>[:<expect>]]" without specifying the "<expect>" value, can cause the update that happened in-between the checkout and forced push to be lost. Changes since v4: - Collect commits during the reflog iteration step and use "in_merge_bases_many()" once on the list of collected commits instead of using "in_merge_bases()" for every entry [1]. - Include reflog timestamps to reduce the number of reflog entry iterations by stopping early if we see an entry that is older than the remote tip's commit date [2]. This, coupled with a single call of "in_merge_bases_many()" should help make the check faster [3]. - Reword commit messages, documentation; add a note to explain when the option is a "no-op". - Fix a mistake in the test script (t5533). Srinidhi Kaushik (3): push: add reflog check for "--force-if-includes" push: parse and set flag for "--force-if-includes" t, doc: update tests, reference for "--force-if-includes" Documentation/config/advice.txt | 9 +- Documentation/config/push.txt | 6 ++ Documentation/git-push.txt | 26 +++++- advice.c | 3 + advice.h | 2 + builtin/push.c | 27 ++++++ builtin/send-pack.c | 12 +++ remote-curl.c | 14 +++- remote.c | 140 +++++++++++++++++++++++++++++++- remote.h | 8 +- send-pack.c | 1 + t/t5533-push-cas.sh | 53 ++++++++++++ transport-helper.c | 10 +++ transport.c | 8 ++ transport.h | 15 ++-- 15 files changed, 321 insertions(+), 13 deletions(-) base-commit: 385c171a018f2747b329bcfa6be8eda1709e5abd Thanks to Johannes, Junio and Phillip for continually suggesting improvements and patiently reviewing the patch series. [1]: https://public-inbox.org/git/xmqqft7djzz0.fsf@gitster.c.googlers.com/ [2]: https://public-inbox.org/git/f6bb2b1f-0f1b-f196-59f1-893580430cf2@gmail.com/ [3]: https://public-inbox.org/git/xmqqimc7ezk2.fsf@gitster.c.googlers.com/ -- 2.28.0
next prev parent reply other threads:[~2020-09-23 7:30 UTC|newest] Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-04 18:51 [PATCH] push: make `--force-with-lease[=<ref>]` safer Srinidhi Kaushik 2020-09-07 15:23 ` Phillip Wood 2020-09-08 15:48 ` Srinidhi Kaushik 2020-09-07 16:14 ` Junio C Hamano 2020-09-08 16:00 ` Srinidhi Kaushik 2020-09-08 21:00 ` Junio C Hamano 2020-09-07 19:45 ` Johannes Schindelin 2020-09-08 15:58 ` Junio C Hamano 2020-09-09 3:40 ` Johannes Schindelin 2020-09-08 16:59 ` Srinidhi Kaushik 2020-09-16 11:55 ` Johannes Schindelin 2020-09-08 19:34 ` Junio C Hamano 2020-09-09 3:44 ` Johannes Schindelin 2020-09-10 10:22 ` Johannes Schindelin 2020-09-10 14:44 ` Srinidhi Kaushik 2020-09-11 22:16 ` Johannes Schindelin 2020-09-14 11:06 ` Srinidhi Kaushik 2020-09-14 20:08 ` Junio C Hamano 2020-09-16 5:31 ` Srinidhi Kaushik 2020-09-16 10:20 ` Johannes Schindelin 2020-09-19 17:48 ` Junio C Hamano 2020-09-10 14:46 ` Junio C Hamano 2020-09-11 22:17 ` Johannes Schindelin 2020-09-14 20:07 ` Junio C Hamano 2020-09-12 15:04 ` [PATCH v2 0/2] push: make "--force-with-lease" safer Srinidhi Kaushik 2020-09-12 15:04 ` [PATCH v2 1/2] push: add "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-12 18:20 ` Junio C Hamano 2020-09-12 21:25 ` Srinidhi Kaushik 2020-09-12 15:04 ` [PATCH v2 2/2] push: enable "forceIfIncludesWithLease" by default Srinidhi Kaushik 2020-09-12 18:22 ` Junio C Hamano 2020-09-12 18:15 ` [PATCH v2 0/2] push: make "--force-with-lease" safer Junio C Hamano 2020-09-12 21:03 ` Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 0/7] push: add "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 1/7] remote: add reflog check for "force-if-includes" Srinidhi Kaushik 2020-09-14 20:17 ` Junio C Hamano 2020-09-16 10:51 ` Srinidhi Kaushik 2020-09-14 20:31 ` Junio C Hamano 2020-09-14 21:13 ` Junio C Hamano 2020-09-16 12:35 ` Johannes Schindelin 2020-09-19 17:01 ` Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 2/7] transport: add flag for "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 3/7] send-pack: check ref status for "force-if-includes" Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 4/7] transport-helper: update " Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 5/7] builtin/push: add option "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-16 12:36 ` Johannes Schindelin 2020-09-13 14:54 ` [PATCH v3 6/7] doc: add reference for "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-14 21:01 ` Junio C Hamano 2020-09-16 5:35 ` Srinidhi Kaushik 2020-09-13 14:54 ` [PATCH v3 7/7] t: add tests for "force-if-includes" Srinidhi Kaushik 2020-09-16 12:47 ` [PATCH v3 0/7] push: add "--[no-]force-if-includes" Johannes Schindelin 2020-09-19 17:03 ` [PATCH v4 0/3] " Srinidhi Kaushik 2020-09-19 17:03 ` [PATCH v4 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-09-19 20:03 ` Junio C Hamano 2020-09-21 8:42 ` Srinidhi Kaushik 2020-09-21 18:48 ` Junio C Hamano 2020-09-23 10:22 ` Srinidhi Kaushik 2020-09-23 16:47 ` Junio C Hamano 2020-09-21 13:19 ` Phillip Wood 2020-09-21 16:12 ` Junio C Hamano 2020-09-21 18:11 ` Junio C Hamano 2020-09-23 10:27 ` Srinidhi Kaushik 2020-09-19 17:03 ` [PATCH v4 2/3] push: parse and set flag " Srinidhi Kaushik 2020-09-19 20:26 ` Junio C Hamano 2020-09-19 17:03 ` [PATCH v4 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-09-19 20:42 ` Junio C Hamano 2020-09-23 7:30 ` Srinidhi Kaushik [this message] 2020-09-23 7:30 ` [PATCH v5 1/3] push: add reflog check " Srinidhi Kaushik 2020-09-23 10:18 ` Phillip Wood 2020-09-23 11:26 ` Srinidhi Kaushik 2020-09-23 16:24 ` Junio C Hamano 2020-09-23 16:29 ` Junio C Hamano 2020-09-23 7:30 ` [PATCH v5 2/3] push: parse and set flag " Srinidhi Kaushik 2020-09-23 7:30 ` [PATCH v5 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-09-23 10:24 ` Phillip Wood 2020-09-26 10:13 ` [PATCH v6 0/3] push: add "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-26 10:13 ` [PATCH v6 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-09-26 10:13 ` [PATCH v6 2/3] push: parse and set flag " Srinidhi Kaushik 2020-09-26 10:13 ` [PATCH v6 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-09-26 10:21 ` [PATCH v6 0/3] push: add "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-26 11:46 ` [PATCH v7 " Srinidhi Kaushik 2020-09-26 11:46 ` [PATCH v7 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-09-26 23:42 ` Junio C Hamano 2020-09-27 12:27 ` Srinidhi Kaushik 2020-09-26 11:46 ` [PATCH v7 2/3] push: parse and set flag " Srinidhi Kaushik 2020-09-26 11:46 ` [PATCH v7 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-09-27 14:17 ` [PATCH v8 0/3] push: add "--[no-]force-if-includes" Srinidhi Kaushik 2020-09-27 14:17 ` [PATCH v8 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-09-27 14:17 ` [PATCH v8 2/3] push: parse and set flag " Srinidhi Kaushik 2020-09-27 14:17 ` [PATCH v8 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-09-30 12:54 ` Philip Oakley 2020-09-30 14:27 ` Srinidhi Kaushik 2020-09-28 17:31 ` [PATCH v8 0/3] push: add "--[no-]force-if-includes" Junio C Hamano 2020-09-28 17:46 ` SZEDER Gábor 2020-09-28 19:34 ` Srinidhi Kaushik 2020-09-28 19:51 ` Junio C Hamano 2020-09-28 20:00 ` Junio C Hamano 2020-10-01 8:21 ` [PATCH v9 " Srinidhi Kaushik 2020-10-01 8:21 ` [PATCH v9 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-10-02 13:52 ` Johannes Schindelin 2020-10-02 14:50 ` Johannes Schindelin 2020-10-02 16:22 ` Junio C Hamano 2020-10-02 15:07 ` Srinidhi Kaushik 2020-10-02 16:41 ` Junio C Hamano 2020-10-02 19:39 ` Srinidhi Kaushik 2020-10-02 20:14 ` Junio C Hamano 2020-10-02 20:58 ` Srinidhi Kaushik 2020-10-02 21:36 ` Junio C Hamano 2020-10-02 16:26 ` Junio C Hamano 2020-10-01 8:21 ` [PATCH v9 2/3] push: parse and set flag " Srinidhi Kaushik 2020-10-01 8:21 ` [PATCH v9 3/3] t, doc: update tests, reference " Srinidhi Kaushik 2020-10-01 15:46 ` [PATCH v9 0/3] push: add "--[no-]force-if-includes" Junio C Hamano 2020-10-01 17:12 ` Junio C Hamano 2020-10-01 17:54 ` Srinidhi Kaushik 2020-10-01 18:32 ` Junio C Hamano 2020-10-02 16:50 ` Junio C Hamano 2020-10-02 19:42 ` Srinidhi Kaushik 2020-10-03 12:10 ` [PATCH v10 " Srinidhi Kaushik 2020-10-03 12:10 ` [PATCH v10 1/3] push: add reflog check for "--force-if-includes" Srinidhi Kaushik 2020-10-03 12:10 ` [PATCH v10 2/3] push: parse and set flag " Srinidhi Kaushik 2020-10-03 12:10 ` [PATCH v10 3/3] t, doc: update tests, reference " Srinidhi Kaushik
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200923073022.61293-1-shrinidhi.kaushik@gmail.com \ --to=shrinidhi.kaushik@gmail.com \ --cc=Johannes.Schindelin@gmx.de \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=phillip.wood123@gmail.com \ --subject='Re: [PATCH v5 0/3] push: add "--[no-]force-if-includes"' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).