git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jerry Zhang <jerry@skydio.com>
To: git@vger.kernel.org
Cc: ross@skydio.com, abe@skydio.com, brian.kubisiask@skydio.com,
	Jerry Zhang <jerry@skydio.com>
Subject: [PATCH 0/1] git-apply: Allow simultaneous --cached and --3way options
Date: Fri,  2 Apr 2021 18:34:09 -0700	[thread overview]
Message-ID: <20210403013410.32064-1-jerry@skydio.com> (raw)

I'm creating a script/tool that will be able to cherry-pick 
multiple commits from a single branch, rebase them onto a
base commit, and push those references to a remote. 

Ex. with a branch like "origin/master -> A -> B -> C"
The tool will create "master -> A", "master -> B",
"master -> C" and either make local branches or
push them to a remote. This can be useful since code
review tools like github use branches as the basis
for pull requests.

A key feature here is that the above happens without
any changes to the user's working directory or cache.
This is important since those operations will add
time and generate build churn. We use these steps
for synthesizing a "cherry-pick" of B to master.

1. cp .git/index index.temp
2. set GIT_INDEX_FILE=index.temp
3. git reset master -- . (git read-tree also works here, but is a bit slower)
4. git format-patch --full-index B~..B
5. git apply --cached B.patch
6. git write-tree
7. git commit-tree {output of 6} -p master -m "message"
8. either `git symbolic-ref` to make a branch or `git push` to remote

I'm looking to improve the git apply step in #5. 
Currently we can't use --cached in combination with
--3way, which limits some of the usefulness of this method.
There are many diffs that will block applying a patch
that a 3 way merge can resolve without conflicts. Even
in the case where there are real conflicts, performing
a 3 way merge will allow us to show the user the lines
where the conflict occurred. 

With the above in mind, I've created a small patch that
implements the behavior I'd like. Rather than disallow
the cached and 3way flags to be combined, we allow them,
but write any conflicts directly to the cached file. Since 
we're unable to modify the working directory, it seems
reasonable in this case to not actually present the user
with any options to resolve conflicts. Instead, a script
or tool using this command can diff the temporary cache
to get the source of the conflict.

Happy to address any feedback. After I address any major
changes I will add new tests for this path.

All tests passed locally.

Jerry Zhang (1):
  git-apply: Allow simultaneous --cached and --3way options

 Documentation/git-apply.txt |  4 +++-
 apply.c                     | 13 +++++++------
 2 files changed, 10 insertions(+), 7 deletions(-)

-- 
2.29.0


             reply	other threads:[~2021-04-03  1:35 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-03  1:34 Jerry Zhang [this message]
2021-04-03  1:34 ` [PATCH 1/1] git-apply: Allow simultaneous --cached and --3way options Jerry Zhang
2021-04-03  3:46   ` Elijah Newren
2021-04-03  4:26     ` Junio C Hamano
2021-04-04  1:02       ` Junio C Hamano
2021-04-05 22:12         ` Jerry Zhang
2021-04-05 22:23           ` Junio C Hamano
2021-04-05 23:29             ` Jerry Zhang
2021-04-06  0:10               ` Junio C Hamano
2021-04-05 22:08     ` Jerry Zhang
2021-04-05 22:19   ` [PATCH V2] " Jerry Zhang
2021-04-05 22:46     ` Junio C Hamano
2021-04-06  2:52       ` Jerry Zhang
2021-04-06  5:52         ` Junio C Hamano
2021-04-06 21:56           ` Jerry Zhang
2021-04-07  2:25             ` Jerry Zhang
2021-04-06  2:49     ` [PATCH v3] git-apply: allow " Jerry Zhang
2021-04-07 18:03       ` [PATCH v4] " Jerry Zhang
2021-04-07 19:00         ` Junio C Hamano
2021-04-08  2:13         ` [PATCH v5] " Jerry Zhang
2021-04-08 13:33           ` Junio C Hamano
2021-04-12 15:45             ` Elijah Newren
2021-04-12 18:26               ` Junio C Hamano
2021-04-12 15:40           ` Elijah Newren
2021-04-12 18:27             ` Junio C Hamano
2021-04-03  3:04 ` [PATCH 0/1] git-apply: Allow " Elijah Newren
2021-04-05 22:05   ` Jerry Zhang
2021-04-03  5:24 ` Bagas Sanjaya
     [not found]   ` <CAMKO5CtiW84E4XjnPRf-yOPp+ua_u07LsAu=BB0YhmP3+3kYiw@mail.gmail.com>
2021-04-03  8:05     ` Bagas Sanjaya

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=20210403013410.32064-1-jerry@skydio.com \
    --to=jerry@skydio.com \
    --cc=abe@skydio.com \
    --cc=brian.kubisiask@skydio.com \
    --cc=git@vger.kernel.org \
    --cc=ross@skydio.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).