Trouble testing out a patch on a branch new scratch git.git repository

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have a patch ready for my new --progress switch, and am trying to
prepare the PATCH/RFC email.  I am having problems testing out the
patch with get-am.  I suspect if my patch is going to have any hope at
being applied, I have to figure out what is causing git am to fail to
apply the change.

So, here is what I think happened in my repo:

1. A while ago, I made some changes and began testing them out.
2. I committed the change into the first commit (see
e802880bb89524b1f70132f1ca0716624788db3f below)
3. Unfortunately, I then stumbled across the coding guidelines, and
then discovered that my if statements had too many curly braces, and
fixed that with another commit (but I doubt that is the problem here)
4. I did a git pull origin and found a conflict in a file I had
changed in the first commit above into cache.h (I had inserted a line
right where someone else had inserted a line). I probably should have
stopped right then and there and not gone ahead with the merge, but do
something different (but if so, then what should I have done instead?)
:)
5. I manually edited cache.h to resolve the conflict, and then
executed "git add cache.h"
6. Committed the merge with git commit
(78f968776048d6dace68e6367fbd4e7d81041fef below)
7. Ran "git format-patch -M --stdout origin/master" and dumped it to a file.
8. Created a new scratch repository and tried to apply the patch with
this script:

#!/bin/sh
set -x
set -e
cd /tmp
rm -rf checkout_test
mkdir checkout_test
cd checkout_test
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
git am /tmp/patch

And the git am command failed on the cache.h file that had the
conflict I manually fixed. But note also a failure to apply the change
to git.c too (which, BTW, did not require any man-handling during the
merge). The output of that git am command is:

git am /tmp/patch
Applying: Add progress options
error: patch failed: cache.h:371
error: cache.h: patch does not apply
error: patch failed: git.c:4
error: git.c: patch does not apply
Patch failed at 0001 Add progress options
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

Here is a trimmed down git log output showing where my commits stand
w.r.t. the merge and the other commits in between (see <snip> line):


git log -100
commit 78f968776048d6dace68e6367fbd4e7d81041fef
Merge: 44b1f2e... 621f1b4...
Author: Brent Goodrick <brentg@xxxxxxxxxxxxxxxxxxx>
Date:   Sun Feb 8 11:03:13 2009 -0800

    Merge branch 'master' of git://git.kernel.org/pub/scm/git/git

    Conflicts:
    	cache.h

commit 44b1f2ecd2dc19ccb04660a730814c7b07b6d838
Author: Brent Goodrick <brentg@xxxxxxxxxxxxxxxxxxx>
Date:   Sun Feb 8 10:53:33 2009 -0800

    Conform to git coding standards

    This is a cosmetic change to remove curly braces used if statements
    that have only one statement in the true or false clauses.

<snip>... many other commits here </snip>

commit e802880bb89524b1f70132f1ca0716624788db3f
Author: Brent Goodrick <brentg@xxxxxxxxxxxxxxxxxxx>
Date:   Mon Feb 2 19:34:56 2009 -0800

    Add progress options

    Add --progress, --no-progress, and --progress-verbose options, which
    correspond to the GIT_PROGRESS environment variable setting of "1",
    "0", and "verbose", respectively.

    Signed-off-by: Brent Goodrick <bgoodr@xxxxxxxxx>


Any ideas as to what I need to do next here?  Even if this patch gets
rejected from being put into git.git, I still would like to know what
I did wrong.

Thanks,
bgoodr

P.S., For everyone's reference, the rest of this message contains a
raw dump of the "git format-patch -M --stdout origin/master" command
showing my work in progress that I would like to somehow reform into
an eventual PATCH/RFC email.

P.S.S. Please also reply while CCing me as I have hence had to take
myself off of the mailing list (I can't process 100+ messages per
day). 8)





--- cut here ---
>From e802880bb89524b1f70132f1ca0716624788db3f Mon Sep 17 00:00:00 2001
From: Brent Goodrick <brentg@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 2 Feb 2009 19:34:56 -0800
Subject: [PATCH 1/2] Add progress options

Add --progress, --no-progress, and --progress-verbose options, which
correspond to the GIT_PROGRESS environment variable setting of "1",
"0", and "verbose", respectively.

Signed-off-by: Brent Goodrick <bgoodr@xxxxxxxxx>
---
 Documentation/git.txt                  |   15 +++++++++++++
 builtin-pack-objects.c                 |    2 +-
 cache.h                                |    1 +
 contrib/completion/git-completion.bash |    3 ++
 git.c                                  |    8 ++++++-
 progress.c                             |   33 ++++++++++++++++++++++++----
 sideband.c                             |   36 ++++++++++++++++++++++++++++---
 7 files changed, 87 insertions(+), 11 deletions(-)

diff --git a/Documentation/git.txt b/Documentation/git.txt
index 17dc8b2..158b313 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -11,6 +11,7 @@ SYNOPSIS
 [verse]
 'git' [--version] [--exec-path[=GIT_EXEC_PATH]]
     [-p|--paginate|--no-pager]
+    [--progress|--no-progress|--progress-verbose]
     [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
     [--help] COMMAND [ARGS]

@@ -176,6 +177,20 @@ help ...`.
 --no-pager::
 	Do not pipe git output into a pager.

+--progress::
+	Show progress for long-running processing. This corresponds to
+	setting the GIT_PROGRESS environment variable to 1. This is
+	the default.
+
+--no-progress::
+	Instead of showing intermediate progress, just show
+	completion of major steps in processing. This corresponds to
+	setting the GIT_PROGRESS environment variable to 0.
+
+--progress-verbose::
+	Enable progress and show intermediate progress results as one
+	per line.
+
 --git-dir=<path>::
 	Set the path to the repository. This can also be controlled by
 	setting the GIT_DIR environment variable. It can be an absolute
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index cb51916..7ba5268 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -81,7 +81,7 @@ static int depth = 50;
 static int delta_search_threads;
 static int pack_to_stdout;
 static int num_preferred_base;
-static struct progress *progress_state;
+static struct progress *progress_state = NULL;
 static int pack_compression_level = Z_DEFAULT_COMPRESSION;
 static int pack_compression_seen;

diff --git a/cache.h b/cache.h
index 8d965b8..ecfda5a 100644
--- a/cache.h
+++ b/cache.h
@@ -371,6 +371,7 @@ static inline enum object_type
object_type(unsigned int mode)
 #define GITATTRIBUTES_FILE ".gitattributes"
 #define INFOATTRIBUTES_FILE "info/attributes"
 #define ATTRIBUTE_MACRO_PREFIX "[attr]"
+#define GIT_PROGRESS_ENVIRONMENT "GIT_PROGRESS"

 extern int is_bare_repository_cfg;
 extern int is_bare_repository(void);
diff --git a/contrib/completion/git-completion.bash
b/contrib/completion/git-completion.bash
index 81f70ec..a555241 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1701,6 +1701,9 @@ _git ()
 		--*)   __gitcomp "
 			--paginate
 			--no-pager
+			--progress
+			--no-progress
+			--progress-verbose
 			--git-dir=
 			--bare
 			--version
diff --git a/git.c b/git.c
index ecc8fad..166a201 100644
--- a/git.c
+++ b/git.c
@@ -4,7 +4,7 @@
 #include "quote.h"

 const char git_usage_string[] =
-	"git [--version] [--exec-path[=GIT_EXEC_PATH]]
[-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR]
[--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]";
+	"git [--version] [--exec-path[=GIT_EXEC_PATH]]
[-p|--paginate|--no-pager]
[--progress|--no-progress|--progress-verbose] [--bare]
[--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND
[ARGS]";

 const char git_more_info_string[] =
 	"See 'git help COMMAND' for more information on a specific command.";
@@ -115,6 +115,12 @@ static int handle_options(const char*** argv,
int* argc, int* envchanged)
 			setenv(GIT_DIR_ENVIRONMENT, getcwd(git_dir, sizeof(git_dir)), 0);
 			if (envchanged)
 				*envchanged = 1;
+		} else if (!strcmp(cmd, "--progress")) {
+			setenv(GIT_PROGRESS_ENVIRONMENT, "1", 1);
+		} else if (!strcmp(cmd, "--no-progress")) {
+			setenv(GIT_PROGRESS_ENVIRONMENT, "0", 1);
+		} else if (!strcmp(cmd, "--progress-verbose")) {
+			setenv(GIT_PROGRESS_ENVIRONMENT, "verbose", 1);
 		} else {
 			fprintf(stderr, "Unknown option: %s\n", cmd);
 			usage(git_usage_string);
diff --git a/progress.c b/progress.c
index 55a8687..f92eaaa 100644
--- a/progress.c
+++ b/progress.c
@@ -10,6 +10,7 @@

 #include "git-compat-util.h"
 #include "progress.h"
+#include "cache.h"

 #define TP_IDX_MAX      8

@@ -36,6 +37,8 @@ struct progress {
 };

 static volatile sig_atomic_t progress_update;
+static int show_progress = 1;
+static int show_progress_verbose = 0;

 static void progress_interval(int signum)
 {
@@ -90,15 +93,20 @@ static int display(struct progress *progress,
unsigned n, const char *done)

 	progress->last_value = n;
 	tp = (progress->throughput) ? progress->throughput->display : "";
-	eol = done ? done : "   \r";
+	eol = done ? done : (show_progress_verbose ? "   \n" : "   \r");
 	if (progress->total) {
 		unsigned percent = n * 100 / progress->total;
 		if (percent != progress->last_percent || progress_update) {
 			progress->last_percent = percent;
-			fprintf(stderr, "%s: %3u%% (%u/%u)%s%s",
-				progress->title, percent, n,
-				progress->total, tp, eol);
-			fflush(stderr);
+			/* Show progress everytime if specified. But if progress is turned
+			 * off, only show the last message (when done is non-NULL) as a
+			 * summary: */
+			if (show_progress || done) {
+				fprintf(stderr, "%s: %3u%% (%u/%u)%s%s",
+						progress->title, percent, n,
+						progress->total, tp, eol);
+				fflush(stderr);
+			}
 			progress_update = 0;
 			return 1;
 		}
@@ -206,6 +214,21 @@ struct progress *start_progress_delay(const char
*title, unsigned total,
 				       unsigned percent_treshold, unsigned delay)
 {
 	struct progress *progress = malloc(sizeof(*progress));
+	const char * show_progress_env = getenv(GIT_PROGRESS_ENVIRONMENT);
+	if (show_progress_env) {
+		if (!strcmp(show_progress_env, "true")) {
+			show_progress_env = "1";
+		}
+		if (!strcmp(show_progress_env, "false")) {
+			show_progress_env = "0";
+		}
+		if (!strcmp(show_progress_env, "verbose")) {
+			/* Show progress, but use LF codes in the output and not CR codes: */
+			show_progress_verbose = 1;
+		} else if (!strcmp(show_progress_env, "0")) {
+			show_progress = 0;
+		}
+	}
 	if (!progress) {
 		/* unlikely, but here's a good fallback */
 		fprintf(stderr, "%s...\n", title);
diff --git a/sideband.c b/sideband.c
index cca3360..21766a4 100644
--- a/sideband.c
+++ b/sideband.c
@@ -1,5 +1,6 @@
 #include "pkt-line.h"
 #include "sideband.h"
+#include "cache.h"

 /*
  * Receive multiplexed output stream over git native protocol.
@@ -26,7 +27,24 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 	char buf[LARGE_PACKET_MAX + 2*FIX_SIZE];
 	char *suffix, *term;
 	int skip_pf = 0;
-
+	int show_progress = 1;
+	int show_progress_verbose = 0;
+	const char * show_progress_env = getenv(GIT_PROGRESS_ENVIRONMENT);
+	if (show_progress_env) {
+		if (!strcmp(show_progress_env, "true")) {
+			show_progress_env = "1";
+		}
+		if (!strcmp(show_progress_env, "false")) {
+			show_progress_env = "0";
+		}
+		if (!strcmp(show_progress_env, "0")) {
+			show_progress = 0;
+		}
+		else if (!strcmp(show_progress_env, "verbose")) {
+			/* Show progress, but use LF codes in the output and not CR codes: */
+			show_progress_verbose = 1;
+		}
+	}
 	memcpy(buf, PREFIX, pf);
 	term = getenv("TERM");
 	if (term && strcmp(term, "dumb"))
@@ -58,6 +76,7 @@ int recv_sideband(const char *me, int in_stream, int
out, int err)
 			do {
 				char *b = buf;
 				int brk = 0;
+				int cr = 0;

 				/*
 				 * If the last buffer didn't end with a line
@@ -78,9 +97,15 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 						brk = 0;
 						break;
 					}
-					if (b[brk-1] == '\n' ||
-					    b[brk-1] == '\r')
+					if (b[brk-1] == '\n') {
+						break;
+					} else if (b[brk-1] == '\r') {
+						if (show_progress_verbose) {
+							b[brk-1] = '\n';
+						}
+						cr = 1;
 						break;
+					}
 				}

 				/*
@@ -95,7 +120,10 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 					memcpy(save, b + brk, sf);
 					b[brk + sf - 1] = b[brk - 1];
 					memcpy(b + brk - 1, suffix, sf);
-					safe_write(err, b, brk + sf);
+					/* Progress messages are those that end in CR codes */
+					if (show_progress || !cr) {
+						safe_write(err, b, brk + sf);
+					}
 					memcpy(b + brk, save, sf);
 					len -= brk;
 				} else {
-- 
1.6.2.rc0.3.g78f96


>From 44b1f2ecd2dc19ccb04660a730814c7b07b6d838 Mon Sep 17 00:00:00 2001
From: Brent Goodrick <brentg@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 8 Feb 2009 10:53:33 -0800
Subject: [PATCH 2/2] Conform to git coding standards

This is a cosmetic change to remove curly braces in if statements
that have only one statement in the true or false clauses.
---
 progress.c |   14 ++++++--------
 sideband.c |   23 ++++++++---------------
 2 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/progress.c b/progress.c
index f92eaaa..c96d594 100644
--- a/progress.c
+++ b/progress.c
@@ -93,6 +93,8 @@ static int display(struct progress *progress,
unsigned n, const char *done)

 	progress->last_value = n;
 	tp = (progress->throughput) ? progress->throughput->display : "";
+	/* When show_progress_verbose is true, put each progress message on a
+	 * separate line: */
 	eol = done ? done : (show_progress_verbose ? "   \n" : "   \r");
 	if (progress->total) {
 		unsigned percent = n * 100 / progress->total;
@@ -216,18 +218,14 @@ struct progress *start_progress_delay(const char
*title, unsigned total,
 	struct progress *progress = malloc(sizeof(*progress));
 	const char * show_progress_env = getenv(GIT_PROGRESS_ENVIRONMENT);
 	if (show_progress_env) {
-		if (!strcmp(show_progress_env, "true")) {
+		if (!strcmp(show_progress_env, "true"))
 			show_progress_env = "1";
-		}
-		if (!strcmp(show_progress_env, "false")) {
+		if (!strcmp(show_progress_env, "false"))
 			show_progress_env = "0";
-		}
-		if (!strcmp(show_progress_env, "verbose")) {
-			/* Show progress, but use LF codes in the output and not CR codes: */
+		if (!strcmp(show_progress_env, "verbose"))
 			show_progress_verbose = 1;
-		} else if (!strcmp(show_progress_env, "0")) {
+		else if (!strcmp(show_progress_env, "0"))
 			show_progress = 0;
-		}
 	}
 	if (!progress) {
 		/* unlikely, but here's a good fallback */
diff --git a/sideband.c b/sideband.c
index 21766a4..4bfb206 100644
--- a/sideband.c
+++ b/sideband.c
@@ -31,19 +31,14 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 	int show_progress_verbose = 0;
 	const char * show_progress_env = getenv(GIT_PROGRESS_ENVIRONMENT);
 	if (show_progress_env) {
-		if (!strcmp(show_progress_env, "true")) {
+		if (!strcmp(show_progress_env, "true"))
 			show_progress_env = "1";
-		}
-		if (!strcmp(show_progress_env, "false")) {
+		if (!strcmp(show_progress_env, "false"))
 			show_progress_env = "0";
-		}
-		if (!strcmp(show_progress_env, "0")) {
+		if (!strcmp(show_progress_env, "0"))
 			show_progress = 0;
-		}
-		else if (!strcmp(show_progress_env, "verbose")) {
-			/* Show progress, but use LF codes in the output and not CR codes: */
+		else if (!strcmp(show_progress_env, "verbose"))
 			show_progress_verbose = 1;
-		}
 	}
 	memcpy(buf, PREFIX, pf);
 	term = getenv("TERM");
@@ -97,12 +92,11 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 						brk = 0;
 						break;
 					}
-					if (b[brk-1] == '\n') {
+					if (b[brk-1] == '\n')
 						break;
-					} else if (b[brk-1] == '\r') {
-						if (show_progress_verbose) {
+					else if (b[brk-1] == '\r') {
+						if (show_progress_verbose)
 							b[brk-1] = '\n';
-						}
 						cr = 1;
 						break;
 					}
@@ -121,9 +115,8 @@ int recv_sideband(const char *me, int in_stream,
int out, int err)
 					b[brk + sf - 1] = b[brk - 1];
 					memcpy(b + brk - 1, suffix, sf);
 					/* Progress messages are those that end in CR codes */
-					if (show_progress || !cr) {
+					if (show_progress || !cr)
 						safe_write(err, b, brk + sf);
-					}
 					memcpy(b + brk, save, sf);
 					len -= brk;
 				} else {
-- 
1.6.2.rc0.3.g78f96
--- cut here ---
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux