git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 5/3] read-tree: loosen too strict index requirements
@ 2005-06-11  9:53 Junio C Hamano
  2005-06-12  3:55 ` [PATCH] Fix rename/copy when dealing with temporarily broken pairs Junio C Hamano
  2005-06-12  3:57 ` [PATCH] Add --diff-filter= output restriction to diff-* family Junio C Hamano
  0 siblings, 2 replies; 7+ messages in thread
From: Junio C Hamano @ 2005-06-11  9:53 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: git

This patch teaches read-tree 3-way merge that, when only "the
other tree" changed a path, and if the index file already has
the same change, we are not in a situation that would clobber
the index and the work tree, and lets the merge succeed; this is
case #14ALT in t1000 test.  It does not change the result of the
merge, but prevents it from failing when it does not have to.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

*** This is another leftover bits from the earlier 3-piece series.
*** This is not necessary for the --emu23 two-way improvements,
*** but rather help a case that would not be so uncommon in the
*** 3-way merge case.

 read-tree.c                 |    6 ++++++
 t/t1000-read-tree-m-3way.sh |    9 +++++++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/read-tree.c b/read-tree.c
--- a/read-tree.c
+++ b/read-tree.c
@@ -280,6 +280,12 @@ static int threeway_merge(struct cache_e
 		}
 		/* otherwise we will apply the original rule */
 	}
+	/* #14ALT */
+	if (a && b && c && same(a, b) && !same(a, c)) {
+		if (old && same(old, c))
+			return merged_entry_allow_dirty(c, old, dst);
+		/* otherwise the regular rule applies */
+	}
 	/*
 	 * If we have an entry in the index cache ("old"), then we want
 	 * to make sure that it matches any entries in stage 2 ("first
diff --git a/t/t1000-read-tree-m-3way.sh b/t/t1000-read-tree-m-3way.sh
--- a/t/t1000-read-tree-m-3way.sh
+++ b/t/t1000-read-tree-m-3way.sh
@@ -464,6 +464,15 @@ test_expect_success \
      git-read-tree -m $tree_O $tree_A $tree_B &&
      check_result"
 
+test_expect_success \
+    '14 - may match B in O && A && B && O==A && O!=B case' \
+    "rm -f .git/index NM &&
+     cp .orig-B/NM NM &&
+     git-update-cache --add NM &&
+     echo extra >>NM &&
+     git-read-tree -m $tree_O $tree_A $tree_B &&
+     check_result"
+
 test_expect_failure \
     '14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case' \
     "rm -f .git/index NM &&
------------


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] Fix rename/copy when dealing with temporarily broken pairs.
  2005-06-11  9:53 [PATCH 5/3] read-tree: loosen too strict index requirements Junio C Hamano
@ 2005-06-12  3:55 ` Junio C Hamano
  2005-06-13 16:24   ` Jon Seymour
  2005-06-12  3:57 ` [PATCH] Add --diff-filter= output restriction to diff-* family Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2005-06-12  3:55 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: git

When rename/copy uses a file that was broken by diffcore-break
as the source, and the broken filepair gets merged back later,
the output was mislabeled as a rename.  In this case, the source
file ends up staying in the output, so we should label it as a
copy instead.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

 diff.c            |    1 +
 diffcore-rename.c |   10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/diff.c b/diff.c
--- a/diff.c
+++ b/diff.c
@@ -661,6 +661,7 @@ struct diff_filepair *diff_queue(struct 
 	dp->one = one;
 	dp->two = two;
 	dp->score = 0;
+	dp->status = 0;
 	dp->source_stays = 0;
 	dp->broken_pair = 0;
 	diff_q(queue, dp);
diff --git a/diffcore-rename.c b/diffcore-rename.c
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -249,8 +249,14 @@ void diffcore_rename(int detect_rename, 
 				continue; /* unmerged */
 			else
 				locate_rename_dst(p->two, 1);
-		else if (!DIFF_FILE_VALID(p->two))
-			register_rename_src(p->one, 0);
+		else if (!DIFF_FILE_VALID(p->two)) {
+			/* If the source is a broken "delete", and
+			 * they did not really want to get broken,
+			 * that means the source actually stays.
+			 */
+			int stays = (p->broken_pair && !p->score);
+			register_rename_src(p->one, stays);
+		}
 		else if (detect_rename == DIFF_DETECT_COPY)
 			register_rename_src(p->one, 1);
 	}
------------


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] Add --diff-filter= output restriction to diff-* family.
  2005-06-11  9:53 [PATCH 5/3] read-tree: loosen too strict index requirements Junio C Hamano
  2005-06-12  3:55 ` [PATCH] Fix rename/copy when dealing with temporarily broken pairs Junio C Hamano
@ 2005-06-12  3:57 ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2005-06-12  3:57 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: git

This is a halfway between debugging aid and a helper to write an
ultra-smart merge scripts.  The new option takes a string that
consists of a list of "status" letters, and limits the diff
output to only those classes of changes, with two exceptions:

 - A broken pair (aka "complete rewrite"), does not match D
   (deleted) or N (created).  Use B to look for them.

 - The letter "A" in the diff-filter string does not match
   anything itself, but causes the entire diff that contains
   selected patches to be output (this behaviour is similar to
   that of --pickaxe-all for the -S option).

For example,

    $ git-rev-list HEAD |
      git-diff-tree --stdin -s -v -B -C --diff-filter=BCR

shows a list of commits that have complete rewrite, copy, or
rename.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

 diff.h        |    8 +++++--
 diff-cache.c  |    9 ++++++-
 diff-files.c  |    7 ++++--
 diff-helper.c |   15 +++++++-----
 diff-stages.c |    8 +++++--
 diff-tree.c   |   12 +++++++---
 diff.c        |   70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 7 files changed, 108 insertions(+), 21 deletions(-)

diff --git a/diff.h b/diff.h
--- a/diff.h
+++ b/diff.h
@@ -47,7 +47,11 @@ extern void diffcore_std(const char **pa
 			 int detect_rename, int rename_score,
 			 const char *pickaxe, int pickaxe_opts,
 			 int break_opt,
-			 const char *orderfile);
+			 const char *orderfile, const char *filter);
+
+extern void diffcore_std_no_resolve(const char **paths,
+				    const char *pickaxe, int pickaxe_opts,
+				    const char *orderfile, const char *filter);
 
 extern int diff_queue_is_empty(void);
 
@@ -56,6 +60,6 @@ extern int diff_queue_is_empty(void);
 #define DIFF_FORMAT_PATCH	2
 #define DIFF_FORMAT_NO_OUTPUT	3
 
-extern void diff_flush(int output_style, int resolve_rename_copy);
+extern void diff_flush(int output_style);
 
 #endif /* DIFF_H */
diff --git a/diff-cache.c b/diff-cache.c
--- a/diff-cache.c
+++ b/diff-cache.c
@@ -11,6 +11,7 @@ static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static int diff_break_opt = -1;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 
 /* A file entry went away or appeared */
 static void show_file(const char *prefix, struct cache_entry *ce, unsigned char *sha1, unsigned int mode)
@@ -224,6 +225,10 @@ int main(int argc, const char **argv)
 			pickaxe = arg + 2;
 			continue;
 		}
+		if (!strncmp(arg, "--diff-filter=", 14)) {
+			diff_filter = arg + 14;
+			continue;
+		}
 		if (!strncmp(arg, "-O", 2)) {
 			orderfile = arg + 2;
 			continue;
@@ -263,7 +268,7 @@ int main(int argc, const char **argv)
 		     detect_rename, diff_score_opt,
 		     pickaxe, pickaxe_opts,
 		     diff_break_opt,
-		     orderfile);
-	diff_flush(diff_output_format, 1);
+		     orderfile, diff_filter);
+	diff_flush(diff_output_format);
 	return ret;
 }
diff --git a/diff-files.c b/diff-files.c
--- a/diff-files.c
+++ b/diff-files.c
@@ -17,6 +17,7 @@ static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static int diff_break_opt = -1;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 static int silent = 0;
 
 static void show_unmerge(const char *path)
@@ -59,6 +60,8 @@ int main(int argc, const char **argv)
 			pickaxe = argv[1] + 2;
 		else if (!strncmp(argv[1], "-O", 2))
 			orderfile = argv[1] + 2;
+		else if (!strncmp(argv[1], "--diff-filter=", 14))
+			diff_filter = argv[1] + 14;
 		else if (!strcmp(argv[1], "--pickaxe-all"))
 			pickaxe_opts = DIFF_PICKAXE_ALL;
 		else if (!strncmp(argv[1], "-B", 2)) {
@@ -131,7 +134,7 @@ int main(int argc, const char **argv)
 		     detect_rename, diff_score_opt,
 		     pickaxe, pickaxe_opts,
 		     diff_break_opt,
-		     orderfile);
-	diff_flush(diff_output_format, 1);
+		     orderfile, diff_filter);
+	diff_flush(diff_output_format);
 	return 0;
 }
diff --git a/diff-helper.c b/diff-helper.c
--- a/diff-helper.c
+++ b/diff-helper.c
@@ -8,17 +8,16 @@
 static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 static int line_termination = '\n';
 static int inter_name_termination = '\t';
 
 static void flush_them(int ac, const char **av)
 {
-	diffcore_std(av + 1,
-		     0, 0, /* no renames */
-		     pickaxe, pickaxe_opts,
-		     -1, /* no breaks */
-		     orderfile);
-	diff_flush(DIFF_FORMAT_PATCH, 0);
+	diffcore_std_no_resolve(av + 1,
+				pickaxe, pickaxe_opts,
+				orderfile, diff_filter);
+	diff_flush(DIFF_FORMAT_PATCH);
 }
 
 static const char *diff_helper_usage =
@@ -38,6 +37,10 @@ int main(int ac, const char **av) {
 		}
 		else if (!strcmp(av[1], "--pickaxe-all"))
 			pickaxe_opts = DIFF_PICKAXE_ALL;
+		else if (!strncmp(av[1], "--diff-filter=", 14))
+			diff_filter = av[1] + 14;
+		else if (!strncmp(av[1], "-O", 2))
+			orderfile = av[1] + 2;
 		else
 			usage(diff_helper_usage);
 		ac--; av++;
diff --git a/diff-stages.c b/diff-stages.c
--- a/diff-stages.c
+++ b/diff-stages.c
@@ -13,6 +13,7 @@ static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static int diff_break_opt = -1;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 
 static char *diff_stages_usage =
 "git-diff-stages [-p] [-r] [-z] [-M] [-C] [-R] [-S<string>] [-O<orderfile>] <stage1> <stage2> [<path>...]";
@@ -88,6 +89,8 @@ int main(int ac, const char **av)
 			pickaxe = arg + 2;
 		else if (!strncmp(arg, "-O", 2))
 			orderfile = arg + 2;
+		else if (!strncmp(arg, "--diff-filter=", 14))
+			diff_filter = arg + 14;
 		else if (!strcmp(arg, "--pickaxe-all"))
 			pickaxe_opts = DIFF_PICKAXE_ALL;
 		else
@@ -111,7 +114,8 @@ int main(int ac, const char **av)
 		     detect_rename, diff_score_opt,
 		     pickaxe, pickaxe_opts,
 		     diff_break_opt,
-		     orderfile);
-	diff_flush(diff_output_format, 1);
+		     orderfile,
+		     diff_filter);
+	diff_flush(diff_output_format);
 	return 0;
 }
diff --git a/diff-tree.c b/diff-tree.c
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -18,6 +18,7 @@ static const char *pickaxe = NULL;
 static int pickaxe_opts = 0;
 static int diff_break_opt = -1;
 static const char *orderfile = NULL;
+static const char *diff_filter = NULL;
 static const char *header = NULL;
 static const char *header_prefix = "";
 static enum cmit_fmt commit_format = CMIT_FMT_RAW;
@@ -272,9 +273,10 @@ static int call_diff_flush(void)
 		     detect_rename, diff_score_opt,
 		     pickaxe, pickaxe_opts,
 		     diff_break_opt,
-		     orderfile);
+		     orderfile,
+		     diff_filter);
 	if (diff_queue_is_empty()) {
-		diff_flush(DIFF_FORMAT_NO_OUTPUT, 0);
+		diff_flush(DIFF_FORMAT_NO_OUTPUT);
 		return 0;
 	}
 	if (header) {
@@ -285,7 +287,7 @@ static int call_diff_flush(void)
 		printf(fmt, header, 0);
 		header = NULL;
 	}
-	diff_flush(diff_output_format, 1);
+	diff_flush(diff_output_format);
 	return 1;
 }
 
@@ -455,6 +457,10 @@ int main(int argc, const char **argv)
 			orderfile = arg + 2;
 			continue;
 		}
+		if (!strncmp(arg, "--diff-filter=", 14)) {
+			diff_filter = arg + 14;
+			continue;
+		}
 		if (!strcmp(arg, "--pickaxe-all")) {
 			pickaxe_opts = DIFF_PICKAXE_ALL;
 			continue;
diff --git a/diff.c b/diff.c
--- a/diff.c
+++ b/diff.c
@@ -920,7 +920,7 @@ static void diff_resolve_rename_copy(voi
 	diff_debug_queue("resolve-rename-copy done", q);
 }
 
-void diff_flush(int diff_output_style, int resolve_rename_copy)
+void diff_flush(int diff_output_style)
 {
 	struct diff_queue_struct *q = &diff_queued_diff;
 	int i;
@@ -929,8 +929,6 @@ void diff_flush(int diff_output_style, i
 
 	if (diff_output_style == DIFF_FORMAT_MACHINE)
 		line_termination = inter_name_termination = 0;
-	if (resolve_rename_copy)
-		diff_resolve_rename_copy();
 
 	for (i = 0; i < q->nr; i++) {
 		struct diff_filepair *p = q->queue[i];
@@ -957,11 +955,58 @@ void diff_flush(int diff_output_style, i
 	q->nr = q->alloc = 0;
 }
 
+static void diffcore_apply_filter(const char *filter)
+{
+	int i;
+	struct diff_queue_struct *q = &diff_queued_diff;
+	struct diff_queue_struct outq;
+	outq.queue = NULL;
+	outq.nr = outq.alloc = 0;
+
+	if (!filter)
+		return;
+
+	if (strchr(filter, 'A')) {
+		/* All-or-none */
+		int found;
+		for (i = found = 0; !found && i < q->nr; i++) {
+			struct diff_filepair *p = q->queue[i];
+			if ((p->broken_pair && strchr(filter, 'B')) ||
+			    (!p->broken_pair && strchr(filter, p->status)))
+				found++;
+		}
+		if (found)
+			return;
+
+		/* otherwise we will clear the whole queue
+		 * by copying the empty outq at the end of this
+		 * function, but first clear the current entries
+		 * in the queue.
+		 */
+		for (i = 0; i < q->nr; i++)
+			diff_free_filepair(q->queue[i]);
+	}
+	else {
+		/* Only the matching ones */
+		for (i = 0; i < q->nr; i++) {
+			struct diff_filepair *p = q->queue[i];
+			if ((p->broken_pair && strchr(filter, 'B')) ||
+			    (!p->broken_pair && strchr(filter, p->status)))
+				diff_q(&outq, p);
+			else
+				diff_free_filepair(p);
+		}
+	}
+	free(q->queue);
+	*q = outq;
+}
+
 void diffcore_std(const char **paths,
 		  int detect_rename, int rename_score,
 		  const char *pickaxe, int pickaxe_opts,
 		  int break_opt,
-		  const char *orderfile)
+		  const char *orderfile,
+		  const char *filter)
 {
 	if (paths && paths[0])
 		diffcore_pathspec(paths);
@@ -975,6 +1020,23 @@ void diffcore_std(const char **paths,
 		diffcore_pickaxe(pickaxe, pickaxe_opts);
 	if (orderfile)
 		diffcore_order(orderfile);
+	diff_resolve_rename_copy();
+	diffcore_apply_filter(filter);
+}
+
+
+void diffcore_std_no_resolve(const char **paths,
+			     const char *pickaxe, int pickaxe_opts,
+			     const char *orderfile,
+			     const char *filter)
+{
+	if (paths && paths[0])
+		diffcore_pathspec(paths);
+	if (pickaxe)
+		diffcore_pickaxe(pickaxe, pickaxe_opts);
+	if (orderfile)
+		diffcore_order(orderfile);
+	diffcore_apply_filter(filter);
 }
 
 void diff_addremove(int addremove, unsigned mode,
------------


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Fix rename/copy when dealing with temporarily broken pairs.
  2005-06-12  3:55 ` [PATCH] Fix rename/copy when dealing with temporarily broken pairs Junio C Hamano
@ 2005-06-13 16:24   ` Jon Seymour
  2005-06-13 17:58     ` Petr Baudis
  2005-06-13 21:01     ` Junio C Hamano
  0 siblings, 2 replies; 7+ messages in thread
From: Jon Seymour @ 2005-06-13 16:24 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

G'day Junio,

On 6/12/05, Junio C Hamano <junkio@cox.net> wrote:
> When rename/copy uses a file that was broken by diffcore-break
> as the source, and the broken filepair gets merged back later,
> the output was mislabeled as a rename.  In this case, the source
> file ends up staying in the output, so we should label it as a
> copy instead.

I've got a patch series that renames a file, but the patches generated by your
git-format-patch-script fail to rename the file to the new name.

I wondered if this patch might fix it, but it doesn't seem to.

Here's a hunk from the patch:

diff --git a/epoch.c b/traversal.c
similarity index 100%
rename from epoch.c
rename to traversal.c
--- a/epoch.c
+++ b/traversal.c
@@ -14,7 +14,7 @@

 #include "cache.h"
 #include "commit.h"
-#include "epoch.h"
+#include "traversal.h"

 struct fraction {
        BIGNUM numerator;

What tool am I meant to be using to apply the patch? 

I am currently using "patch -p1"

jon.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Fix rename/copy when dealing with temporarily broken pairs.
  2005-06-13 16:24   ` Jon Seymour
@ 2005-06-13 17:58     ` Petr Baudis
  2005-06-13 21:01     ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Petr Baudis @ 2005-06-13 17:58 UTC (permalink / raw)
  To: Jon Seymour; +Cc: Junio C Hamano, git

Dear diary, on Mon, Jun 13, 2005 at 06:24:16PM CEST, I got a letter
where Jon Seymour <jon.seymour@gmail.com> told me that...
> diff --git a/epoch.c b/traversal.c
> similarity index 100%
> rename from epoch.c
> rename to traversal.c
> What tool am I meant to be using to apply the patch? 
> 
> I am currently using "patch -p1"

Try git-apply.

-- 
				Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
<Espy> be careful, some twit might quote you out of context..

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Fix rename/copy when dealing with temporarily broken pairs.
  2005-06-13 16:24   ` Jon Seymour
  2005-06-13 17:58     ` Petr Baudis
@ 2005-06-13 21:01     ` Junio C Hamano
  2005-06-13 22:17       ` Jon Seymour
  1 sibling, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2005-06-13 21:01 UTC (permalink / raw)
  To: jon; +Cc: git

>>>>> "JS" == Jon Seymour <jon.seymour@gmail.com> writes:

JS> I've got a patch series that renames a file, but the patches
JS> generated by your git-format-patch-script fail to rename the
JS> file to the new name.

JS> I wondered if this patch might fix it, but it doesn't seem to.

I doubt the problem you have is related to the problem this
patch addresses.  This is a fix for a case that the machinery
sometimes says rename when it should say copy.

Regular "patch" cannot grok either copy or rename.  If your
recipient uses "patch", then you must not use -C nor -M when you
are preparing a diff for his consumption.

JS> What tool am I meant to be using to apply the patch? 
JS> I am currently using "patch -p1"

As Petr already responded, the git-apply program from the King
Penguin himself should work [*1*].

One thing I just want to make sure is this.  You are not
reporting that the patch you sent that said "rename" should have
been "copy", are you?  

I understand that your change creates traversal.c out of
epoch.c.  Say the output is from between commitA and commitB.

What I would like to know is if commitB still contains epoch.c,
or it does not have epoch.c anymore [*2*].  If it is the former
then I think you spotted a bug in the patch your message is a
response to.  I hope that is not the case.

P.S.  I will be offline shortly and will not be able to offer
further help until perhaps late next week.


[Footnote]

*1* Find the thread in the mailing list archive that contains
this message, which I think would be of help too.

    Date: Sun, 5 Jun 2005 16:17:56 -0700 (PDT)
    From: Linus Torvalds <torvalds@osdl.org>
    To: Junio C Hamano <junkio@cox.net>
    cc: Daniel Barkalow <barkalow@iabervon.org>, git@vger.kernel.org
    Subject: Re: [PATCH-CAREFUL/RENAME] rename git-rpush and git-rpull to git-ssh-push and git-ssh-pull
    Message-ID: <Pine.LNX.4.58.0506051613370.1876@ppc970.osdl.org>
    References: <7vk6l9flzr.fsf@assigned-by-dhcp.cox.net>
     <Pine.LNX.4.21.0506050132590.30848-100000@iabervon.org>
     <7vfyvxb89m.fsf_-_@assigned-by-dhcp.cox.net> <Pine.LNX.4.58.0506051427280.1876@ppc970.osdl.org>
     <7vmzq4zata.fsf@assigned-by-dhcp.cox.net>

    On Sun, 5 Jun 2005, Junio C Hamano wrote:
    > 
    > Here is a rebase.  To apply with git-apply, you need the "Yes,
    > sir" patch to grok "rename from/to".

    Seems to have applied correctly. Very nice.

                    Linus


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Fix rename/copy when dealing with temporarily broken pairs.
  2005-06-13 21:01     ` Junio C Hamano
@ 2005-06-13 22:17       ` Jon Seymour
  0 siblings, 0 replies; 7+ messages in thread
From: Jon Seymour @ 2005-06-13 22:17 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Petr Baudis

On 6/14/05, Junio C Hamano <junkio@cox.net> wrote:
> JS> I wondered if this patch might fix it, but it doesn't seem to.
> Regular "patch" cannot grok either copy or rename.  If your
> recipient uses "patch", then you must not use -C nor -M when you
> are preparing a diff for his consumption.

Ok, there was no problem other than me not understanding what
git-apply did - thank you Pasky for bringing light to the dark regions
of my sleep-deprived brain!

jon.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-06-13 23:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-11  9:53 [PATCH 5/3] read-tree: loosen too strict index requirements Junio C Hamano
2005-06-12  3:55 ` [PATCH] Fix rename/copy when dealing with temporarily broken pairs Junio C Hamano
2005-06-13 16:24   ` Jon Seymour
2005-06-13 17:58     ` Petr Baudis
2005-06-13 21:01     ` Junio C Hamano
2005-06-13 22:17       ` Jon Seymour
2005-06-12  3:57 ` [PATCH] Add --diff-filter= output restriction to diff-* family Junio C Hamano

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 NNTP newsgroup(s).