Re: [PATCH] add -C[NUM] to git-am

Previous thread: [PATCH] for-each-reflog: fix case for empty log directory by Junio C Hamano on Wednesday, February 7, 2007 - 10:21 am. (1 message)

Next thread: [PATCH] qgit: Default the log window to wider than the file list and set monospaced font by Andy Parkins on Wednesday, February 7, 2007 - 2:38 pm. (20 messages)
From: Michael S. Tsirkin
Date: Wednesday, February 7, 2007 - 1:15 pm

Add -C[NUM] to git-am so that patches can be applied even
if context has changed a bit.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>

---

I just had to apply a largish number of patches on a project
that has evolved since, and I found the following to be useful.

What do others think.

diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index aa4ce1d..f7d551e 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -64,6 +64,10 @@ default.   You could use `--no-utf8` to override this.
 	This flag is passed to the `git-apply` program that applies
 	the patch.
 
+-C<n>::
+	This flag is passed to the `git-apply` program that applies
+	the patch.
+
 --interactive::
 	Run interactively, just like git-applymbox.
 
diff --git a/git-am.sh b/git-am.sh
index 1252f26..9a61234 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -3,7 +3,7 @@
 # Copyright (c) 2005, 2006 Junio C Hamano
 
 USAGE='[--signoff] [--dotest=<dir>] [--utf8 | --no-utf8] [--binary] [--3way]
-  [--interactive] [--whitespace=<option>] <mbox>...
+  [--interactive] [--whitespace=<option>] [-CNUM] <mbox>...
   or, when resuming [--skip | --resolved]'
 . git-sh-setup
 set_reflog_action am
@@ -106,7 +106,8 @@ It does not apply to blobs recorded in its index."
 }
 
 prec=4
-dotest=.dotest sign= utf8=t keep= skip= interactive= resolved= binary= ws= resolvemsg=
+dotest=.dotest sign= utf8=t keep= skip= interactive= resolved= binary= resolvemsg=
+git_apply_opt=
 
 while case "$#" in 0) break;; esac
 do
@@ -142,7 +143,10 @@ do
 	skip=t; shift ;;
 
 	--whitespace=*)
-	ws=$1; shift ;;
+	git_apply_opt="$git_apply_opt $1"; shift ;;
+
+	-C*)
+	git_apply_opt="$git_apply_opt $1"; shift ;;
 
 	--resolvemsg=*)
 	resolvemsg=$(echo "$1" | sed -e "s/^--resolvemsg=//"); shift ;;
@@ -394,7 +398,7 @@ do
 
 	case "$resolved" in
 	'')
-		git-apply $binary --index $ws "$dotest/patch"
+		git-apply $git_apply_opt $binary --index "$dotest/patch"
 		apply_status=$?
 		;;
 	t)

-- ...
From: Junio C Hamano
Date: Wednesday, February 7, 2007 - 1:23 pm

FWIW, I am in favor although I do not foresee myself ever using
it.  However, this has slight ramifications.

 - we will be keeping applymbox after all.  shouldn't this be
   side-ported to it?

 - am is used as a workhorse for rebase.  shouldn't this be
   accessible through its command line as well?

The same goes for Andy's --patchdepth thing.

-

From: Michael S. Tsirkin
Date: Wednesday, February 7, 2007 - 2:19 pm

How will it be used?

-- 
MST
-

From: Junio C Hamano
Date: Thursday, February 8, 2007 - 12:52 am

Although I do not foresee myself using -C<num> that applies to
the whole series inexactly for "git am" to begin with, I would
imagine somebody who wants to say "git am -C1" may want to say
something like "git rebase -C1 origin/master",

-

From: Michael S. Tsirkin
Date: Thursday, February 8, 2007 - 6:57 am

Wait, this can't be done - git-applymbox uses git-applypatch
internally and that does not get -CNUM.

Like this then?
BTW, Junio, why is it that git-rebase calls "git am" and not "git-am"?
This wastes some cycles, does it not?


Add -C[NUM] to git-am and git-rebase so that patches can be applied even
if context has changed a bit.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>

---

diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index aa4ce1d..f7d551e 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -64,6 +64,10 @@ default.   You could use `--no-utf8` to override this.
 	This flag is passed to the `git-apply` program that applies
 	the patch.
 
+-C<n>::
+	This flag is passed to the `git-apply` program that applies
+	the patch.
+
 --interactive::
 	Run interactively, just like git-applymbox.
 
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 977f661..3dff2df 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -7,7 +7,7 @@ git-rebase - Forward-port local commits to the updated upstream head
 
 SYNOPSIS
 --------
-'git-rebase' [-v] [--merge] [--onto <newbase>] <upstream> [<branch>]
+'git-rebase' [-v] [--merge] [-CNUM] [--onto <newbase>] <upstream> [<branch>]
 
 'git-rebase' --continue | --skip | --abort
 
@@ -196,6 +196,12 @@ OPTIONS
 -v, \--verbose::
 	Display a diffstat of what changed upstream since the last rebase.
 
+-C<n>::
+	Ensure at least <n> lines of surrounding context match before
+	and after each change.  When fewer lines of surrounding
+	context exist they all must match.  By default no context is
+	ever ignored.
+
 include::merge-strategies.txt[]
 
 NOTES
diff --git a/git-am.sh b/git-am.sh
index 1252f26..9a61234 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -3,7 +3,7 @@
 # Copyright (c) 2005, 2006 Junio C Hamano
 
 USAGE='[--signoff] [--dotest=<dir>] [--utf8 | --no-utf8] [--binary] [--3way]
-  [--interactive] ...
From: Junio C Hamano
Date: Thursday, February 8, 2007 - 4:04 pm

Not commenting on the patch itself yet in this message, but a
quick note on the above point.

At some point after 1.5.0 we might want to audit the scripts and
make sure we can still run with $(gitexecdir) set to somewhere
outside of the end user's $PATH.

In such a setting, an end user would start "git rebase" (or
whatever git program) because "git-rebase" will not be on her
$PATH.  The git wrapper would do the GIT_EXEC_PATH magic before
invoking "git-rebase", so even the call to "am" is made in
"git-am" form from our script, it will work correctly.

So in that sense, they are equivalent and does not matter from
correctness point of view. It used to matter cycle-wise because
the "git potty" was a shell script, but I do not think it
matters anymore.

Once we make sure we still correctly support $(gitexecdir) that
is different from $(bindir), we may want to update all the
invocation of "git foo" our scripts make to "git-foo", for a
different reason.

Once in-tree scripts and commands that invoke git stuff always
with git-foo syntax, I think we _could_ allow aliasing built-in
command with something else.  For example, we could allow
"[alias] foo = git-foo --my-favorite-flag" in the configuration
file and let the user say "git foo" from the command line to
mean "$GIT_EXEC_PATH/git-foo --my-favorite-flag", while not
affecting the uses of "git-foo" in *our* scripts.

I do not think we would want to change the default to use
separate bindir and gitexecdir, but the intent has always been
that we should make it easier to do if some distro wanted to 
package with gitexecdir set to /usr/libexec/git.

-

From: Johannes Schindelin
Date: Wednesday, February 7, 2007 - 4:50 pm

Hi,


Why? Does -am not do strictly more than applymbox?

Ciao,
Dscho

-

Previous thread: [PATCH] for-each-reflog: fix case for empty log directory by Junio C Hamano on Wednesday, February 7, 2007 - 10:21 am. (1 message)

Next thread: [PATCH] qgit: Default the log window to wider than the file list and set monospaced font by Andy Parkins on Wednesday, February 7, 2007 - 2:38 pm. (20 messages)