[PATCH 0/3] Move CodingGuidelines and SubmittingPatches to ./Documentation/technical

2012-12-30 Thread Thomas Ackermann

CodingGuidelines and SubmittingPatches are IMHO a little bit hidden in 
./Documentation
and with respect to their content should be better placed in 
./Documentation/technical.

[PATCH 1/3] Move CodingGuidelines to ./technical/coding-guidelines.txt and 
SubmittingPatches to ./technical/submitting-patches.txt
[PATCH 2/3] Add coding-guidelines.txt and submitting-patches.txt to 
./Documentation/Makefile
[PATCH 3/3] Convert coding-guidelines.txt and submitting-patches.txt to asciidoc


---
Thomas
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/3] Move CodingGuidelines to ./technical/coding-guidelines.txt and SubmittingPatches to ./technical/submitting-patches.txt

2012-12-30 Thread Thomas Ackermann

Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/{CodingGuidelines = technical/coding-guidelines.txt}   | 0
 Documentation/{SubmittingPatches = technical/submitting-patches.txt} | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename Documentation/{CodingGuidelines = technical/coding-guidelines.txt} 
(100%)
 rename Documentation/{SubmittingPatches = technical/submitting-patches.txt} 
(100%)

diff --git a/Documentation/CodingGuidelines 
b/Documentation/technical/coding-guidelines.txt
similarity index 100%
rename from Documentation/CodingGuidelines
rename to Documentation/technical/coding-guidelines.txt
diff --git a/Documentation/SubmittingPatches 
b/Documentation/technical/submitting-patches.txt
similarity index 100%
rename from Documentation/SubmittingPatches
rename to Documentation/technical/submitting-patches.txt
-- 
1.8.0.msysgit.0


---
Thomas
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/3] Add coding-guidelines.txt and submitting-patches.txt to ./Documentation/Makefile

2012-12-30 Thread Thomas Ackermann
Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/Makefile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/Makefile b/Documentation/Makefile
index e53d333..a51c00f 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -47,6 +47,8 @@ TECH_DOCS += technical/racy-git
 TECH_DOCS += technical/send-pack-pipeline
 TECH_DOCS += technical/shallow
 TECH_DOCS += technical/trivial-merge
+TECH_DOCS += technical/coding-guidelines
+TECH_DOCS += technical/submitting-patches
 SP_ARTICLES += $(TECH_DOCS)
 SP_ARTICLES += technical/api-index
 
-- 
1.8.0.msysgit.0


---
Thomas
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/3] Convert coding-guidelines.txt and submitting-patches.txt to asciidoc

2012-12-30 Thread Thomas Ackermann

Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/technical/coding-guidelines.txt  | 175 ++---
 Documentation/technical/submitting-patches.txt | 144 ++--
 2 files changed, 174 insertions(+), 145 deletions(-)

diff --git a/Documentation/technical/coding-guidelines.txt 
b/Documentation/technical/coding-guidelines.txt
index 69f7e9b..406ded8 100644
--- a/Documentation/technical/coding-guidelines.txt
+++ b/Documentation/technical/coding-guidelines.txt
@@ -1,23 +1,25 @@
+Coding guidelines
+=
+
 Like other projects, we also have some guidelines to keep to the
 code.  For git in general, three rough rules are:
 
- - Most importantly, we never say It's in POSIX; we'll happily
+- Most importantly, we never say It's in POSIX; we'll happily
ignore your needs should your system not conform to it.
We live in the real world.
 
- - However, we often say Let's stay away from that construct,
+- However, we often say Let's stay away from that construct,
it's not even in POSIX.
 
- - In spite of the above two rules, we sometimes say Although
+- In spite of the above two rules, we sometimes say Although
this is not in POSIX, it (is so convenient | makes the code
much more readable | has other good characteristics) and
practically all the platforms we care about support it, so
let's use it.
 
-   Again, we live in the real world, and it is sometimes a
-   judgement call, the decision based more on real world
-   constraints people face than what the paper standard says.
-
+Again, we live in the real world, and it is sometimes a
+judgement call, the decision based more on real world
+constraints people face than what the paper standard says.
 
 As for more concrete guidelines, just imitate the existing code
 (this is a good guideline, no matter which project you are
@@ -30,173 +32,183 @@ uses (even if it doesn't match the overall style of 
existing code).
 But if you must have a list of rules, here they are.
 
 For shell scripts specifically (not exhaustive):
+
 
- - We use tabs for indentation.
+- We use tabs for indentation.
 
- - Case arms are indented at the same depth as case and esac lines.
+- Case arms are indented at the same depth as case and esac lines.
 
- - Redirection operators should be written with space before, but no
+- Redirection operators should be written with space before, but no
space after them.  In other words, write 'echo test $file'
instead of 'echo test $file' or 'echo test  $file'.  Note that
even though it is not required by POSIX to double-quote the
redirection target in a variable (as shown above), our code does so
because some versions of bash issue a warning without the quotes.
 
- - We prefer $( ... ) for command substitution; unlike ``, it
+- We prefer $( ... ) for command substitution; unlike ``, it
properly nests.  It should have been the way Bourne spelled
it from day one, but unfortunately isn't.
 
- - If you want to find out if a command is available on the user's
+- If you want to find out if a command is available on the user's
$PATH, you should use 'type command', instead of 'which command'.
The output of 'which' is not machine parseable and its exit code
is not reliable across platforms.
 
- - We use POSIX compliant parameter substitutions and avoid bashisms;
+- We use POSIX compliant parameter substitutions and avoid bashisms;
namely:
 
-   - We use ${parameter-word} and its [-=?+] siblings, and their
- colon'ed unset or null form.
+   * We use `${parameter-word}` and its `[-=?+]` siblings, and their
+ colon'ed unset or null form.
 
-   - We use ${parameter#word} and its [#%] siblings, and their
- doubled longest matching form.
+   * We use `${parameter#word}` and its `[#%]` siblings, and their
+ doubled longest matching form.
 
-   - No Substring Expansion ${parameter:offset:length}.
+   * No Substring Expansion `${parameter:offset:length}`.
 
-   - No shell arrays.
+   * No shell arrays.
 
-   - No strlen ${#parameter}.
+   * No strlen `${#parameter}`.
 
-   - No pattern replacement ${parameter/pattern/string}.
+   * No pattern replacement `${parameter/pattern/string}`.
 
- - We use Arithmetic Expansion $(( ... )).
+- We use Arithmetic Expansion $(( ... )).
 
- - Inside Arithmetic Expansion, spell shell variables with $ in front
+- Inside Arithmetic Expansion, spell shell variables with $ in front
of them, as some shells do not grok $((x)) while accepting $(($x))
just fine (e.g. dash older than 0.5.4).
 
- - We do not use Process Substitution (list) or (list).
+- We do not use Process Substitution (list) or (list).
 
- - Do not write control structures on a single line with semicolon.
+- Do not write control structures on a single line with semicolon.
then should be on the next line for if statements, and do
should be on the next 

[PATCH] gitweb: fix error in sanitize when highlight is enabled

2012-12-30 Thread Orgad Shaneh
$1 becomes undef by internal regex, since it has no capture groups.

Match against accpetable control characters using index() instead of a regex.

Signed-off-by: Orgad Shaneh org...@gmail.com
---
 gitweb/gitweb.perl |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 0f207f2..6d5aeab 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1556,7 +1556,7 @@ sub sanitize {
return undef unless defined $str;
 
$str = to_utf8($str);
-   $str =~ s|([[:cntrl:]])|($1 =~ /[\t\n\r]/ ? $1 : quot_cec($1))|eg;
+   $str =~ s|([[:cntrl:]])|(index(\t\n\r, $1) != -1 ? $1 : 
quot_cec($1))|eg;
return $str;
 }
 
-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC] pack-objects: compression level for non-blobs

2012-12-30 Thread Jeff King
On Sat, Dec 29, 2012 at 12:27:47AM -0500, Jeff King wrote:

  If reachability bitmap is implemented, we'll have per-pack cache
  infrastructure ready, so less work there for commit cache.
 
 True. I don't want to dissuade you from doing any commit cache work. I
 only wanted to point out that this alternative may have merit because of
 its simplicity (so we can use it until a caching solution exists, or
 even after, if managing the cache has downsides).

So I was thinking about this, which led to some coding, which led to
some benchmarking.

I want to clean up a few things in the code before I post it, but the
general idea is to have arbitrary per-pack cache files in the
objects/pack directory. Like this:

  $ cd objects/pack  ls
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.commits
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.idx
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.pack
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.parents
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.timestamps
  pack-a3e262f40d95fc0cc97d92797ff9988551367b75.trees

Each file describes the objects in the matching pack. If a new pack is
generated, you'd throw away the old cache files along with the old pack,
and generate new ones. Or not. These are totally optional, and an older
version of git will just ignore them. A newer version will use them if
they're available, and otherwise fallback to the existing code (i.e.,
reading the whole object from the pack). So you can generate them at
repack time, later on, or not at all. For now I have a separate command
that generates them based on the pack index; if this turns out to be a
good idea, it would probably get called as part of repack.

Each file is a set of fixed-length records. The commits file contains
the sha1 of every commit in the pack (sorted). A binary search of the
mmap'd file gives the position of a particular commit within the list,
and that position is used to index the parents, timestamps, and trees
files (obviously if it is missing, then the other files are useless, but
we already have to be able to fallback to just reading the objects
anyway).

I split it out into multiple files because you can actually operate with
a subset (though in my initial attempt, I transparently plug in at the
parse_commit layer, which means we need all items to consider the commit
parsed, whether the caller actually cares or not. But in theory a
reader could only want to ask for one item).  Making a generation
cache file is an obvious next step (and because we already have
commits, it is only 4 bytes per commit on top of it). Reachability
bitmaps would be another one (though due to the compression, I am not
sure they will work with a fixed-size record design, so this may need
some modification).

Anyway, here are the numbers I came up with (appended to my earlier
compression numbers):

git.git:
 Pack  | Size  |  Cold Revs  |  Warm Revs  | Cold Objects | Warm Objects
---+---+-+-+--+--
  none |  56.72| 0.68| 0.33|  2.45|  1.94   
commit |  64.61 (+13%) | 0.50 (-26%) | 0.09 (-74%) |  2.42  (-1%) |  1.69 (-13%)
  tree |  60.68  (+6%) | 0.79 (+16%) | 0.33   (0%) |  2.23  (-8%) |  1.75  (-9%)
  both |  68.54 (+20%) | 0.48 (-29%) | 0.08 (-75%) |  2.24  (-8%) |  1.48 (-23%)
 cache |  59.29  (+4%) | 0.57 (-16%) | 0.05 (-84%) |  2.23  (-8%) |  1.66 (-14%)

linux.git:
 Pack  | Size  |  Cold Revs  |  Warm Revs  | Cold Objects | Warm Objects
---+---+-+-+--+--
  none | 864.61| 8.66| 4.07| 42.76| 36.32   
commit | 970.46 (+12%) | 8.87  (+2%) | 1.02 (-74%) | 42.94   (0%) | 33.43  (-7%)
  tree | 895.37  (+3%) | 9.08  (+4%) | 4.07   (0%) | 36.01 (-15%) | 29.62 (-18%)
  both |1001.25 (+15%) | 8.90  (+2%) | 1.03 (-74%) | 35.57 (-16%) | 26.25 (-27%)
 cache | 894.78  (+3%) | 4.88 (-43%) | 0.69 (-83%) | 38.80  (-9%) | 32.79  (-9%)

webkit.git:
 Pack  | Size  |  Cold Revs  |  Warm Revs  | Cold Objects | Warm Objects
---+---+-+-+--+--
  none |   3.46| 1.61| 1.38| 20.46| 18.72   
commit |   3.54  (+2%) | 1.42 (-11%) | 0.34 (-75%) | 20.42   (0%) | 17.57  (-6%)
  tree |   3.59  (+3%) | 1.61   (0%) | 1.39   (0%) | 16.01 (-21%) | 14.00 (-25%)
  both |   3.67  (+6%) | 1.45 (-10%) | 0.34 (-75%) | 15.94 (-22%) | 12.91 (-31%)
 cache |   3.47   (0%) | 0.49 (-69%) | 0.14 (-90%) | 19.53  (-4%) | 17.86  (-4%)


So you can see that it performs even better than no-compression on the
warm-revs case. Which makes sense, since we do not even have to touch
the object data at all, and can do the whole traversal straight out of
the cache. So we do not even have to memcpy the bytes around. And it
takes up even less space (3-4% versus 12-13% on the first two repos).
Which makes sense, because even though we are 

Re: [RFC] pack-objects: compression level for non-blobs

2012-12-30 Thread Nguyen Thai Ngoc Duy
On Sun, Dec 30, 2012 at 7:05 PM, Jeff King p...@peff.net wrote:
 So I was thinking about this, which led to some coding, which led to
 some benchmarking.

I like your way of thinking! May I suggest you take a new year break
first, then think about reachability bitmaps ;-) 2013 will be an
exciting year.

 I want to clean up a few things in the code before I post it, but the
 general idea is to have arbitrary per-pack cache files in the
 objects/pack directory. Like this:

   $ cd objects/pack  ls
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.commits
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.idx
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.pack
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.parents
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.timestamps
   pack-a3e262f40d95fc0cc97d92797ff9988551367b75.trees

 Each file describes the objects in the matching pack. If a new pack is
 generated, you'd throw away the old cache files along with the old pack,
 and generate new ones. Or not. These are totally optional, and an older
 version of git will just ignore them. A newer version will use them if
 they're available, and otherwise fallback to the existing code (i.e.,
 reading the whole object from the pack). So you can generate them at

You have probably thought about this (and I don't have the source to
check first), but we may need to version these extra files so we can
change the format later if needed. Git versions that do not recognize
new versions simply ignore the cahce.

 repack time, later on, or not at all. For now I have a separate command
 that generates them based on the pack index; if this turns out to be a
 good idea, it would probably get called as part of repack.

I'd like to make it part of index-pack, where we have nearly
everything in memory. But let's leave it as a separate command first.

 Each file is a set of fixed-length records. The commits file contains
 the sha1 of every commit in the pack (sorted). A binary search of the
 mmap'd file gives the position of a particular commit within the list,

I think we could avoid storing sha-1 in the cache with Shawn's idea
[1]. But now I read it again I fail to see it :(

[1] http://article.gmane.org/gmane.comp.version-control.git/206485

 Of course, it does very little for the full --objects listing, where we
 spend most of our time inflating trees. We could couple this with
 uncompressed trees (which are not all that much bigger, since the sha1s
 do not compress anyway). Or we could have an external tree cache, but
 I'm not sure exactly what it would look like (this is basically
 reinventing bits of packv4, but doing so in a way that is redundant with
 the existing packfile, rather than replacing it).

Depending on the use case, we could just generate packv4-like cache
for recently-used trees only. I'm not sure how tree cache impact a
merge operation on a very large worktree (iow, a lot of trees
referenced from HEAD to be inflated). This is something a cache can
do, but a new pack version cannot.

 Or since the point of
 --objects is usually reachability, it may make more sense to pursue the
 bitmap, which should be even faster still.

Yes. And if narrow clone ever comes, which needs --objects limited by
pathspec, we could just produce extra bitmaps for frequently-used
pathspecs and only allow narrow clone with those pathspecs.
-- 
Duy
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] dir.c: Make git-status --ignored more consistent

2012-12-30 Thread Antoine Pelisse
The current behavior of git-status is inconsistent and
misleading. Especially when used with --untracked-files=all option:

 - files ignored in untracked directories will be missing from status
 output.
 - untracked files in committed yet ignored directories are also
 missing.
 - with --untracked-files=normal, untracked directories that contains
 only ignored files are dropped too.

Make the behavior more consistent across all possible use cases:

 - --ignored --untracked-files=normal doesn't show each specific
 files but top directory.
 Shows untracked directories that only contains ignored files, and
 ignored tracked directories with untracked files.
 - --ignored --untracked-files=all shows all ignored files, either
 because it's in an ignored directory (tracked or untracked), or
 because the file is explicitly ignored.

Signed-off-by: Antoine Pelisse apeli...@gmail.com
---
 dir.c   |   98 +++
 wt-status.c |4 ++-
 2 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/dir.c b/dir.c
index 5a83aa7..d0c92dc 100644
--- a/dir.c
+++ b/dir.c
@@ -834,8 +834,9 @@ static enum exist_status directory_exists_in_index(const 
char *dirname, int len)
  * traversal routine.
  *
  * Case 1: If we *already* have entries in the index under that
- * directory name, we always recurse into the directory to see
- * all the files.
+ * directory name, we recurse into the directory to see all the files,
+ * unless the directory is excluded and we want to show ignored
+ * directories
  *
  * Case 2: If we *already* have that directory name as a gitlink,
  * we always continue to see it as a gitlink, regardless of whether
@@ -849,6 +850,9 @@ static enum exist_status directory_exists_in_index(const 
char *dirname, int len)
  *  just a directory, unless hide_empty_directories is
  *  also true and the directory is empty, in which case
  *  we just ignore it entirely.
+ *  if we are looking for ignored directories, look if it
+ *  contains only ignored files to decide if it must be shown as
+ *  ignored or not.
  *  (b) if it looks like a git directory, and we don't have
  *  'no_gitlinks' set we treat it as a gitlink, and show it
  *  as a directory.
@@ -861,12 +865,15 @@ enum directory_treatment {
 };
 
 static enum directory_treatment treat_directory(struct dir_struct *dir,
-   const char *dirname, int len,
+   const char *dirname, int len, int exclude,
const struct path_simplify *simplify)
 {
/* The len-1 is to strip the final '/' */
switch (directory_exists_in_index(dirname, len-1)) {
case index_directory:
+   if ((dir-flags  DIR_SHOW_OTHER_DIRECTORIES)  exclude)
+   break;
+
return recurse_into_directory;
 
case index_gitdir:
@@ -886,7 +893,23 @@ static enum directory_treatment treat_directory(struct 
dir_struct *dir,
}
 
/* This is the show_other_directories case */
-   if (!(dir-flags  DIR_HIDE_EMPTY_DIRECTORIES))
+
+   /*
+* We are looking for ignored files and our directory is not ignored,
+* check if it contains only ignored files
+*/
+   if ((dir-flags  DIR_SHOW_IGNORED)  !exclude) {
+   int ignored;
+   dir-flags = ~DIR_SHOW_IGNORED;
+   dir-flags |= DIR_HIDE_EMPTY_DIRECTORIES;
+   ignored = read_directory_recursive(dir, dirname, len, 1, 
simplify);
+   dir-flags = ~DIR_HIDE_EMPTY_DIRECTORIES;
+   dir-flags |= DIR_SHOW_IGNORED;
+
+   return ignored ? ignore_directory : show_directory;
+   }
+   if (!(dir-flags  DIR_SHOW_IGNORED) 
+   !(dir-flags  DIR_HIDE_EMPTY_DIRECTORIES))
return show_directory;
if (!read_directory_recursive(dir, dirname, len, 1, simplify))
return ignore_directory;
@@ -894,6 +917,49 @@ static enum directory_treatment treat_directory(struct 
dir_struct *dir,
 }
 
 /*
+ * Decide what to do when we find a file while traversing the
+ * filesystem. Mostly two cases:
+ *
+ *  1. We are looking for ignored files
+ *   (a) File is ignored, include it
+ *   (b) File is in ignored path, include it
+ *   (c) File is not ignored, exclude it
+ *
+ *  2. Other scenarios, include the file if not excluded
+ *
+ * Return 1 for exclude, 0 for include.
+ */
+static int treat_file(struct dir_struct *dir, struct strbuf *path, int 
exclude, int *dtype)
+{
+   struct path_exclude_check check;
+   int exclude_file = 0;
+
+   if (exclude)
+   exclude_file = !(dir-flags  DIR_SHOW_IGNORED);
+   else if (dir-flags  DIR_SHOW_IGNORED) {
+   /*
+* Optimization:
+* Don't spend time on indexed files, they won't be
+* added to the list anyway
+*/
+   struct cache_entry *ce = index_name_exists(the_index,
+   path-buf, 

[PATCH 2/2] git-status: Test --ignored behavior

2012-12-30 Thread Antoine Pelisse
Test all possible use-cases of git-status --ignored with
--untracked-files to normal and all:

 - untracked directory is listed as untracked if it has a mix of
 untracked and ignored files in it.
 with -uall, ignored/untracked files are listed as
 ignored/untracked.

 - untracked directory with only ignored files is listed as ignored.
 with -uall, all files in the directory are listed.

 - ignored directory is listed as ignored. With -uall, all files in
 the directory are listed as ignored.

 - ignored and committed directory is listed as ignored if it has
 untracked files.
 with -uall, all untracked files in the directory are listed as
 ignored.

Signed-off-by: Antoine Pelisse apeli...@gmail.com
---
 t/t7061-wtstatus-ignore.sh |  146 
 1 file changed, 146 insertions(+)
 create mode 100755 t/t7061-wtstatus-ignore.sh

diff --git a/t/t7061-wtstatus-ignore.sh b/t/t7061-wtstatus-ignore.sh
new file mode 100755
index 000..0da1214
--- /dev/null
+++ b/t/t7061-wtstatus-ignore.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+test_description='git-status ignored files'
+
+. ./test-lib.sh
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+?? untracked/
+EOF
+
+test_expect_success 'status untracked directory with --ignored' '
+   echo ignored .gitignore 
+   mkdir untracked 
+   : untracked/ignored 
+   : untracked/uncommitted 
+   git status --porcelain --ignored actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+?? untracked/uncommitted
+!! untracked/ignored
+EOF
+
+test_expect_success 'status untracked directory with --ignored -u' '
+   git status --porcelain --ignored -u actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! ignored/
+EOF
+
+test_expect_success 'status ignored directory with --ignore' '
+   rm -rf untracked 
+   mkdir ignored 
+   : ignored/uncommitted 
+   git status --porcelain --ignored actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! ignored/uncommitted
+EOF
+
+test_expect_success 'status ignored directory with --ignore -u' '
+   git status --porcelain --ignored -u actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! untracked-ignored/
+EOF
+
+test_expect_success 'status untracked directory with ignored files with 
--ignore' '
+   rm -rf ignored 
+   mkdir untracked-ignored 
+   mkdir untracked-ignored/test 
+   : untracked-ignored/ignored 
+   : untracked-ignored/test/ignored 
+   git status --porcelain --ignored actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! untracked-ignored/ignored
+!! untracked-ignored/test/ignored
+EOF
+
+test_expect_success 'status untracked directory with ignored files with 
--ignore -u' '
+   git status --porcelain --ignored -u actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status ignored tracked directory with --ignore' '
+   rm -rf untracked-ignored 
+   mkdir tracked 
+   : tracked/committed 
+   git add tracked/committed 
+   git commit -m. 
+   echo tracked .gitignore 
+   git status --porcelain --ignored actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status ignored tracked directory with --ignore -u' '
+   git status --porcelain --ignored -u actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! tracked/
+EOF
+
+test_expect_success 'status ignored tracked directory and uncommitted file 
with --ignore' '
+   : tracked/uncommitted 
+   git status --porcelain --ignored actual 
+   test_cmp expected actual
+'
+
+cat expected \EOF
+?? .gitignore
+?? actual
+?? expected
+!! tracked/uncommitted
+EOF
+
+test_expect_success 'status ignored tracked directory and uncommitted file 
with --ignore -u' '
+   git status --porcelain --ignored -u actual 
+   test_cmp expected actual
+'
+
+test_done
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] dir.c: Make git-status --ignored more consistent

2012-12-30 Thread Antoine Pelisse
By the way, that merges without conflicts with Adam's series, but it
will not compile as he renamed functions that I'm now using
(path_excluded() - is_path_excluded() that is).

By the way, Junio, how do you handle this situation as a maintainer ?
Do you keep a note to manually make the change every time you remerge
the series together ? That is the kind of use-case you can't handle
with git-rerere, and I've been trying to find a solution to it.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Aw: Re: [PATCH 0/3] Move CodingGuidelines and SubmittingPatches to ./Documentation/technical

2012-12-30 Thread Thomas Ackermann
 
./Documentation/technical contains not only API documentation but also
several other documents describing Git implementation topics and thus
is the place someone wanting to join Git development should look at.
So IMHO CodingGuidelines and SubmittingPatches should also be there.
(One could even consider renaming ./technical to ./internal to stress this point
and get rid of the rather generic technical ...)

In contrast ./howto implies containing documents a Git *user* might 
need to solve some tricky problems (and to this end maintain-git.txt
and new-command.txt should also be moved to ./technical (sorry for
being the guy who just moved ./technical/api-command to 
./howto/new-command.txt ;-)).

./Documentation itself should only contain the command manpages
and tutorials.

- Original Nachricht 
Von: Ramkumar Ramachandra artag...@gmail.com
An:  Thomas Ackermann th.ac...@arcor.de
Datum:   30.12.2012 12:52
Betreff: Re: [PATCH 0/3] Move CodingGuidelines and SubmittingPatches to 
./Documentation/technical

 Thomas Ackermann wrote:
  CodingGuidelines and SubmittingPatches are IMHO a little bit hidden in
 ./Documentation
  and with respect to their content should be better placed in
 ./Documentation/technical.
 
 I don't think SubmittingPatches and CodingGuidelines belong to
 Documentation/technical; that location is mostly reserved for API
 documentation.  Also, being prominent documents, they're probably
 linked to by many places on the internet.  I wouldn't want to
 unnecessarily break those links.
 
 Ram
 

---
Thomas
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] dir.c: Make git-status --ignored more consistent

2012-12-30 Thread Adam Spiers
On Sun, Dec 30, 2012 at 2:54 PM, Antoine Pelisse apeli...@gmail.com wrote:
 By the way, that merges without conflicts with Adam's series, but it
 will not compile as he renamed functions that I'm now using
 (path_excluded() - is_path_excluded() that is).

Ah, renames!  I forgot about those.

 By the way, Junio, how do you handle this situation as a maintainer ?
 Do you keep a note to manually make the change every time you remerge
 the series together ? That is the kind of use-case you can't handle
 with git-rerere, and I've been trying to find a solution to it.

Not sure if it helps to note that I am already basing my patch series
on top of Junio's nd/attr-match-optim-more branch.  Nguyen created
that branch which conflicted with mine, but then resolved the conflicts,
so I am basing mine on his to avoid having to continually resolve the
same conflicts.

So you could take the same approach and rebase yours on top of mine,
e.g.

git remote add junio git://github.com/gitster/git.git
git fetch junio
git rebase junio/as/check-ignore
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Lockless Refs? (Was [PATCH] refs: do not use cached refs in repack_without_ref)

2012-12-30 Thread Martin Fick
On Saturday, December 29, 2012 03:18:49 pm Martin Fick wrote:
 Jeff King p...@peff.net wrote:
 On Thu, Dec 27, 2012 at 04:11:51PM -0700, Martin Fick 
wrote:
  My idea is based on using filenames to store sha1s
  instead of file contents.  To do this, the sha1 one of
  a ref would be stored in a file in a directory named
  after the loose ref.  I believe this would then make
  it possible to have lockless atomic ref updates by
  renaming the file.
  
  To more fully illustrate the idea, imagine that any
  file (except for the null file) in the directory will
  represent the value of the ref with its name, then the
  following transitions can represent atomic state
  changes to a refs
 
  value and existence:
 Hmm. So basically you are relying on atomic rename() to
 move the value around within a directory, rather than
 using write to move it around within a file. Atomic
 rename is usually something we have on local filesystems
 (and I think we rely on it elsewhere). Though I would
 not be
 surprised if it is not atomic on all networked
 filesystems (though it is
 on NFS, at least).
 
 Yes.  I assume this is OK because doesn't git already rely
 on atomic renames?  For example to rename the new
 packed-refs file to unlock it?
 
 ...
 
  3) To create a ref, it must be renamed from the null
  file (sha ...) to the new value just as if it were
  being updated from any other value, but there is one
  extra condition: before renaming the null file, a full
  directory scan must be done to ensure that the null
  file is the only file in the directory (this condition
  exists because creating the directory and null file
  cannot be atomic unless the filesystem supports atomic
  directory renames, an expectation git does not
  currently make).  I am not sure how this compares to
  today's approach, but including the setup costs
  (described below), I suspect it is slower.
 
 Hmm. mkdir is atomic. So wouldn't it be sufficient to
 just mkdir and create the correct sha1 file?
 
 But then a process could mkdir and die leaving a stale
 empty dir with no reliable recovery mechanism.
 
 
 Unfortunately, I think I see another flaw though! :( I
 should have known that I cannot separate an important
 check from its state transitioning action.  The following
 could happen:
 
  A does mkdir
  A creates null file
  A checks dir - no other files
  B checks dir - no other files
  A renames null file to abcd
  C creates second null file
  B renames second null file to defg
 
 One way to fix this is to rely on directory renames, but I
 believe this is something git does not want to require of
 every FS? If we did, we could Change #3 to be:
 
 3) To create a ref, it must be renamed from the null file
 (sha ...) to the new value just as if it were being
 updated from any other value. (No more scan)
 
 Then, with reliable directory renames, a process could do
 what you suggested to a temporary directory, mkdir +
 create null file, then rename the temporary dir to
 refname.  This would prevent duplicate null files.  With
 a grace period, the temporary dirs could be cleaned up in
 case a process dies before the rename.  This is your
 approach with reliable recovery.

The whole null file can go away if we use directory renames.  
Make #3:

3) To create a ref, create a temporary directory containing a 
file named after the sha1 of the ref to be created and rename 
the directory to the name of the ref to create.  If the 
rename fails, the create fails.  If the rename succeeds, the 
create succeeds.

With a grace period, the temporary dirs could be cleaned up 
in case a process dies before the rename,

-Martin
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/2] Add MAINTAINERS file and clarify gui workflows

2012-12-30 Thread Jason Holden
I spent a good amount of time yesterday figuring out the correct workflow
to submit a change to gitk.  As I understand it, gitk (and I think git-gui)
are maintained upstream of git, and patches should be sent to the git email
list against the upstream repo.  I think a top-level MAINTAINERS file would 
help new contributers like me get orientated, especially in the cases of these
upstream projects that require a somewhat non-standard workflow

I also added some additional clarifications to SubmittingPatches that 
clarifies the additional steps required to submit patches against the guis.

Please double check that I've got the correct email addresses and canonical
repositories

I'm guessing there are additional Maintainers who should be added to the 
MAINTAINERS file, I just haven't followed to email list closely enough to
know all the formal/informal workflows that should be observed.

Jason Holden (2):
  Add top-level maintainers file with email/canonical repository
information
  Provide better guidance for submitting patches against git-gui, gitk

 Documentation/SubmittingPatches | 11 +++
 MAINTAINERS | 17 +
 2 files changed, 28 insertions(+)
 create mode 100644 MAINTAINERS

-- 
1.8.1.rc3.28.g0ab5d1f

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Heads up, an emergency fix for git-cvsimport is coming shortly

2012-12-30 Thread Eric S. Raymond
Bad news: the combination of cvsps and the existing git-cvsimport
script is seriously broken in both places.  This morning I fixed a
nasty bug in cvsps's branch detection and shipped 3.3. This is a
different bug from the broken (and now removed) ancestry-branch
tracking.

Good news: I have fixed all the urgent bugs (and now you know how I
spent my holidays).  Somewhat to my surprise, half the problems listed
on the git-cvsimport manual page turned out to be problems in
git-cvsimport itself, not more cvsps lossage. Those bugs are dead.

cvsps is now much better about warning when it cannot translate a tag
or sees a dubious branch structure.  I've also enhanced git-cvsimport
to have an engine switch so it can optionally use cvs2git as its 
conversion engine. If and when I can get parsecvs back into working
shape, I will add it to the set of supported engines.

I have a test suite that proves fixes for all the urgent problems, but
that needs a bit more work before I'm willing to call it done.

In a few days I will ship a patch that replaces git-cvsimport with a
working version and removes the t960[123] tests from the git tree.
Those are not actually tests of git-cvsimport itself but of the
underlying conversion engine, and now form about half of cvsps's own
regression-test suite.
-- 
a href=http://www.catb.org/~esr/;Eric S. Raymond/a

It is proper to take alarm at the first experiment on our
liberties. We hold this prudent jealousy to be the first duty of
citizens and one of the noblest characteristics of the late
Revolution. The freemen of America did not wait till usurped power had
strengthened itself by exercise and entangled the question in
precedents. They saw all the consequences in the principle, and they
avoided the consequences by denying the principle. We revere this
lesson too much ... to forget it-- James Madison.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/2] Add MAINTAINERS file and clarify gui workflows

2012-12-30 Thread Junio C Hamano
Jason Holden jason.k.holden.sw...@gmail.com writes:

 I spent a good amount of time yesterday figuring out the correct workflow
 to submit a change to gitk.

Thanks; I just realized that nothing in Documentation/ hierarchy
mentions these; they are only mentioned in A Note from the
Maintainer I send out every once in a while (kept in MaintNotes of
'todo' branch):

* Other people's trees, trusted lieutenants and credits.

Documentation/SubmittingPatches outlines to whom your proposed changes
should be sent.  As described in contrib/README, I would delegate fixes
and enhancements in contrib/ area to the primary contributors of them.

Although the following are included in git.git repository, they have their
own authoritative repository and maintainers:

 - git-gui/ comes from git-gui project, maintained by Pat Thoyts:

git://repo.or.cz/git-gui.git

 - gitk-git/ comes from Paul Mackerras's gitk project:

git://ozlabs.org/~paulus/gitk

 - po/ comes from the localization coordinator, Jiang Xin:

https://github.com/git-l10n/git-po/

Perhaps the update should mention po/ as well?
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC] pack-objects: compression level for non-blobs

2012-12-30 Thread Jeff King
On Sun, Dec 30, 2012 at 07:53:48PM +0700, Nguyen Thai Ngoc Duy wrote:

$ cd objects/pack  ls
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.commits
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.idx
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.pack
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.parents
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.timestamps
pack-a3e262f40d95fc0cc97d92797ff9988551367b75.trees
 
  Each file describes the objects in the matching pack. If a new pack is
  generated, you'd throw away the old cache files along with the old pack,
  and generate new ones. Or not. These are totally optional, and an older
  version of git will just ignore them. A newer version will use them if
  they're available, and otherwise fallback to the existing code (i.e.,
  reading the whole object from the pack). So you can generate them at
 
 You have probably thought about this (and I don't have the source to
 check first), but we may need to version these extra files so we can
 change the format later if needed. Git versions that do not recognize
 new versions simply ignore the cahce.

Agreed. The current code has a 4-byte magic, followed by a 4-byte
version number, followed by a 4-byte record size[1]. Then the data,
followed by the pack sha1, followed by a sha1 of all of the preceding
data.  So you can verify the validity of any cache file (both its
checksum, and that it matches the right packfile), just as you can with
a .idx file.

[1] Probably the magic and version should be per-file-type, and the
record size should be implicit from that; right now I make
assumptions about what is in the files based on their names, but
that is not part of the checksum.

  repack time, later on, or not at all. For now I have a separate command
  that generates them based on the pack index; if this turns out to be a
  good idea, it would probably get called as part of repack.
 
 I'd like to make it part of index-pack, where we have nearly
 everything in memory. But let's leave it as a separate command first.

Yeah, in the long run that may work. The steps I figured were:

  1. Optional, external command. Let people experiment.

  2. Once it has proven itself, run the command from index-pack by
 default (or with a config option).

  3. If it turns out too slow, move the generation directly into the
 index-pack process.

The current iteration does not seem all that slow, but that is because I
am mostly picking static data out of the commits. So I have to load the
commits, and that's it. But something like reachability might be more
expensive (OTOH, it will always be more expensive, whether we have the
objects in memory or not).

  Each file is a set of fixed-length records. The commits file contains
  the sha1 of every commit in the pack (sorted). A binary search of the
  mmap'd file gives the position of a particular commit within the list,
 
 I think we could avoid storing sha-1 in the cache with Shawn's idea
 [1]. But now I read it again I fail to see it :(
 
 [1] http://article.gmane.org/gmane.comp.version-control.git/206485

Right. My implementation is very similar to what Shawn said there. I.e.,
the timestamps file is literally 4 bytes times the number of commits.
The parents file is 40 bytes per commit (2 parents, with a marker to
indicate more or less than 2), though a lot of it is zero bytes.

Some alternatives I'm thinking about are:

  1. Using non-fixed-size records, which would allow trivial compression
 of entries like null sha1s. This would mean adding a separate
 lookup table, though, mapping sha1s to offsets. Still, even a
 32-bit offset is only 4 bytes per commit. If it meant dropping 40
 bytes of zeroes from the 2nd parent field out of half of all
 commits, that would be a win space-wise. It would be a
 double-indirect lookup, but it's constant effort, and only two page
 hits (which would be warm after the first lookup anyway).

  2. Storing offsets to objects in the packfile rather than their sha1s.
 This would save a lot of space, but would mean we couldn't refer to
 parents outside of the pack, but that may be OK. This is an
 optimization, and the case we want to target is a fully (or mostly)
 packed repo. It's OK to have the lookup fail and fallback to
 accessing the object.

  3. Dropping the commits file and just using the pack-*.idx as the
 index. The problem is that it is sparse in the commit space. So
 just naively storing 40 bytes per entry is going to waste a lot of
 space. If we had a separate index as in (1) above, that could be
 dropped to (say) 4 bytes of offset per object. But still, right now
 the commits file for linux-2.6 is about 7.2M (20 bytes times ~376K
 commits). There are almost 3 million total objects, so even storing
 4 bytes per object is going to be worse.

  4. Making a new index version that stores the sha1s separated by type.
 This means we can 

Re: [PATCH 1/2] dir.c: Make git-status --ignored more consistent

2012-12-30 Thread Junio C Hamano
Antoine Pelisse apeli...@gmail.com writes:

 By the way, that merges without conflicts with Adam's series, but it
 will not compile as he renamed functions that I'm now using
 (path_excluded() - is_path_excluded() that is).

 By the way, Junio, how do you handle this situation as a maintainer ?
 Do you keep a note to manually make the change every time you remerge
 the series together ? That is the kind of use-case you can't handle
 with git-rerere, and I've been trying to find a solution to it.

I'll finish the write-up on jc/doc-maintainer topic not in a very
distant future, but not today.

In the meantime, the hint is in the use of refs/merge-fix/ hierarchy
in the Reintegrate script found on my 'todo' branch (which I have a
separate clone/checkout of in Meta/ directory in my main working
tree).
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Aw: Re: [PATCH 0/3] Move CodingGuidelines and SubmittingPatches to ./Documentation/technical

2012-12-30 Thread Junio C Hamano
Thomas Ackermann th.ac...@arcor.de writes:

  
 ./Documentation/technical contains not only API documentation but also
 several other documents describing Git implementation topics and thus
 is the place someone wanting to join Git development should look at.

Implementation details are part of API; CG and SP are social not
technical.

Also CG and SP are in the part of the documents that are not
installed for end-users and that is their right place.  They matter
only to the people who grab our source code.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Heads up, an emergency fix for git-cvsimport is coming shortly

2012-12-30 Thread Chris Rorvick
On Sun, Dec 30, 2012 at 1:21 PM, Eric S. Raymond e...@thyrsus.com wrote:
 Bad news: the combination of cvsps and the existing git-cvsimport
 script is seriously broken in both places.  This morning I fixed a
 nasty bug in cvsps's branch detection and shipped 3.3. This is a
 different bug from the broken (and now removed) ancestry-branch
 tracking.

I tried the new version and found I'm unable to import via pserver:

  $ ./cvsps --root :pserver:me@localhost:/cvsroot module
  cvsps: connect error: Connection refused
  cvsps: can't get CVS log data: Connection refused

Running 2.2b1 (the version packaged w/ Fedora 17) with the same
arguments with the addition of --cvs-direct connects OK.  I haven't
taken much time to look into this, so I might be doing something dumb.
 Thought I'd find out if this is a known issue before delving into it.

Also, I'm curious what impact removing the caching from cvsps will
have on incremental imports.  Is there any?

Thanks,

Chris Rorvick
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Heads up, an emergency fix for git-cvsimport is coming shortly

2012-12-30 Thread Eric S. Raymond
Chris Rorvick ch...@rorvick.com:
 I tried the new version and found I'm unable to import via pserver:
 
   $ ./cvsps --root :pserver:me@localhost:/cvsroot module
   cvsps: connect error: Connection refused
   cvsps: can't get CVS log data: Connection refused
 
 Running 2.2b1 (the version packaged w/ Fedora 17) with the same
 arguments with the addition of --cvs-direct connects OK.  I haven't
 taken much time to look into this, so I might be doing something dumb.
  Thought I'd find out if this is a known issue before delving into it.

Your problem does reproduce here. This paragraph from the output of 
'aptitude show cvs' may be relevant:

 This package contains a CVS binary which can act as both client and server,
 although there is no CVS dæmon; to access remote repositories, please use
 :extssh: not :pserver: any more.

It's therefore possible there's something slightly busted about the pserver 
method at the CVS end, and the 3.[23] code trips over it even though the old
code did not.  Note that new cvsps uses cvs-direct mode all the time; the old
support for fetching logs through local CVS commands is gone.

I use 

  cvsps --root :local:$PWD/repo module

for my testing, and that works. I'm up to my ears in finishing up the
test suite and tracking bugs in the repo-analysis code; if you want to
speed the process up, try running a :pserver: fetch with -v on under
both old and new code to see how the protocol transactions differ.

 Also, I'm curious what impact removing the caching from cvsps will
 have on incremental imports.  Is there any?

Not that I know of.  The caching was a performance hack for human viewing
of changesets.
-- 
a href=http://www.catb.org/~esr/;Eric S. Raymond/a
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


cvsps import failure

2012-12-30 Thread Eric S. Raymond
Chris Rorvick ch...@rorvick.com:
 I tried the new version and found I'm unable to import via pserver:

And now I know why.  One of the cvsps fix patches I merged from Yann
Dirson's collection changed the --root option parsing in an
incompatible way.  As soon as I figure out what it's doing I'll
either revert it or document the new behavior.
-- 
a href=http://www.catb.org/~esr/;Eric S. Raymond/a

The price of liberty is, always has been, and always will be blood.  The person
who is not willing to die for his liberty has already lost it to the first
scoundrel who is willing to risk dying to violate that person's liberty.  Are
you free?   -- Andrew Ford
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk

2012-12-30 Thread Paul Mackerras
On Sat, Dec 29, 2012 at 07:16:16PM -0500, Jason Holden wrote:

 When first doing a merge in git-gui, the Visualize Merge button is
 quite helpful to visualize the changes due to a merge.
 But once the merge is complete, there's not a similarly convenient
 way to recreate that merge view in gitk.
 
 This commit adds to gitk the ability to right-click on a merge commit and
 bring up a new gitk window displaying only those commits involved in
 the merge.
 
 When right-clicking on a non-merge commit, this option is grayed out.  This
 patch also supports correct visualization of octopus merges

Thanks for the patch.  I have a couple of comments about it.  First,
the exec command waits for the process to complete, which means that
the initial gitk GUI will be unresponsive until the user quits the
gitk window showing the merge, which could be quite confusing for the
user.

Secondly, gitk already has support for showing multiple views of a
repository, that is, different subsets of the commits.  Wouldn't it be
much better to have your new menu item simply create a new view
showing the merge, rather than creating a whole new window?

Paul.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html