Re: [RFC] git rm -u

2013-01-21 Thread Piotr Krukowiecki
On Sun, Jan 20, 2013 at 7:53 PM, Junio C Hamano gits...@pobox.com wrote:
 Matthieu Moy matthieu@grenoble-inp.fr writes:

 Implementing git rm -u as a tree-wide command would create a
 discrepancy with git add -u. Implementing it as a current directory
 command would make the migration harder if we eventually try to change
 git add -u. Perhaps git rm -u should be forbidden from a
 subdirectory (with an error message pointing to git rm -u :/ and git
 rm -u .), waiting for a possible git add -u change.

 Yeah, that sounds sensible.  Start with a 'git rm -u' is forbidden
 without arguments, give advise to use either . or :/.  And stop
 there.

 The first step of git add -u migration plan would be to warn when
 no argument is given and update all the existing index entries, and
 give the same advise to use either . or :/.  Keep this for three
 cycles: 3 * (8 to 10 weeks per cycle) = 27 weeks ~ 1/2 year.

 The second step would be to forbid git add -u, and keep the
 advise.  That will make it in-line with git rm -u.

Do you mean git add will be disallowed without . or :/ argument?
Or will this change in future and git add without argument will me
whole tree, same as :/ ?

--
Piotr Krukowiecki
--
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] mergetools: Add tortoisegitmerge helper

2013-01-21 Thread Sven Strickroth
- The TortoiseGit team renamed TortoiseMerge.exe to TortoiseGitMerge.exe
  (starting with 1.8.0) in order to make clear that this one has special
  support for git and prevent confusion with the TortoiseSVN TortoiseMerge
  version.
- The tortoisemerge mergetool does not work with filenames which have
  a space in it. Fixing this required changes in git and also in
  TortoiseGitMerge; see https://github.com/msysgit/msysgit/issues/57.

The new tortoisegitmerge helper was added so that people can still use
TortoiseMerge from TortoiseSVN (and older TortoiseGit versions).

Signed-off-by: Sven Strickroth em...@cs-ware.de
Idea-by: Sebastian Schuberth sschube...@gmail.com
---
 Documentation/diff-config.txt  |  4 ++--
 Documentation/git-mergetool.txt|  4 ++--
 Documentation/merge-config.txt |  6 +++---
 contrib/completion/git-completion.bash |  2 +-
 git-mergetool--lib.sh  |  2 +-
 mergetools/tortoisegitmerge| 17 +
 6 files changed, 26 insertions(+), 9 deletions(-)
 create mode 100644 mergetools/tortoisegitmerge

diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt
index 4314ad0..13cbe5b 100644
--- a/Documentation/diff-config.txt
+++ b/Documentation/diff-config.txt
@@ -151,7 +151,7 @@ diff.driver.cachetextconv::
 diff.tool::
The diff tool to be used by linkgit:git-difftool[1].  This
option overrides `merge.tool`, and has the same valid built-in
-   values as `merge.tool` minus tortoisemerge and plus
-   kompare.  Any other value is treated as a custom diff tool,
+   values as `merge.tool` minus tortoisemerge/tortoisegitmerge and
+   plus kompare.  Any other value is treated as a custom diff tool,
and there must be a corresponding `difftool.tool.cmd`
option.
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 6b563c5..a80cccd 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -28,8 +28,8 @@ OPTIONS
 --tool=tool::
Use the merge resolution program specified by tool.
Valid values include emerge, gvimdiff, kdiff3,
-   meld, vimdiff, and tortoisemerge. Run `git mergetool --tool-help`
-   for the list of valid tool settings.
+   meld, vimdiff, tortoisegitmerge, and tortoisemerge. Run
+   `git mergetool --tool-help` for the list of valid tool settings.
 +
 If a merge resolution program is not specified, 'git mergetool'
 will use the configuration variable `merge.tool`.  If the
diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt
index 9bb4956..a047646 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt
@@ -55,9 +55,9 @@ merge.tool::
Controls which merge resolution program is used by
linkgit:git-mergetool[1].  Valid built-in values are: araxis,
bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld,
-   opendiff, p4merge, tkdiff, tortoisemerge, vimdiff
-   and xxdiff.  Any other value is treated is custom merge tool
-   and there must be a corresponding mergetool.tool.cmd option.
+   opendiff, p4merge, tkdiff, tortoisegitmerge, tortoisemerge,
+   vimdiff and xxdiff.  Any other value is treated is custom merge
+   tool and there must be a corresponding mergetool.tool.cmd option.
 
 merge.verbosity::
Controls the amount of output shown by the recursive merge
diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 14dd5e7..1557d54 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1345,7 +1345,7 @@ _git_mergetool ()
 {
case $cur in
--tool=*)
-   __gitcomp $__git_mergetools_common tortoisemerge  
${cur##--tool=}
+   __gitcomp $__git_mergetools_common tortoisegitmerge 
tortoisemerge  ${cur##--tool=}
return
;;
--*)
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index f013a03..47183ef 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -150,7 +150,7 @@ run_merge_cmd () {
 list_merge_tool_candidates () {
if merge_mode
then
-   tools=tortoisemerge
+   tools=tortoisegitmerge tortoisemerge
else
tools=kompare
fi
diff --git a/mergetools/tortoisegitmerge b/mergetools/tortoisegitmerge
new file mode 100644
index 000..5b802a7
--- /dev/null
+++ b/mergetools/tortoisegitmerge
@@ -0,0 +1,17 @@
+can_diff () {
+   return 1
+}
+
+merge_cmd () {
+   if $base_present
+   then
+   touch $BACKUP
+   $merge_tool_path \
+   -base=$BASE -mine=$LOCAL \
+   -theirs=$REMOTE -merged=$MERGED
+   check_unchanged
+   else
+   echo TortoiseGitMerge cannot be used without a base 12
+   return 1
+   fi
+}
-- 
1.8.0.msysgit.0

--
To 

[PATCH] mergetools: Add tortoisegitmerge helper

2013-01-21 Thread Sven Strickroth
- The TortoiseGit team renamed TortoiseMerge.exe to TortoiseGitMerge.exe
  (starting with 1.8.0) in order to make clear that this one has special
  support for git and prevent confusion with the TortoiseSVN TortoiseMerge
  version.
- The tortoisemerge mergetool does not work with filenames which have
  a space in it. Fixing this required changes in git and also in
  TortoiseGitMerge; see https://github.com/msysgit/msysgit/issues/57.

The new tortoisegitmerge helper was added so that people can still use
TortoiseMerge from TortoiseSVN (and older TortoiseGit versions).

Signed-off-by: Sven Strickroth em...@cs-ware.de
Idea-by: Sebastian Schuberth sschube...@gmail.com
---
 Documentation/diff-config.txt  |  4 ++--
 Documentation/git-mergetool.txt|  4 ++--
 Documentation/merge-config.txt |  6 +++---
 contrib/completion/git-completion.bash |  2 +-
 git-mergetool--lib.sh  |  2 +-
 mergetools/tortoisegitmerge| 17 +
 6 files changed, 26 insertions(+), 9 deletions(-)
 create mode 100644 mergetools/tortoisegitmerge

diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt
index 4314ad0..13cbe5b 100644
--- a/Documentation/diff-config.txt
+++ b/Documentation/diff-config.txt
@@ -151,7 +151,7 @@ diff.driver.cachetextconv::
 diff.tool::
The diff tool to be used by linkgit:git-difftool[1].  This
option overrides `merge.tool`, and has the same valid built-in
-   values as `merge.tool` minus tortoisemerge and plus
-   kompare.  Any other value is treated as a custom diff tool,
+   values as `merge.tool` minus tortoisemerge/tortoisegitmerge and
+   plus kompare.  Any other value is treated as a custom diff tool,
and there must be a corresponding `difftool.tool.cmd`
option.
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.txt
index 6b563c5..a80cccd 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.txt
@@ -28,8 +28,8 @@ OPTIONS
 --tool=tool::
Use the merge resolution program specified by tool.
Valid values include emerge, gvimdiff, kdiff3,
-   meld, vimdiff, and tortoisemerge. Run `git mergetool --tool-help`
-   for the list of valid tool settings.
+   meld, vimdiff, tortoisegitmerge, and tortoisemerge. Run
+   `git mergetool --tool-help` for the list of valid tool settings.
 +
 If a merge resolution program is not specified, 'git mergetool'
 will use the configuration variable `merge.tool`.  If the
diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt
index 9bb4956..a047646 100644
--- a/Documentation/merge-config.txt
+++ b/Documentation/merge-config.txt
@@ -55,9 +55,9 @@ merge.tool::
Controls which merge resolution program is used by
linkgit:git-mergetool[1].  Valid built-in values are: araxis,
bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld,
-   opendiff, p4merge, tkdiff, tortoisemerge, vimdiff
-   and xxdiff.  Any other value is treated is custom merge tool
-   and there must be a corresponding mergetool.tool.cmd option.
+   opendiff, p4merge, tkdiff, tortoisegitmerge, tortoisemerge,
+   vimdiff and xxdiff.  Any other value is treated is custom merge
+   tool and there must be a corresponding mergetool.tool.cmd option.
 
 merge.verbosity::
Controls the amount of output shown by the recursive merge
diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 14dd5e7..1557d54 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1345,7 +1345,7 @@ _git_mergetool ()
 {
case $cur in
--tool=*)
-   __gitcomp $__git_mergetools_common tortoisemerge  
${cur##--tool=}
+   __gitcomp $__git_mergetools_common tortoisegitmerge 
tortoisemerge  ${cur##--tool=}
return
;;
--*)
diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
index f013a03..47183ef 100644
--- a/git-mergetool--lib.sh
+++ b/git-mergetool--lib.sh
@@ -150,7 +150,7 @@ run_merge_cmd () {
 list_merge_tool_candidates () {
if merge_mode
then
-   tools=tortoisemerge
+   tools=tortoisegitmerge tortoisemerge
else
tools=kompare
fi
diff --git a/mergetools/tortoisegitmerge b/mergetools/tortoisegitmerge
new file mode 100644
index 000..5b802a7
--- /dev/null
+++ b/mergetools/tortoisegitmerge
@@ -0,0 +1,17 @@
+can_diff () {
+   return 1
+}
+
+merge_cmd () {
+   if $base_present
+   then
+   touch $BACKUP
+   $merge_tool_path \
+   -base $BASE -mine $LOCAL \
+   -theirs $REMOTE -merged $MERGED
+   check_unchanged
+   else
+   echo TortoiseGitMerge cannot be used without a base 12
+   return 1
+   fi
+}
-- 
1.8.0.msysgit.0
--
To 

Re: [RFC] git rm -u

2013-01-21 Thread Matthieu Moy
Piotr Krukowiecki piotr.krukowie...@gmail.com writes:

 Do you mean git add will be disallowed without . or :/ argument?
 Or will this change in future and git add without argument will me
 whole tree, same as :/ ?

Let's talk conditional, not future, for now.

If the idea is to change the semantics without argument, it has to be
done carefully, and implies disallowing the argumentless version for a
while (or some better idea) to avoid confusion.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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 v2 00/10] unify appending of sob

2013-01-21 Thread Brandon Casey
Here's version 2 of the unify-appending-of-sob series.  Hopefully this
addresses the comments made on the first series:

   http://thread.gmane.org/gmane.comp.version-control.git/210390

The main difference is that the detection of the (cherry picked from ...)
line has been relaxed, and the modifications to log-tree.c have been dropped.

Here's the inter-diff of this series against the original series, both built
on top of 2d242fb3fc19fc9ba046accdd9210be8b9913f64 (the actual series in the
following emails is of course built on top of master).

diff --git a/revision.h b/revision.h
index 435a60b..d20defa 100644
--- a/revision.h
+++ b/revision.h
@@ -137,7 +137,7 @@ struct rev_info {
int numbered_files;
char*message_id;
struct string_list *ref_message_ids;
-   int  add_signoff;
+   int add_signoff;
const char  *extra_headers;
const char  *log_reencode;
const char  *subject_prefix;
diff --git a/sequencer.c b/sequencer.c
index eb93dd6..54b3cb9 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -36,13 +36,18 @@ static int is_rfc2822_line(const char *buf, int len)
return 1;
 }
 
-static int is_cherry_pick_from_line(const char *buf, int len)
+static int is_cherry_picked_from_line(const char *buf, int len)
 {
-   return (strlen(cherry_picked_prefix) + 41) = len 
-   !prefixcmp(buf, cherry_picked_prefix);
+   /*
+* We only care that it looks roughly like (cherry picked from ...)
+*/
+   return !prefixcmp(buf, cherry_picked_prefix) 
+   (buf[len - 1] == ')' ||
+(buf[len - 1] == '\n'  buf[len - 2] == ')'));
 }
 
-/* Returns 0 for non-conforming footer
+/*
+ * Returns 0 for non-conforming footer
  * Returns 1 for conforming footer
  * Returns 2 when sob exists within conforming footer
  * Returns 3 when sob exists within conforming footer as last entry
@@ -51,7 +56,7 @@ static int has_conforming_footer(struct strbuf *sb, struct 
strbuf *sob,
int ignore_footer)
 {
int hit = 0;
-   int i, k = 0;
+   int i, k;
int len = sb-len - ignore_footer;
const char *buf = sb-buf;
int found_sob = 0;
@@ -76,12 +81,13 @@ static int has_conforming_footer(struct strbuf *sb, struct 
strbuf *sob,
; /* do nothing */
k++;
 
-   found_rfc2822 = is_rfc2822_line(buf+i, k-i);
+   found_rfc2822 = is_rfc2822_line(buf + i, k - i);
if (found_rfc2822  sob 
-   !strncasecmp(buf+i, sob-buf, sob-len))
+   !strncmp(buf + i, sob-buf, sob-len))
found_sob = k;
 
-   if (!(found_rfc2822 || is_cherry_pick_from_line(buf+i, k-i)))
+   if (!(found_rfc2822 ||
+   is_cherry_picked_from_line(buf + i, k - i)))
return 0;
}
if (found_sob == i)
@@ -1103,11 +1109,20 @@ void append_signoff(struct strbuf *msgbuf, int 
ignore_footer, int no_dup_sob)
strbuf_addch(sob, '\n');
for (i = msgbuf-len - 1 - ignore_footer; i  0  msgbuf-buf[i - 1] 
!= '\n'; i--)
; /* do nothing */
-   if (msgbuf-buf[i] != '\n'  (!i || !(has_footer =
-   has_conforming_footer(msgbuf, sob, ignore_footer
-   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1);
+
+   if (msgbuf-buf[i] != '\n') {
+   if (i)
+   has_footer = has_conforming_footer(msgbuf, sob,
+   ignore_footer);
+
+   if (!has_footer)
+   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0,
+   \n, 1);
+   }
+
if (has_footer != 3  (!no_dup_sob || has_footer != 2))
strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0,
sob.buf, sob.len);
+
strbuf_release(sob);
 }
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index c53dc4b..6d00e43 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -1211,16 +1211,17 @@ subject
 
 body
 
+Reviewed-id: Noone
 Tested-by: my@house
 Change-id: Ideadbeef
 Signed-off-by: C O Mitter commit...@example.com
-BUG: 1234
+Bug: 1234
 EOF
cat expected \EOF 
 4:Subject: [PATCH] subject
 8:
 10:
-13:Signed-off-by: C O Mitter commit...@example.com
+14:Signed-off-by: C O Mitter commit...@example.com
 EOF
test_cmp expected actual
 '

Brandon Casey (8):
  sequencer.c: remove broken support for rfc2822 continuation in footer
  t/test-lib-functions.sh: allow to specify the tag name to test_commit
  t/t3511: add some tests of 'cherry-pick -s' functionality
  sequencer.c: recognize (cherry picked from ... as part of s-o-b
footer
  sequencer.c: always separate (cherry picked from from commit body
  sequencer.c: teach append_signoff how to detect 

[PATCH v2 01/10] sequencer.c: remove broken support for rfc2822 continuation in footer

2013-01-21 Thread Brandon Casey
Commit c1e01b0c generalized the detection of the last paragraph
signed-off-by footer and used rfc2822 as a guideline.  Support for rfc2822
style continuation lines was also implemented, but not correctly, so it has
never detected a line beginning with space or tab as a continuation of the
previous line.

Since a commit message is not governed by the line length limits imposed
by rfc2822 for email messages, and it does not seem like this functionality
would produce better commit messages anyway, let's remove this broken
functionality.

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 sequencer.c | 6 --
 1 file changed, 6 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index aef5e8a..fe25ef4 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -1027,7 +1027,6 @@ static int ends_rfc2822_footer(struct strbuf *sb, int 
ignore_footer)
int hit = 0;
int i, j, k;
int len = sb-len - ignore_footer;
-   int first = 1;
const char *buf = sb-buf;
 
for (i = len - 1; i  0; i--) {
@@ -1044,11 +1043,6 @@ static int ends_rfc2822_footer(struct strbuf *sb, int 
ignore_footer)
; /* do nothing */
k++;
 
-   if ((buf[k] == ' ' || buf[k] == '\t')  !first)
-   continue;
-
-   first = 0;
-
for (j = 0; i + j  len; j++) {
ch = buf[i + j];
if (ch == ':')
-- 
1.8.1.1.252.gdb33759

--
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 v2 02/10] t/test-lib-functions.sh: allow to specify the tag name to test_commit

2013-01-21 Thread Brandon Casey
The message part of test_commit() may not be appropriate for a tag name.
So let's allow test_commit to accept a fourth argument to specify the tag
name.

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 t/test-lib-functions.sh | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index fa62d01..c601918 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -135,12 +135,13 @@ test_pause () {
fi
 }
 
-# Call test_commit with the arguments message [file [contents]]
+# Call test_commit with the arguments message [file [contents [tag]]]
 #
 # This will commit a file with the given contents and the given commit
-# message.  It will also add a tag with message as name.
+# message.  It will also add a tag with message as name unless tag is
+# given.
 #
-# Both file and contents default to message.
+# file, contents, and tag all default to message.
 
 test_commit () {
notick= 
@@ -168,7 +169,7 @@ test_commit () {
test_tick
fi 
git commit $signoff -m $1 
-   git tag $1
+   git tag ${4:-$1}
 }
 
 # Call test_merge with the arguments message commit, where commit
-- 
1.8.1.1.252.gdb33759

--
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 v2 03/10] t/t3511: add some tests of 'cherry-pick -s' functionality

2013-01-21 Thread Brandon Casey
Add some tests to ensure that 'cherry-pick -s' operates in the following
manner:

   * Inserts a blank line before appending a s-o-b to a commit message that
 does not contain a s-o-b footer

   * Does not mistake first line subject: description as a s-o-b footer

   * Does not mistake single word message body as conforming to rfc2822

   * Appends a s-o-b when last s-o-b in footer does not match committer
 s-o-b, even when committer's s-o-b exists elsewhere in footer.

   * Does not append a s-o-b when last s-o-b matches committer s-o-b

   * Correctly detects a non-conforming footer containing a mix of s-o-b
 like elements and s-o-b elements. (marked expect failure)

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 t/t3511-cherry-pick-x.sh | 111 +++
 1 file changed, 111 insertions(+)
 create mode 100755 t/t3511-cherry-pick-x.sh

diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh
new file mode 100755
index 000..a6c4168
--- /dev/null
+++ b/t/t3511-cherry-pick-x.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+
+test_description='Test cherry-pick -x and -s'
+
+. ./test-lib.sh
+
+pristine_detach () {
+   git cherry-pick --quit 
+   git checkout -f $1^0 
+   git read-tree -u --reset HEAD 
+   git clean -d -f -f -q -x
+}
+
+mesg_one_line='base: commit message'
+
+mesg_no_footer=$mesg_one_line
+
+OneWordBodyThatsNotA-S-o-B
+
+mesg_with_footer=$mesg_no_footer
+
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+Signed-off-by: A.U. Thor aut...@example.com
+Signed-off-by: B.U. Thor but...@example.com
+
+mesg_broken_footer=$mesg_no_footer
+
+Signed-off-by: B.U. Thor but...@example.com
+Not a valid footer element
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+
+mesg_with_footer_sob=$mesg_with_footer
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+
+
+test_expect_success setup '
+   git config advice.detachedhead false 
+   echo unrelated unrelated 
+   git add unrelated 
+   test_commit initial foo a 
+   test_commit $mesg_one_line foo b mesg-one-line 
+   git reset --hard initial 
+   test_commit $mesg_no_footer foo b mesg-no-footer 
+   git reset --hard initial 
+   test_commit $mesg_broken_footer foo b mesg-broken-footer 
+   git reset --hard initial 
+   test_commit $mesg_with_footer foo b mesg-with-footer 
+   git reset --hard initial 
+   test_commit $mesg_with_footer_sob foo b mesg-with-footer-sob 
+   pristine_detach initial 
+   test_commit conflicting unrelated
+'
+
+test_expect_success 'cherry-pick -s inserts blank line after one line subject' 
'
+   pristine_detach initial 
+   git cherry-pick -s mesg-one-line 
+   cat -EOF expect 
+   $mesg_one_line
+
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_failure 'cherry-pick -s inserts blank line after non-conforming 
footer' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-broken-footer 
+   cat -EOF expect 
+   $mesg_broken_footer
+
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s inserts blank line when conforming footer 
not found' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-no-footer 
+   cat -EOF expect 
+   $mesg_no_footer
+
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s adds sob when last sob doesnt match 
committer' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-with-footer 
+   cat -EOF expect 
+   $mesg_with_footer
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s refrains from adding duplicate trailing 
sob' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-with-footer-sob 
+   cat -EOF expect 
+   $mesg_with_footer_sob
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_done
-- 
1.8.1.1.252.gdb33759

--
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: git interactive rebase 'consume' command

2013-01-21 Thread Stephen Kelly
Junio C Hamano wrote:

 Stephen Kelly steve...@gmail.com writes:

 One scenario is something like this:

  Start with a clean HEAD (always a good idea :) )
  hack hack hack
  make multiple commits
  realize that a hunk you committed in an early patch belongs in a later
  one. use git rebase -i to fix it.

 Is that more clear?
 
 Not really.

I think there are other scenarios, but I guess this won't happen anyway.

Thanks,

Steve.

--
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 v2 04/10] sequencer.c: recognize (cherry picked from ... as part of s-o-b footer

2013-01-21 Thread Brandon Casey
When 'cherry-pick -s' is used to append a signed-off-by line to a cherry
picked commit, it does not currently detect the (cherry picked from...
that may have been appended by a previous 'cherry-pick -x' as part of the
s-o-b footer and it will insert a blank line before appending a new s-o-b.

Let's detect (cherry picked from...) as part of the footer so that we
will produce this:

   Signed-off-by: A U Thor aut...@example.com
   (cherry picked from da39a3ee5e6b4b0d3255bfef95601890afd80709)
   Signed-off-by: C O Mmitter commit...@example.com

instead of this:

   Signed-off-by: A U Thor aut...@example.com
   (cherry picked from da39a3ee5e6b4b0d3255bfef95601890afd80709)

   Signed-off-by: C O Mmitter commit...@example.com

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 sequencer.c  | 46 
 t/t3511-cherry-pick-x.sh | 55 
 2 files changed, 88 insertions(+), 13 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index fe25ef4..fe76a1d 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -18,6 +18,7 @@
 #define GIT_REFLOG_ACTION GIT_REFLOG_ACTION
 
 const char sign_off_header[] = Signed-off-by: ;
+static const char cherry_picked_prefix[] = (cherry picked from commit ;
 
 static void remove_sequencer_state(void)
 {
@@ -496,7 +497,7 @@ static int do_pick_commit(struct commit *commit, struct 
replay_opts *opts)
}
 
if (opts-record_origin) {
-   strbuf_addstr(msgbuf, (cherry picked from commit );
+   strbuf_addstr(msgbuf, cherry_picked_prefix);
strbuf_addstr(msgbuf, 
sha1_to_hex(commit-object.sha1));
strbuf_addstr(msgbuf, )\n);
}
@@ -1021,11 +1022,36 @@ int sequencer_pick_revisions(struct replay_opts *opts)
return pick_commits(todo_list, opts);
 }
 
-static int ends_rfc2822_footer(struct strbuf *sb, int ignore_footer)
+static int is_rfc2822_line(const char *buf, int len)
+{
+   int i;
+
+   for (i = 0; i  len; i++) {
+   int ch = buf[i];
+   if (ch == ':')
+   break;
+   if (isalnum(ch) || (ch == '-'))
+   continue;
+   return 0;
+   }
+
+   return 1;
+}
+
+static int is_cherry_picked_from_line(const char *buf, int len)
+{
+   /*
+* We only care that it looks roughly like (cherry picked from ...)
+*/
+   return !prefixcmp(buf, cherry_picked_prefix) 
+   (buf[len - 1] == ')' ||
+(buf[len - 1] == '\n'  buf[len - 2] == ')'));
+}
+
+static int has_conforming_footer(struct strbuf *sb, int ignore_footer)
 {
-   int ch;
int hit = 0;
-   int i, j, k;
+   int i, k;
int len = sb-len - ignore_footer;
const char *buf = sb-buf;
 
@@ -1043,15 +1069,9 @@ static int ends_rfc2822_footer(struct strbuf *sb, int 
ignore_footer)
; /* do nothing */
k++;
 
-   for (j = 0; i + j  len; j++) {
-   ch = buf[i + j];
-   if (ch == ':')
-   break;
-   if (isalnum(ch) ||
-   (ch == '-'))
-   continue;
+   if (!(is_rfc2822_line(buf + i, k - i) ||
+   is_cherry_picked_from_line(buf + i, k - i)))
return 0;
-   }
}
return 1;
 }
@@ -1068,7 +1088,7 @@ void append_signoff(struct strbuf *msgbuf, int 
ignore_footer)
for (i = msgbuf-len - 1 - ignore_footer; i  0  msgbuf-buf[i - 1] 
!= '\n'; i--)
; /* do nothing */
if (prefixcmp(msgbuf-buf + i, sob.buf)) {
-   if (!i || !ends_rfc2822_footer(msgbuf, ignore_footer))
+   if (!i || !has_conforming_footer(msgbuf, ignore_footer))
strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, 
\n, 1);
strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, sob.buf, 
sob.len);
}
diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh
index a6c4168..32c0bb1 100755
--- a/t/t3511-cherry-pick-x.sh
+++ b/t/t3511-cherry-pick-x.sh
@@ -32,6 +32,10 @@ Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
 mesg_with_footer_sob=$mesg_with_footer
 Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
 
+mesg_with_cherry_footer=$mesg_with_footer_sob
+(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
+Tested-by: C.U. Thor cut...@example.com
+
 
 test_expect_success setup '
git config advice.detachedhead false 
@@ -47,6 +51,8 @@ test_expect_success setup '
test_commit $mesg_with_footer foo b mesg-with-footer 
git reset --hard initial 
test_commit $mesg_with_footer_sob foo b mesg-with-footer-sob 
+   git reset --hard initial 
+   test_commit $mesg_with_cherry_footer foo b 

[PATCH v2 05/10] sequencer.c: always separate (cherry picked from from commit body

2013-01-21 Thread Brandon Casey
Start treating the (cherry picked from line added by cherry-pick -x
the same way that the s-o-b lines are treated.  Namely, separate them
from the main commit message body with an empty line.

Introduce tests to test this functionality.

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 sequencer.c  | 114 +--
 t/t3511-cherry-pick-x.sh |  53 ++
 2 files changed, 113 insertions(+), 54 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index fe76a1d..163dc12 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -20,6 +20,64 @@
 const char sign_off_header[] = Signed-off-by: ;
 static const char cherry_picked_prefix[] = (cherry picked from commit ;
 
+static int is_rfc2822_line(const char *buf, int len)
+{
+   int i;
+
+   for (i = 0; i  len; i++) {
+   int ch = buf[i];
+   if (ch == ':')
+   break;
+   if (isalnum(ch) || (ch == '-'))
+   continue;
+   return 0;
+   }
+
+   return 1;
+}
+
+static int is_cherry_picked_from_line(const char *buf, int len)
+{
+   /*
+* We only care that it looks roughly like (cherry picked from ...)
+*/
+   return !prefixcmp(buf, cherry_picked_prefix) 
+   (buf[len - 1] == ')' ||
+(buf[len - 1] == '\n'  buf[len - 2] == ')'));
+}
+
+static int has_conforming_footer(struct strbuf *sb, int ignore_footer)
+{
+   int hit = 0;
+   int i, k;
+   int len = sb-len - ignore_footer;
+   const char *buf = sb-buf;
+
+   for (i = len - 1; i  0; i--) {
+   if (hit  buf[i] == '\n')
+   break;
+   hit = (buf[i] == '\n');
+   }
+
+   /* require at least one blank line */
+   if (!hit || buf[i] != '\n')
+   return 0;
+
+   while (i  len - 1  buf[i] == '\n')
+   i++;
+
+   for (; i  len; i = k) {
+   for (k = i; k  len  buf[k] != '\n'; k++)
+   ; /* do nothing */
+   k++;
+
+   if (!(is_rfc2822_line(buf + i, k - i) ||
+   is_cherry_picked_from_line(buf + i, k - i)))
+   return 0;
+   }
+   return 1;
+}
+
 static void remove_sequencer_state(void)
 {
struct strbuf seq_dir = STRBUF_INIT;
@@ -497,6 +555,8 @@ static int do_pick_commit(struct commit *commit, struct 
replay_opts *opts)
}
 
if (opts-record_origin) {
+   if (!has_conforming_footer(msgbuf, 0))
+   strbuf_addch(msgbuf, '\n');
strbuf_addstr(msgbuf, cherry_picked_prefix);
strbuf_addstr(msgbuf, 
sha1_to_hex(commit-object.sha1));
strbuf_addstr(msgbuf, )\n);
@@ -1022,60 +1082,6 @@ int sequencer_pick_revisions(struct replay_opts *opts)
return pick_commits(todo_list, opts);
 }
 
-static int is_rfc2822_line(const char *buf, int len)
-{
-   int i;
-
-   for (i = 0; i  len; i++) {
-   int ch = buf[i];
-   if (ch == ':')
-   break;
-   if (isalnum(ch) || (ch == '-'))
-   continue;
-   return 0;
-   }
-
-   return 1;
-}
-
-static int is_cherry_picked_from_line(const char *buf, int len)
-{
-   /*
-* We only care that it looks roughly like (cherry picked from ...)
-*/
-   return !prefixcmp(buf, cherry_picked_prefix) 
-   (buf[len - 1] == ')' ||
-(buf[len - 1] == '\n'  buf[len - 2] == ')'));
-}
-
-static int has_conforming_footer(struct strbuf *sb, int ignore_footer)
-{
-   int hit = 0;
-   int i, k;
-   int len = sb-len - ignore_footer;
-   const char *buf = sb-buf;
-
-   for (i = len - 1; i  0; i--) {
-   if (hit  buf[i] == '\n')
-   break;
-   hit = (buf[i] == '\n');
-   }
-
-   while (i  len - 1  buf[i] == '\n')
-   i++;
-
-   for (; i  len; i = k) {
-   for (k = i; k  len  buf[k] != '\n'; k++)
-   ; /* do nothing */
-   k++;
-
-   if (!(is_rfc2822_line(buf + i, k - i) ||
-   is_cherry_picked_from_line(buf + i, k - i)))
-   return 0;
-   }
-   return 1;
-}
-
 void append_signoff(struct strbuf *msgbuf, int ignore_footer)
 {
struct strbuf sob = STRBUF_INIT;
diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh
index 32c0bb1..9dd6d5d 100755
--- a/t/t3511-cherry-pick-x.sh
+++ b/t/t3511-cherry-pick-x.sh
@@ -57,6 +57,19 @@ test_expect_success setup '
test_commit conflicting unrelated
 '
 
+test_expect_success 'cherry-pick -x inserts blank line after one line subject' 
'
+   pristine_detach initial 
+   sha1=`git rev-parse mesg-one-line^0` 
+   git cherry-pick -x mesg-one-line 
+   

[PATCH v2 06/10] sequencer.c: teach append_signoff how to detect duplicate s-o-b

2013-01-21 Thread Brandon Casey
Teach append_signoff how to detect a duplicate s-o-b in the commit footer.
This is in preparation to unify the append_signoff implementations in
log-tree.c and sequencer.c.

Fixes test in t3511.

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 builtin/commit.c |  2 +-
 sequencer.c  | 46 --
 sequencer.h  |  2 +-
 t/t3511-cherry-pick-x.sh |  2 +-
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/builtin/commit.c b/builtin/commit.c
index 7c2a3d4..081ff66 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -700,7 +700,7 @@ static int prepare_to_commit(const char *index_file, const 
char *prefix,
previous = eol;
}
 
-   append_signoff(sb, ignore_footer);
+   append_signoff(sb, ignore_footer, 0);
}
 
if (fwrite(sb.buf, 1, sb.len, s-fp)  sb.len)
diff --git a/sequencer.c b/sequencer.c
index 163dc12..d4a2ece 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -46,12 +46,20 @@ static int is_cherry_picked_from_line(const char *buf, int 
len)
 (buf[len - 1] == '\n'  buf[len - 2] == ')'));
 }
 
-static int has_conforming_footer(struct strbuf *sb, int ignore_footer)
+/*
+ * Returns 0 for non-conforming footer
+ * Returns 1 for conforming footer
+ * Returns 2 when sob exists within conforming footer
+ * Returns 3 when sob exists within conforming footer as last entry
+ */
+static int has_conforming_footer(struct strbuf *sb, struct strbuf *sob,
+   int ignore_footer)
 {
int hit = 0;
int i, k;
int len = sb-len - ignore_footer;
const char *buf = sb-buf;
+   int found_sob = 0;
 
for (i = len - 1; i  0; i--) {
if (hit  buf[i] == '\n')
@@ -67,14 +75,25 @@ static int has_conforming_footer(struct strbuf *sb, int 
ignore_footer)
i++;
 
for (; i  len; i = k) {
+   int found_rfc2822;
+
for (k = i; k  len  buf[k] != '\n'; k++)
; /* do nothing */
k++;
 
-   if (!(is_rfc2822_line(buf + i, k - i) ||
+   found_rfc2822 = is_rfc2822_line(buf + i, k - i);
+   if (found_rfc2822  sob 
+   !strncmp(buf + i, sob-buf, sob-len))
+   found_sob = k;
+
+   if (!(found_rfc2822 ||
is_cherry_picked_from_line(buf + i, k - i)))
return 0;
}
+   if (found_sob == i)
+   return 3;
+   if (found_sob)
+   return 2;
return 1;
 }
 
@@ -296,7 +315,7 @@ static int do_recursive_merge(struct commit *base, struct 
commit *next,
rollback_lock_file(index_lock);
 
if (opts-signoff)
-   append_signoff(msgbuf, 0);
+   append_signoff(msgbuf, 0, 0);
 
if (!clean) {
int i;
@@ -555,7 +574,7 @@ static int do_pick_commit(struct commit *commit, struct 
replay_opts *opts)
}
 
if (opts-record_origin) {
-   if (!has_conforming_footer(msgbuf, 0))
+   if (!has_conforming_footer(msgbuf, NULL, 0))
strbuf_addch(msgbuf, '\n');
strbuf_addstr(msgbuf, cherry_picked_prefix);
strbuf_addstr(msgbuf, 
sha1_to_hex(commit-object.sha1));
@@ -1082,9 +1101,10 @@ int sequencer_pick_revisions(struct replay_opts *opts)
return pick_commits(todo_list, opts);
 }
 
-void append_signoff(struct strbuf *msgbuf, int ignore_footer)
+void append_signoff(struct strbuf *msgbuf, int ignore_footer, int no_dup_sob)
 {
struct strbuf sob = STRBUF_INIT;
+   int has_footer = 0;
int i;
 
strbuf_addstr(sob, sign_off_header);
@@ -1093,10 +1113,16 @@ void append_signoff(struct strbuf *msgbuf, int 
ignore_footer)
strbuf_addch(sob, '\n');
for (i = msgbuf-len - 1 - ignore_footer; i  0  msgbuf-buf[i - 1] 
!= '\n'; i--)
; /* do nothing */
-   if (prefixcmp(msgbuf-buf + i, sob.buf)) {
-   if (!i || !has_conforming_footer(msgbuf, ignore_footer))
-   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, 
\n, 1);
-   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, sob.buf, 
sob.len);
-   }
+
+   if (i)
+   has_footer = has_conforming_footer(msgbuf, sob, ignore_footer);
+
+   if (!has_footer)
+   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1);
+
+   if (has_footer != 3  (!no_dup_sob || has_footer != 2))
+   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0,
+   sob.buf, sob.len);
+
strbuf_release(sob);
 }
diff --git a/sequencer.h b/sequencer.h
index 9d57d57..c4c7132 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -48,6 +48,6 @@ int sequencer_pick_revisions(struct replay_opts *opts);
 
 

[PATCH v2 07/10] sequencer.c: teach append_signoff to avoid adding a duplicate newline

2013-01-21 Thread Brandon Casey
Teach append_signoff to detect whether a blank line exists at the position
that the signed-off-by line will be added, and avoid adding an additional
one if one already exists.  This is necessary to allow format-patch to add a
s-o-b to a patch with no commit message without adding an extra newline.  A
following patch will make format-patch use this function rather than the
append_signoff implementation inside log-tree.c.

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 sequencer.c | 14 +-
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sequencer.c b/sequencer.c
index d4a2ece..d51e6f2 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -1114,11 +1114,15 @@ void append_signoff(struct strbuf *msgbuf, int 
ignore_footer, int no_dup_sob)
for (i = msgbuf-len - 1 - ignore_footer; i  0  msgbuf-buf[i - 1] 
!= '\n'; i--)
; /* do nothing */
 
-   if (i)
-   has_footer = has_conforming_footer(msgbuf, sob, ignore_footer);
-
-   if (!has_footer)
-   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1);
+   if (msgbuf-buf[i] != '\n') {
+   if (i)
+   has_footer = has_conforming_footer(msgbuf, sob,
+   ignore_footer);
+
+   if (!has_footer)
+   strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0,
+   \n, 1);
+   }
 
if (has_footer != 3  (!no_dup_sob || has_footer != 2))
strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0,
-- 
1.8.1.1.252.gdb33759

--
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 v2 08/10] t4014: more tests about appending s-o-b lines

2013-01-21 Thread Brandon Casey
From: Nguyễn Thái Ngọc Duy pclo...@gmail.com

[bc: Squash the tests from Duy's original unify-appending-sob series.

 Fix test 90 signoff: some random signoff-alike and mark as failing.
 Correct behavior should insert a blank line after message body and
 signed-off-by.

 Add two additional tests:

   1. failure to detect non-conforming elements in the footer when last
  line matches committer's s-o-b.
   2. ensure various s-o-b -like elements in the footer are handled as
  conforming. e.g. Change-id: I or Bug: 1234
]

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Signed-off-by: Brandon Casey bca...@nvidia.com
---
 t/t4014-format-patch.sh | 242 
 1 file changed, 242 insertions(+)

diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 7fa3647..3868cef 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -1021,4 +1021,246 @@ test_expect_success 'cover letter using branch 
description (6)' '
grep hello actual /dev/null
 '
 
+append_signoff()
+{
+   C=`git commit-tree HEAD^^{tree} -p HEAD` 
+   git format-patch --stdout --signoff ${C}^..${C} |
+   tee append_signoff.patch |
+   sed -n 1,/^---$/p |
+   grep -n -E ^Subject|Sign|^$
+}
+
+test_expect_success 'signoff: commit with no body' '
+   append_signoff /dev/null actual 
+   cat \EOF | sed s/EOL$// expected 
+4:Subject: [PATCH] EOL
+8:
+9:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: commit with only subject' '
+   echo subject | append_signoff actual 
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+9:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: commit with only subject that does not end with 
NL' '
+   printf subject | append_signoff actual 
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+9:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: no existing signoffs' '
+   append_signoff \EOF actual 
+subject
+
+body
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+10:
+11:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: no existing signoffs and no trailing NL' '
+   printf subject\n\nbody | append_signoff actual 
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+10:
+11:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: some random signoff' '
+   append_signoff \EOF actual 
+subject
+
+body
+
+Signed-off-by: my@house
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+10:
+11:Signed-off-by: my@house
+12:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_failure 'signoff: some random signoff-alike' '
+   append_signoff \EOF actual 
+subject
+
+body
+Fooled-by-me: my@house
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+11:
+12:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_failure 'signoff: not really a signoff' '
+   append_signoff \EOF actual 
+subject
+
+I want to mention about Signed-off-by: here.
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+9:I want to mention about Signed-off-by: here.
+10:
+11:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_failure 'signoff: not really a signoff (2)' '
+   append_signoff \EOF actual 
+subject
+
+My unfortunate
+Signed-off-by: example happens to be wrapped here.
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+10:Signed-off-by: example happens to be wrapped here.
+11:
+12:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_failure 'signoff: valid S-o-b paragraph in the middle' '
+   append_signoff \EOF actual 
+subject
+
+Signed-off-by: my@house
+Signed-off-by: your@house
+
+A lot of houses.
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+9:Signed-off-by: my@house
+10:Signed-off-by: your@house
+11:
+13:
+14:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: the same signoff at the end' '
+   append_signoff \EOF actual 
+subject
+
+body
+
+Signed-off-by: C O Mitter commit...@example.com
+EOF
+   cat expected \EOF 
+4:Subject: [PATCH] subject
+8:
+10:
+11:Signed-off-by: C O Mitter commit...@example.com
+EOF
+   test_cmp expected actual
+'
+
+test_expect_success 'signoff: the same signoff at the end, no trailing NL' '
+   printf subject\n\nSigned-off-by: C O Mitter commit...@example.com |
+   

[PATCH v2 09/10] format-patch: update append_signoff prototype

2013-01-21 Thread Brandon Casey
From: Nguyễn Thái Ngọc Duy pclo...@gmail.com

This is a preparation step for merging with append_signoff from
sequencer.c

Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Signed-off-by: Brandon Casey bca...@nvidia.com
---
 builtin/log.c | 13 +
 log-tree.c| 14 ++
 revision.h|  2 +-
 3 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/builtin/log.c b/builtin/log.c
index 8f0b2e8..59de484 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1086,7 +1086,6 @@ int cmd_format_patch(int argc, const char **argv, const 
char *prefix)
struct commit *origin = NULL, *head = NULL;
const char *in_reply_to = NULL;
struct patch_ids ids;
-   char *add_signoff = NULL;
struct strbuf buf = STRBUF_INIT;
int use_patch_format = 0;
int quiet = 0;
@@ -1193,16 +1192,6 @@ int cmd_format_patch(int argc, const char **argv, const 
char *prefix)
rev.subject_prefix = strbuf_detach(sprefix, NULL);
}
 
-   if (do_signoff) {
-   const char *committer;
-   const char *endpos;
-   committer = git_committer_info(IDENT_STRICT);
-   endpos = strchr(committer, '');
-   if (!endpos)
-   die(_(bogus committer info %s), committer);
-   add_signoff = xmemdupz(committer, endpos - committer + 1);
-   }
-
for (i = 0; i  extra_hdr.nr; i++) {
strbuf_addstr(buf, extra_hdr.items[i].string);
strbuf_addch(buf, '\n');
@@ -1393,7 +1382,7 @@ int cmd_format_patch(int argc, const char **argv, const 
char *prefix)
total++;
start_number--;
}
-   rev.add_signoff = add_signoff;
+   rev.add_signoff = do_signoff;
while (0 = --nr) {
int shown;
commit = list[nr];
diff --git a/log-tree.c b/log-tree.c
index 5dc45c4..83f33f4 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -253,9 +253,11 @@ static int detect_any_signoff(char *letter, int size)
return seen_head  seen_name;
 }
 
-static void append_signoff(struct strbuf *sb, const char *signoff)
+static void append_signoff(struct strbuf *sb, int ignore_footer, int 
no_dup_sob)
 {
static const char signed_off_by[] = Signed-off-by: ;
+   char *signoff = xstrdup(fmt_name(getenv(GIT_COMMITTER_NAME),
+  getenv(GIT_COMMITTER_EMAIL)));
size_t signoff_len = strlen(signoff);
int has_signoff = 0;
char *cp;
@@ -275,6 +277,7 @@ static void append_signoff(struct strbuf *sb, const char 
*signoff)
if (!isspace(cp[signoff_len]))
continue;
/* we already have him */
+   free(signoff);
return;
}
 
@@ -287,6 +290,7 @@ static void append_signoff(struct strbuf *sb, const char 
*signoff)
strbuf_addstr(sb, signed_off_by);
strbuf_add(sb, signoff, signoff_len);
strbuf_addch(sb, '\n');
+   free(signoff);
 }
 
 static unsigned int digits_in_number(unsigned int number)
@@ -672,8 +676,10 @@ void show_log(struct rev_info *opt)
/*
 * And then the pretty-printed message itself
 */
-   if (ctx.need_8bit_cte = 0)
-   ctx.need_8bit_cte = has_non_ascii(opt-add_signoff);
+   if (ctx.need_8bit_cte = 0  opt-add_signoff)
+   ctx.need_8bit_cte =
+   has_non_ascii(fmt_name(getenv(GIT_COMMITTER_NAME),
+  getenv(GIT_COMMITTER_EMAIL)));
ctx.date_mode = opt-date_mode;
ctx.date_mode_explicit = opt-date_mode_explicit;
ctx.abbrev = opt-diffopt.abbrev;
@@ -686,7 +692,7 @@ void show_log(struct rev_info *opt)
pretty_print_commit(ctx, commit, msgbuf);
 
if (opt-add_signoff)
-   append_signoff(msgbuf, opt-add_signoff);
+   append_signoff(msgbuf, 0, 1);
 
if ((ctx.fmt != CMIT_FMT_USERFORMAT) 
ctx.notes_message  *ctx.notes_message) {
diff --git a/revision.h b/revision.h
index 5da09ee..01bd2b7 100644
--- a/revision.h
+++ b/revision.h
@@ -138,7 +138,7 @@ struct rev_info {
int reroll_count;
char*message_id;
struct string_list *ref_message_ids;
-   const char  *add_signoff;
+   int add_signoff;
const char  *extra_headers;
const char  *log_reencode;
const char  *subject_prefix;
-- 
1.8.1.1.252.gdb33759

--
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] git rm -u

2013-01-21 Thread Matthieu Moy
Junio C Hamano gits...@pobox.com writes:

 Matthieu Moy matthieu@grenoble-inp.fr writes:

 git add -u is one of the only exceptions (with git grep). I consider
 this as a bug, and think this should be changed. This has been discussed
 several times here, but no one took the time to actually do the change

 Did we ever agree that it is a good change to begin with?  Pointers?

I don't think a consensus was reached, but it has been discussed at
least once in this thread:

http://thread.gmane.org/gmane.comp.version-control.git/166223/focus=168238

Essentially, the discussion boiled down to it would be cool to change,
but the migration won't be easy.

The main argument for change is (for me) consistency. Having
git add -p tree-wide and git add -u limited to . is really strange.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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] git rm -u

2013-01-21 Thread Junio C Hamano
Piotr Krukowiecki piotr.krukowie...@gmail.com writes:

 Do you mean git add will be disallowed without . or :/ argument?
 Or will this change in future and git add without argument will me
 whole tree, same as :/ ?

No.  This is only about git add -uRETURN, not any other forms of
git add ...with or without other args

git add -uRETURN historically meant, and it still means, to
update the index with every change in the working tree, even when
you are in a subdirectory.

Back when git add -u was invented, we didn't have the :/, which
lets us tell commands that take pathspecs I want everything from
the top of the working tree..  If git add -uRETURN limited its
operation to the current directory, after working everywhere in the
working tree, cd'ing around and ending up to be in a subdirectory
somwhere deep, you had to cd ../../..  git add -u, which was
cumbersome.  If git add -u always meant the whole tree, limiting
it to the current directory with git add -u .RETURN was easy,
and that is why the default was chosen to the whole tree.

Because we have :/ these days, changing something that limits its
action to the current directory by default to instead work on the
whole tree no longer makes much sense.  That is, if we _were_ to
change git add -uRETURN, it would be in the opposite direction,
i.e. to update the index only with the paths below the current
directory.

Such a change has to be done carefully.  Existing users do expect
the current behaviour, so we have to first _break_ their fingers and
habits and train them to say add -u :/ when they mean the whole
tree operation.  Silently accepting add -u and changing its
meaning to update the index only with the paths below the current
directory will cause them trouble by leaving changes they _thought_
they added out of the index, and is an unacceptable change.

The first step of migration is git add -uRETURN that loudly
warns, so that uses of that form in scripts are updated before the
second step to avoid a flag-day breakage and start traing fingers
and habits of the users.

The second step is to make add -uRETURN fail, again with a
message that tells users to be explicit and add :/ or . at the
end if they mean the whole tree or the current directory.

After keeping Git in that secnd step for sufficiently long time to
train users to type :/ or . explicitly, we can then finally
switch the default of git add -uRETURN to limit it to the
current directory, instead of failing the command.



--
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: git-cvsimport-3 and incremental imports

2013-01-21 Thread John Keeping
On Sun, Jan 20, 2013 at 06:20:08PM -0500, Eric S. Raymond wrote:
 John Keeping j...@keeping.me.uk:
 I don't think there is any way to solve this without giving cvsps more
 information, probably the last commit time for all git branches, but
 perhaps I'm missing a fast-import feature that can help solve this
 problem.
 
 Yes, you are.  The magic incantation is
 
 from refs/heads/branch^0
 
 I've just pushed a cvsps-3.9 with an -i option that generates these at
 each branch root.  Combine it with -d and you get incremental
 fast-export.

I don't think this is enough.  I made a very similar change here for
testing (conditional on relative_date_start instead of a new flag) and I
needed this as well in order to prevent empty duplicate commits being
added:

-- 8 --

diff --git a/cvsps.c b/cvsps.c
index fb6a3ad..5771462 100644
--- a/cvsps.c
+++ b/cvsps.c
@@ -1560,7 +1560,7 @@ static bool visible(PatchSet * ps)
  ok:
 //fprintf(stderr, Time check: %zd %zd %zd\n, restrict_date_start, 
restrict_date_end, ps-date);
 if (restrict_date_start  0 
-   (ps-date  restrict_date_start ||
+   (ps-date = restrict_date_start ||
 (restrict_date_end  0  ps-date  restrict_date_end)))
return false;
 
-- 8 --


But this is nothing more than a sticking plaster that happens to do
enough in this particular case - if the Git repository happened to be on
a different branch, the start date would be wrong and too many or too
few commits could be output.  Git doesn't detect that they commits are
identical to some that we already have because we're explicitly telling
it to make a new commit with the specified parent.

You can easily see the breakage by running the tests in the Git tree,
where the CVS revision map tests fail because they end up with duplicate
versions.

You'll need my cvsimport-3 branch to see these failures as it adds the
git config support that the tests rely on:

git://github.com/johnkeeping/git.git cvsimport-3


John
--
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: git-cvsimport-3 and incremental imports

2013-01-21 Thread Eric S. Raymond
John Keeping j...@keeping.me.uk:
 But this is nothing more than a sticking plaster that happens to do
 enough in this particular case

I'm beginning to think that's the best outcome we ever get in this
problem domain...

- if the Git repository happened to be on
 a different branch, the start date would be wrong and too many or too
 few commits could be output.  Git doesn't detect that they commits are
 identical to some that we already have because we're explicitly telling
 it to make a new commit with the specified parent.

Then I don't understand the actual failure case.  Either that or you
don't understand the effect of -i. Have you actually experimented with
it?  The reason I suspect you don't understand the feature is that it
shouldn't make any difference to the way -i works which repository branch is
active at the time of the second import.

Here is how I model what is going on:

1. We make commits to multiple branches of a CVS repo up to some given time T.

2. We import it, ending up with a collection of git branches all of which 
   have tip commits dated T or earlier. And *every* commit dated T or earlier
   gets copied over.

3. We make more commits to the same set of branches in CVS.

4. We now run cvsps -d T on the repo. This generates an incremental
   fast-import stream describing all CVS commits *newer* than T (see
   the cvsps manual page).

5. That stream should consist of a set of disconnected branches, each
   (because of -i) beginning with a root commit containing from
   refs/heads/foo^0 which says to parent the commit on the tip of
   branch foo, whatever that happens to be.  (I don't have to guess
   about this, I tested the feature before shipping.)

6. Now, when git fast-import interprets that stream in the context of
   the repository produced in step 2, for each branch in the
   incremental dump the branch root commit is parented on the tip
   commit of the same branch in the repo.
 
At step 6, it shouldn't matter at all which branch is active, because
where an incremental branch root gets attached has nothing to do with
which branch is active. 

It is sufficient to avoid duplicate commits that cvsps -d 0 -d T and
cvsps -d T run on the same CVS repo operate on *disjoint sets* of CVS
file commits.  I can see this technique possibly getting confused if T
falls in the middle of a changeset where the CVS timestamps for the
file commits are out of order.  But that's the same case that will
fail if we're importing at file-commit granularity, so there's no new
bug here.

Can you explain at what step my logic is incorrect?
-- 
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


Re: git-cvsimport-3 and incremental imports

2013-01-21 Thread John Keeping
On Mon, Jan 21, 2013 at 06:28:53AM -0500, Eric S. Raymond wrote:
 John Keeping j...@keeping.me.uk:
 But this is nothing more than a sticking plaster that happens to do
 enough in this particular case
 
 I'm beginning to think that's the best outcome we ever get in this
 problem domain...

I don't think we can ever get a perfect outcome, but it should be
possible to do a little bit better without too much effort.

- if the Git repository happened to be on
 a different branch, the start date would be wrong and too many or too
 few commits could be output.  Git doesn't detect that they commits are
 identical to some that we already have because we're explicitly telling
 it to make a new commit with the specified parent.
 
 Then I don't understand the actual failure case.  Either that or you
 don't understand the effect of -i. Have you actually experimented with
 it?  The reason I suspect you don't understand the feature is that it
 shouldn't make any difference to the way -i works which repository branch is
 active at the time of the second import.
 
 Here is how I model what is going on:
 
 1. We make commits to multiple branches of a CVS repo up to some given time T.
 
 2. We import it, ending up with a collection of git branches all of which 
have tip commits dated T or earlier. And *every* commit dated T or earlier
gets copied over.

 3. We make more commits to the same set of branches in CVS.
 
 4. We now run cvsps -d T on the repo. This generates an incremental
fast-import stream describing all CVS commits *newer* than T (see
the cvsps manual page).

This is the problem step.  There are two scenarios that have problems:

1. If I create a new development branch in my Git repository and commit
   something to it then git-cvsimport-3 will pass a time to cvsps that
   is newer than the actual time of the last import, so T is wrong.

   It may be possible to fix this case purely in git-cvsimport-3.

2. If the branch I have checked out is not the newest CVS branch, then
   git-cvsimport-3 will pass a value of T that is before the time of the
   last import.  This case is more subtle but it results in unwanted
   duplicate commits since git-fast-import will just do what it's told
   and create the new commits.

   So if we have the following commits:

 commit1 at time 1
 commit2 at time 2
 commit3 at time 3

   and I call cvsps -d 2 -i I end up with the series:

 commit1 at time 1
 commit2 at time 2
 commit3 at time 3
 commit2 at time 2 - effectively reverting the previous commit
 commit3 at time 3 - a duplicate
 ... and potentially genuinely new commits

   This is demonstrated by running the Git test t9650.

I also disagree that cvsps outputs commits *newer* than T since it will
also output commits *at* T, which is what I changed with the patch in my
previous message.  This fixes the duplicate commit2 in the series above,
but not the duplicate commit3.

 5. That stream should consist of a set of disconnected branches, each
(because of -i) beginning with a root commit containing from
refs/heads/foo^0 which says to parent the commit on the tip of
branch foo, whatever that happens to be.  (I don't have to guess
about this, I tested the feature before shipping.)
 
 6. Now, when git fast-import interprets that stream in the context of
the repository produced in step 2, for each branch in the
incremental dump the branch root commit is parented on the tip
commit of the same branch in the repo.
  
 At step 6, it shouldn't matter at all which branch is active, because
 where an incremental branch root gets attached has nothing to do with
 which branch is active. 
 
 It is sufficient to avoid duplicate commits that cvsps -d 0 -d T and
 cvsps -d T run on the same CVS repo operate on *disjoint sets* of CVS
 file commits.  I can see this technique possibly getting confused if T
 falls in the middle of a changeset where the CVS timestamps for the
 file commits are out of order.  But that's the same case that will
 fail if we're importing at file-commit granularity, so there's no new
 bug here.
 
 Can you explain at what step my logic is incorrect?

Your logic is correct - for cvsps - the problem is where T comes from.

Perhaps it is simplest to just save a CVS_LAST_IMPORT_TIME file in
$GIT_DIR and not worry about it any more.


John
--
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: git-cvsimport-3 and incremental imports

2013-01-21 Thread Eric S. Raymond
John Keeping j...@keeping.me.uk:
 I also disagree that cvsps outputs commits *newer* than T since it will
 also output commits *at* T, which is what I changed with the patch in my
 previous message.

Ah.  OK, that is yet another bug inherited from 2.x - the code doesn't
match the documented (and correct) behavior.  Please send me a patch
against the cvsps repo, I'll merge it.

 Perhaps it is simplest to just save a CVS_LAST_IMPORT_TIME file in
 $GIT_DIR and not worry about it any more.

Yes, I think you're right. Trying to carry that information in-band would
probably doom us to all sorts of bug-prone complications.

Thanks for the good analysis.  I wish everybody I had to chase bugs with
could explain them with such clarity and concision.

Sigh. Now I have to figure out if cvsps's behavior can be rescued in Chris
Rorvick's recently-discovered failure case. I'm not optimistic.
-- 
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


Re: git-cvsimport-3 and incremental imports

2013-01-21 Thread John Keeping
On Mon, Jan 21, 2013 at 07:43:40AM -0500, Eric S. Raymond wrote:
 John Keeping j...@keeping.me.uk:
 I also disagree that cvsps outputs commits *newer* than T since it will
 also output commits *at* T, which is what I changed with the patch in my
 previous message.
 
 Ah.  OK, that is yet another bug inherited from 2.x - the code doesn't
 match the documented (and correct) behavior.  Please send me a patch
 against the cvsps repo, I'll merge it.

Should now be in your inbox.

  Perhaps it is simplest to just save a CVS_LAST_IMPORT_TIME file in
  $GIT_DIR and not worry about it any more.
 
 Yes, I think you're right. Trying to carry that information in-band would
 probably doom us to all sorts of bug-prone complications.

I think the only way to do it without needing to save local state in the
Git repository would be to teach cvsps to read a table of refs and times
from its stdin so that we could do something like:

git for-each-ref --format='%(refname)%09%(*authordate:raw)' refs/heads/ |
cvsps -i --branch-times-from-stdin |
git fast-import

Then cvsps could create a hash table from this and use that to decide
whether a patch set is interesting or not.


John
--
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: GIT get corrupted on lustre

2013-01-21 Thread Erik Faye-Lund
On Fri, Jan 18, 2013 at 6:50 PM, Eric Chamberland
eric.chamberl...@giref.ulaval.ca wrote:
 Good idea!

 I did a strace and here is the output with the error:

 http://www.giref.ulaval.ca/~ericc/strace_git_error.txt

 Hope it will be insightful!

This trace doesn't seem to contain child-processes, but instead having
their stderr inlined into the log. Try using strace -f instead...
--
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] git-for-each-ref.txt: 'raw' is a supported date format

2013-01-21 Thread John Keeping
Commit 7dff9b3 (Support 'raw' date format) added a raw date format.
Update the git-for-each-ref documentation to include this.

Signed-off-by: John Keeping j...@keeping.me.uk
---
 Documentation/git-for-each-ref.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/git-for-each-ref.txt 
b/Documentation/git-for-each-ref.txt
index db55a4e..d3e1df7 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -117,7 +117,7 @@ returns an empty string instead.
 
 As a special case for the date-type fields, you may specify a format for
 the date by adding one of `:default`, `:relative`, `:short`, `:local`,
-`:iso8601` or `:rfc2822` to the end of the fieldname; e.g.
+`:iso8601`, `:rfc2822` or `raw` to the end of the fieldname; e.g.
 `%(taggerdate:relative)`.
 
 
-- 
1.8.1

--
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: git-cvsimport-3 and incremental imports

2013-01-21 Thread Eric S. Raymond
John Keeping j...@keeping.me.uk:
  Ah.  OK, that is yet another bug inherited from 2.x - the code doesn't
  match the documented (and correct) behavior.  Please send me a patch
  against the cvsps repo, I'll merge it.
 
 Should now be in your inbox.

Received, merged, tested, and cvsps-3.10 has shipped.
 
 I think the only way to do it without needing to save local state in the
 Git repository would be to teach cvsps to read a table of refs and times
 from its stdin so that we could do something like:
 
 git for-each-ref --format='%(refname)%09%(*authordate:raw)' refs/heads/ |
 cvsps -i --branch-times-from-stdin |
 git fast-import
 
 Then cvsps could create a hash table from this and use that to decide
 whether a patch set is interesting or not.

Agreed.  I considered implementing something quite this before thinking of
the ^0 hack.  But an out-of-band timestamp file is much simpler.
-- 
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


Re: [PATCH v3 0/2] Make git-svn work with gitdir links

2013-01-21 Thread Joachim Schmitz

Junio C Hamano wrote:

Barry Wardell barry.ward...@gmail.com writes:


These patches fix a bug which prevented git-svn from working with
repositories which use gitdir links.

Changes since v2:
 - Rebased onto latest master.
 - Added test case which verifies that the problem has been fixed.
 - Fixed problems with git svn (init|clone|multi-init).
 - All git-svn test cases now pass (except two in t9101 which also
   failed before these patches).

Barry Wardell (2):
  git-svn: Add test for git-svn repositories with a gitdir link
  git-svn: Simplify calculation of GIT_DIR


Thanks for your persistence ;-) As this is a pretty old topic, I'll
give two URLs for people who are interested to view the previous
threads:

   http://thread.gmane.org/gmane.comp.version-control.git/192133
   http://thread.gmane.org/gmane.comp.version-control.git/192127

You would want to mark it as test_expect_failure in the first patch
and then flip it to text_expect_success in the second patch where
you fix the breakage?  Otherwise, after applying the first patch,
the testsuite will break needlessly.


I'd just apply them the other way round, 1st fix the problem, 2nd add a test 
for it


Bye, Jojo 



--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Robin Rosenberg


- Ursprungligt meddelande -
 Most git commands that can be used with our without a filepattern are
 tree-wide by default, the filepattern being used to restrict their
 scope.
 A few exceptions are: 'git grep', 'git clean', 'git add -u' and 'git
 add -A'.
 
 The inconsistancy of 'git add -u' and 'git add -A' are particularly
 problematic since other 'git add' subcommands (namely 'git add -p'
 and
 'git add -e') are tree-wide by default.
 
 Flipping the default now is unacceptable, so this patch starts
 training
 users to type explicitely 'git add -u|-A :/' or 'git add -u|-A .', to
 prepare
 for the next steps:
 
 * forbid 'git add -u|-A' without filepattern (like 'git add' without
   option)

git add -u without filepattern is, I believe very common, so no noisy
output there please.

git diff
#looks good
git add -u

-- robin

--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Matthieu Moy
Robin Rosenberg robin.rosenb...@dewire.com writes:

 git add -u without filepattern is, I believe very common, so no noisy
 output there please.

What are you exactly suggesting? That we keep the inconsistant semantics
of git add -u or git add -A? Or another migration plan?

 git diff
 #looks good
 git add -u

That's indeed the kind of mistake I'd like to avoid. In your example,
git diff is tree-wide, and git add -u is limited to ., so in general
git add -u won't stage the same thing as git diff just showed.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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] git-for-each-ref.txt: 'raw' is a supported date format

2013-01-21 Thread Michael Haggerty
On 01/21/2013 02:53 PM, John Keeping wrote:
 Commit 7dff9b3 (Support 'raw' date format) added a raw date format.
 Update the git-for-each-ref documentation to include this.
 
 Signed-off-by: John Keeping j...@keeping.me.uk
 ---
  Documentation/git-for-each-ref.txt | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Documentation/git-for-each-ref.txt 
 b/Documentation/git-for-each-ref.txt
 index db55a4e..d3e1df7 100644
 --- a/Documentation/git-for-each-ref.txt
 +++ b/Documentation/git-for-each-ref.txt
 @@ -117,7 +117,7 @@ returns an empty string instead.
  
  As a special case for the date-type fields, you may specify a format for
  the date by adding one of `:default`, `:relative`, `:short`, `:local`,
 -`:iso8601` or `:rfc2822` to the end of the fieldname; e.g.
 +`:iso8601`, `:rfc2822` or `raw` to the end of the fieldname; e.g.
  `%(taggerdate:relative)`.

Shouldn't raw be preceded with a colon like the other format specifiers?

Michael

-- 
Michael Haggerty
mhag...@alum.mit.edu
http://softwareswirl.blogspot.com/
--
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: GIT get corrupted on lustre

2013-01-21 Thread Thomas Rast
Erik Faye-Lund kusmab...@gmail.com writes:

 On Fri, Jan 18, 2013 at 6:50 PM, Eric Chamberland
 eric.chamberl...@giref.ulaval.ca wrote:
 Good idea!

 I did a strace and here is the output with the error:

 http://www.giref.ulaval.ca/~ericc/strace_git_error.txt

 Hope it will be insightful!

 This trace doesn't seem to contain child-processes, but instead having
 their stderr inlined into the log. Try using strace -f instead...

I happen to have access to a lustre FS on the brutus cluster of ETH
Zurich, so I figured I could give it a shot.

What's odd is that while I cannot reproduce the original problem, there
seems to be another issue/bug with utime():

  $ strace -f -o ~/gc.trace git gc
  warning: failed utime() on .git/objects/68/tmp_obj_sCAEVc: Interrupted system 
call
  warning: failed utime() on .git/objects/a6/tmp_obj_3cdB2c: Interrupted system 
call
  warning: failed utime() on .git/objects/69/tmp_obj_lbU3Xc: Interrupted system 
call
  warning: failed utime() on .git/objects/c3/tmp_obj_EU97Wc: Interrupted system 
call
  warning: failed utime() on .git/objects/3e/tmp_obj_tb2j3c: Interrupted system 
call
  warning: failed utime() on .git/objects/15/tmp_obj_e6zMXc: Interrupted system 
call
  warning: failed utime() on .git/objects/54/tmp_obj_ExOJVc: Interrupted system 
call
  warning: failed utime() on .git/objects/e3/tmp_obj_GtPw4c: Interrupted system 
call
  warning: failed utime() on .git/objects/21/tmp_obj_Xex32c: Interrupted system 
call
  warning: failed utime() on .git/objects/1a/tmp_obj_CzwsZc: Interrupted system 
call
  warning: failed utime() on .git/objects/18/tmp_obj_o6fp3c: Interrupted system 
call
  warning: failed utime() on .git/objects/32/tmp_obj_Ih0G4c: Interrupted system 
call
  warning: failed utime() on .git/objects/41/tmp_obj_1RXV1c: Interrupted system 
call
  Counting objects: 137744, done.
  Delta compression using up to 48 threads.
  Compressing objects: 100% (36510/36510), done.
  Writing objects: 100% (137744/137744), done.
  Total 137744 (delta 101591), reused 135512 (delta 99472)

The trace is here (2.1MB compressed):

  http://thomasrast.ch/download/gc.trace.bz2

For the test I used a clone of another git.git I had around.  I think
the error is from sha1_file.c:2564.  While that doesn't look too
important (see ca11b212 for context), it does raise the question: what
other system calls that we never expect to EINTR can do this on
sufficiently arcane system/FS combinations?


Peff's test ran without any apparent issue for a few minutes.  I also
ran an extended version (at the end) that sets alarms, so as to actually
get interrupted.  That proved more interesting.  I had to fix verify()
and write_in_full() to account for EINTR in read()/write(), as those
seem likely to fail.  I also got link() to fail:

  $ ~/lustre-peff-reproducer 
  unable to create hard link: Interrupted system call
  unable to open index file: No such file or directory

but it took a long time.  Unfortunately, when running it with strace I
managed to panic the host I ran it on:

  $ strace -o ~/peff-reproducer.trace ~/lustre-peff-reproducer 

  Message from syslogd@brutus1 at Jan 21 17:09:43 ...   
 
   kernel:LustreError: 37417:0:(osc_lock.c:1182:osc_lock_enqueue()) ASSERTION( 
ols-ols_state == OLS_NEW ) failed: Impossible state: 4

  Message from syslogd@brutus1 at Jan 21 17:09:43 ...
   kernel:LustreError: 37417:0:(osc_lock.c:1182:osc_lock_enqueue()) LBUG

  Message from syslogd@brutus1 at Jan 21 17:09:43 ...
   kernel:Kernel panic - not syncing: LBUG

Yay for now having to explain this to the cluster team.


I tried finding a standard that limits the syscalls to which EINTR
applies, without too much success.  I'm not sure how far I should trust
my manpages, but while some of them explicitly list EINTR as a possible
error (read, write, etc.) link() does not.  (And the linux manpages
agree with the POSOIX ones for once.)

If somebody finds such a standard, we could of course use it to blame
lustre instead :-)

In the absence of it, wouldn't we in theory have to write a simple
loop-on-EINTR wrapper for *all* syscalls?

Of course there's the added problem that when open(O_CREAT|O_EXCL) fails
with EINTR, it's hard to tell whether a file that may now exist is
indeed yours or some other process's.

--- 8 
#include fcntl.h
#include unistd.h
#include stdlib.h
#include stdio.h
#include string.h
#include sys/time.h
#include signal.h
#include errno.h

struct itimerval itv;

static int randomize(unsigned char *buf, int len)
{
  int i;
  len = rand() % len;
  for (i = 0; i  len; i++)
buf[i] = rand()  0xff;
  return len;
}

static int check_eof(int fd)
{
  int ch;
  int r = read(fd, ch, 1);
  if (r  0) {
perror(read error after expected EOF);
return -1;
  }
  if (r  0) {
fprintf(stderr, extra byte after expected EOF);
return -1;
  }
  return 0;
}

static int verify(int fd, const unsigned char *buf, int len)
{
  while (len) {
char 

Re: GIT get corrupted on lustre

2013-01-21 Thread Maxime Boissonneault

Hi Thomas,
Can you tell me what is the version of the lustre servers and the lustre 
clients ?


Thanks,

Maxime Boissonneault
HPC specialist @ Calcul Québec.

Le 2013-01-21 11:11, Thomas Rast a écrit :

Erik Faye-Lund kusmab...@gmail.com writes:


On Fri, Jan 18, 2013 at 6:50 PM, Eric Chamberland
eric.chamberl...@giref.ulaval.ca wrote:

Good idea!

I did a strace and here is the output with the error:

http://www.giref.ulaval.ca/~ericc/strace_git_error.txt

Hope it will be insightful!

This trace doesn't seem to contain child-processes, but instead having
their stderr inlined into the log. Try using strace -f instead...

I happen to have access to a lustre FS on the brutus cluster of ETH
Zurich, so I figured I could give it a shot.

What's odd is that while I cannot reproduce the original problem, there
seems to be another issue/bug with utime():

   $ strace -f -o ~/gc.trace git gc
   warning: failed utime() on .git/objects/68/tmp_obj_sCAEVc: Interrupted 
system call
   warning: failed utime() on .git/objects/a6/tmp_obj_3cdB2c: Interrupted 
system call
   warning: failed utime() on .git/objects/69/tmp_obj_lbU3Xc: Interrupted 
system call
   warning: failed utime() on .git/objects/c3/tmp_obj_EU97Wc: Interrupted 
system call
   warning: failed utime() on .git/objects/3e/tmp_obj_tb2j3c: Interrupted 
system call
   warning: failed utime() on .git/objects/15/tmp_obj_e6zMXc: Interrupted 
system call
   warning: failed utime() on .git/objects/54/tmp_obj_ExOJVc: Interrupted 
system call
   warning: failed utime() on .git/objects/e3/tmp_obj_GtPw4c: Interrupted 
system call
   warning: failed utime() on .git/objects/21/tmp_obj_Xex32c: Interrupted 
system call
   warning: failed utime() on .git/objects/1a/tmp_obj_CzwsZc: Interrupted 
system call
   warning: failed utime() on .git/objects/18/tmp_obj_o6fp3c: Interrupted 
system call
   warning: failed utime() on .git/objects/32/tmp_obj_Ih0G4c: Interrupted 
system call
   warning: failed utime() on .git/objects/41/tmp_obj_1RXV1c: Interrupted 
system call
   Counting objects: 137744, done.
   Delta compression using up to 48 threads.
   Compressing objects: 100% (36510/36510), done.
   Writing objects: 100% (137744/137744), done.
   Total 137744 (delta 101591), reused 135512 (delta 99472)

The trace is here (2.1MB compressed):

   http://thomasrast.ch/download/gc.trace.bz2

For the test I used a clone of another git.git I had around.  I think
the error is from sha1_file.c:2564.  While that doesn't look too
important (see ca11b212 for context), it does raise the question: what
other system calls that we never expect to EINTR can do this on
sufficiently arcane system/FS combinations?


Peff's test ran without any apparent issue for a few minutes.  I also
ran an extended version (at the end) that sets alarms, so as to actually
get interrupted.  That proved more interesting.  I had to fix verify()
and write_in_full() to account for EINTR in read()/write(), as those
seem likely to fail.  I also got link() to fail:

   $ ~/lustre-peff-reproducer
   unable to create hard link: Interrupted system call
   unable to open index file: No such file or directory

but it took a long time.  Unfortunately, when running it with strace I
managed to panic the host I ran it on:

   $ strace -o ~/peff-reproducer.trace ~/lustre-peff-reproducer

   Message from syslogd@brutus1 at Jan 21 17:09:43 ...
kernel:LustreError: 37417:0:(osc_lock.c:1182:osc_lock_enqueue()) ASSERTION( 
ols-ols_state == OLS_NEW ) failed: Impossible state: 4

   Message from syslogd@brutus1 at Jan 21 17:09:43 ...
kernel:LustreError: 37417:0:(osc_lock.c:1182:osc_lock_enqueue()) LBUG

   Message from syslogd@brutus1 at Jan 21 17:09:43 ...
kernel:Kernel panic - not syncing: LBUG

Yay for now having to explain this to the cluster team.


I tried finding a standard that limits the syscalls to which EINTR
applies, without too much success.  I'm not sure how far I should trust
my manpages, but while some of them explicitly list EINTR as a possible
error (read, write, etc.) link() does not.  (And the linux manpages
agree with the POSOIX ones for once.)

If somebody finds such a standard, we could of course use it to blame
lustre instead :-)

In the absence of it, wouldn't we in theory have to write a simple
loop-on-EINTR wrapper for *all* syscalls?

Of course there's the added problem that when open(O_CREAT|O_EXCL) fails
with EINTR, it's hard to tell whether a file that may now exist is
indeed yours or some other process's.

--- 8 
#include fcntl.h
#include unistd.h
#include stdlib.h
#include stdio.h
#include string.h
#include sys/time.h
#include signal.h
#include errno.h

struct itimerval itv;

static int randomize(unsigned char *buf, int len)
{
   int i;
   len = rand() % len;
   for (i = 0; i  len; i++)
 buf[i] = rand()  0xff;
   return len;
}

static int check_eof(int fd)
{
   int ch;
   int r = read(fd, ch, 1);
   if (r  0) {
 perror(read error after expected EOF);
 return -1;
   }
   if (r  0) 

Re: GIT get corrupted on lustre

2013-01-21 Thread Thomas Rast
Maxime Boissonneault maxime.boissonnea...@calculquebec.ca writes:

 Hi Thomas,
 Can you tell me what is the version of the lustre servers and the
 lustre clients ?

$ uname -a
Linux brutus4.ethz.ch 2.6.32-279.14.1.el6.x86_64 #1 SMP Tue Nov 6 23:43:09 UTC 
2012 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/fs/lustre/version
lustre: 2.3.0
kernel: patchless_client
build:  2.3.0-RC6--PRISTINE-2.6.32-279.14.1.el6.x86_64

I have no idea what the servers are running, I only have client access.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
--
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 v2] git-for-each-ref.txt: 'raw' is a supported date format

2013-01-21 Thread John Keeping
Commit 7dff9b3 (Support 'raw' date format) added a raw date format.
Update the git-for-each-ref documentation to include this.

Signed-off-by: John Keeping j...@keeping.me.uk
---
On Mon, Jan 21, 2013 at 05:02:52PM +0100, Michael Haggerty wrote:
 Shouldn't raw be preceded with a colon like the other format specifiers?

Yes it should.  Thanks.

 Documentation/git-for-each-ref.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/git-for-each-ref.txt 
b/Documentation/git-for-each-ref.txt
index db55a4e..d3e1df7 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -117,7 +117,7 @@ returns an empty string instead.
 
 As a special case for the date-type fields, you may specify a format for
 the date by adding one of `:default`, `:relative`, `:short`, `:local`,
-`:iso8601` or `:rfc2822` to the end of the fieldname; e.g.
+`:iso8601`, `:rfc2822` or `:raw` to the end of the fieldname; e.g.
 `%(taggerdate:relative)`.
 
 
-- 
1.8.1.353.gc992d5a.dirty

--
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 2/3] t0050: honor CASE_INSENSITIVE_FS in add (with different case)

2013-01-21 Thread Torsten Bögershausen
Sorry for completely messing up the sensitvie/insensiteve

Please discard my patch from pu, I'll send v2.

Sorry for the confusion
/Torsten

--
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 v2 2/3] t0050: honor CASE_INSENSITIVE_FS in add (with different case)

2013-01-21 Thread Torsten Bögershausen
The test case add (with different case) indicates a
known breakage when run on a case insensitive file system.

The test is invalid for case sensitive file system, it will always fail.

Check the precondition CASE_INSENSITIVE_FS before running it.

Signed-off-by: Torsten Bögershausen tbo...@web.de
---
Changes since v1: Corrected and improved commit message
 t/t0050-filesystem.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh
index ccd685d..a6fa3c5 100755
--- a/t/t0050-filesystem.sh
+++ b/t/t0050-filesystem.sh
@@ -88,7 +88,7 @@ test_expect_success 'merge (case change)' '
 
 
 
-test_expect_failure 'add (with different case)' '
+test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
 
git reset --hard initial 
rm camelcase 
-- 
1.8.0.197.g5a90748


--
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 v2 3/3] t0050: Use TAB for indentation

2013-01-21 Thread Torsten Bögershausen
Use one TAB for indentation and remove empty lines

Signed-off-by: Torsten Bögershausen tbo...@web.de
---
 t/t0050-filesystem.sh | 48 +++-
 1 file changed, 15 insertions(+), 33 deletions(-)

diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh
index a6fa3c5..05d78d2 100755
--- a/t/t0050-filesystem.sh
+++ b/t/t0050-filesystem.sh
@@ -29,12 +29,10 @@ test_have_prereq SYMLINKS ||
 if test_have_prereq CASE_INSENSITIVE_FS
 then
 test_expect_success detection of case insensitive filesystem during repo 
init '
-
test $(git config --bool core.ignorecase) = true
 '
 else
 test_expect_success detection of case insensitive filesystem during repo 
init '
-
test_must_fail git config --bool core.ignorecase /dev/null ||
test $(git config --bool core.ignorecase) = false
 '
@@ -43,20 +41,17 @@ fi
 if test_have_prereq SYMLINKS
 then
 test_expect_success detection of filesystem w/o symlink support during repo 
init '
-
test_must_fail git config --bool core.symlinks ||
test $(git config --bool core.symlinks) = true
 '
 else
 test_expect_success detection of filesystem w/o symlink support during repo 
init '
-
v=$(git config --bool core.symlinks) 
test $v = false
 '
 fi
 
 test_expect_success setup case tests '
-
git config core.ignorecase true 
touch camelcase 
git add camelcase 
@@ -67,29 +62,23 @@ test_expect_success setup case tests '
git mv tmp CamelCase 
git commit -m rename 
git checkout -f master
-
 '
 
 $test_case 'rename (case change)' '
-
git mv camelcase CamelCase 
git commit -m rename
-
 '
 
 test_expect_success 'merge (case change)' '
-
rm -f CamelCase 
rm -f camelcase 
git reset --hard initial 
git merge topic
-
 '
 
 
 
 test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
-
git reset --hard initial 
rm camelcase 
echo 1 CamelCase 
@@ -97,37 +86,30 @@ test_expect_failure CASE_INSENSITIVE_FS 'add (with 
different case)' '
camel=$(git ls-files | grep -i camelcase) 
test $(echo $camel | wc -l) = 1 
test z$(git cat-file blob :$camel) = z1
-
 '
 
 test_expect_success setup unicode normalization tests '
-
-  test_create_repo unicode 
-  cd unicode 
-  touch $aumlcdiar 
-  git add $aumlcdiar 
-  git commit -m initial 
-  git tag initial 
-  git checkout -b topic 
-  git mv $aumlcdiar tmp 
-  git mv tmp $auml 
-  git commit -m rename 
-  git checkout -f master
-
+   test_create_repo unicode 
+   cd unicode 
+   touch $aumlcdiar 
+   git add $aumlcdiar 
+   git commit -m initial 
+   git tag initial 
+   git checkout -b topic 
+   git mv $aumlcdiar tmp 
+   git mv tmp $auml 
+   git commit -m rename 
+   git checkout -f master
 '
 
 $test_unicode 'rename (silent unicode normalization)' '
-
- git mv $aumlcdiar $auml 
- git commit -m rename
-
+   git mv $aumlcdiar $auml 
+   git commit -m rename
 '
 
 $test_unicode 'merge (silent unicode normalization)' '
-
- git reset --hard initial 
- git merge topic
-
+   git reset --hard initial 
+   git merge topic
 '
 
 test_done
-- 
1.8.0.197.g5a90748

--
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: GIT get corrupted on lustre

2013-01-21 Thread Eric Chamberland

Hi,

It just happened again.  Now I have the strace -f output gzipped here:

http://www.giref.ulaval.ca/~ericc/strace-f_git_error.txt.gz

thanks,

Eric

On 01/21/2013 08:29 AM, Erik Faye-Lund wrote:

On Fri, Jan 18, 2013 at 6:50 PM, Eric Chamberland
eric.chamberl...@giref.ulaval.ca wrote:

Good idea!

I did a strace and here is the output with the error:

http://www.giref.ulaval.ca/~ericc/strace_git_error.txt

Hope it will be insightful!


This trace doesn't seem to contain child-processes, but instead having
their stderr inlined into the log. Try using strace -f instead...



--
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: GIT get corrupted on lustre

2013-01-21 Thread Eric Chamberland

On 01/21/2013 12:07 PM, Eric Chamberland wrote:

Hi,

It just happened again.  Now I have the strace -f output gzipped here:

http://www.giref.ulaval.ca/~ericc/strace-f_git_error.txt.gz



I added the strace -f output when non error occurs...

http://www.giref.ulaval.ca/~ericc/strace-f_git_no_error.txt.gz

a kdiff3 can show the differences just before the error...

Eric

--
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 v2 0/6] GIT, Git, git

2013-01-21 Thread Thomas Ackermann
Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
(as can be seen in the corresponding release note where 'GIT' was 
changed to 'Git' in the header line).

Alas the documention uses 'GIT', 'Git' or even 'git' to refer to the
Git system. So change every occurrence of 'GIT and 'git' in the 
documention  to 'Git' whenever Git as a system is referred to 
(but don't do this change in the release notes because they 
constitute a history orthogonal to the history versioned by Git).

There is also one occurence of 'GITweb' which is changed to 'Gitweb' but
changing 'gitweb' to 'Gitweb' (or 'GitWeb'?) should be part of another patch.

The 'git' to 'Git' patch has to be divided in four parts to stay within
the mail size limit of 100kB.

[PATCH v2 1/6] Change old system name 'GIT' to 'Git'
[PATCH v2 2/6] Change 'git' to 'Git' whenever the whole system is referred to #1
[PATCH v2 3/6] Change 'git' to 'Git' whenever the whole system is referred to #2
[PATCH v2 4/6] Change 'git' to 'Git' whenever the whole system is referred to #3
[PATCH v2 5/6] Change 'git' to 'Git' whenever the whole system is referred to #4
[PATCH v2 6/6] Add rule for when to use 'git' and when to use 'Git'


---
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 v2 1/6] Change old system name 'GIT' to 'Git'

2013-01-21 Thread Thomas Ackermann
Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
(as can be seen in the corresponding release note where 'GIT' was
changed to 'Git' in the header line). So change every occurrence
of 'GIT in the documention to 'Git'.

Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/asciidoc.conf |  2 +-
 Documentation/everyday.txt  |  4 ++--
 Documentation/git-clone.txt |  2 +-
 Documentation/git-cvsexportcommit.txt   |  2 +-
 Documentation/git-cvsserver.txt |  8 
 Documentation/git-daemon.txt|  4 ++--
 Documentation/git-mv.txt|  2 +-
 Documentation/git-send-email.txt|  2 +-
 Documentation/git-tools.txt | 14 +++---
 Documentation/git-update-ref.txt|  2 +-
 Documentation/git.txt   |  2 +-
 Documentation/gitcore-tutorial.txt  |  4 ++--
 Documentation/gitglossary.txt   |  2 +-
 Documentation/gittutorial.txt   |  2 +-
 Documentation/gitweb.txt|  2 +-
 Documentation/gitworkflows.txt  |  2 +-
 Documentation/glossary-content.txt  |  2 +-
 Documentation/howto-index.sh|  2 +-
 Documentation/howto/rebase-from-internal-branch.txt |  6 +++---
 Documentation/howto/revert-branch-rebase.txt|  4 ++--
 Documentation/howto/setup-git-server-over-http.txt  |  4 ++--
 Documentation/technical/api-index-skel.txt  |  4 ++--
 Documentation/technical/index-format.txt|  6 +++---
 Documentation/technical/pack-format.txt |  4 ++--
 Documentation/user-manual.txt   |  4 ++--
 25 files changed, 46 insertions(+), 46 deletions(-)

diff --git a/Documentation/asciidoc.conf b/Documentation/asciidoc.conf
index 1273a85..2c16c53 100644
--- a/Documentation/asciidoc.conf
+++ b/Documentation/asciidoc.conf
@@ -4,7 +4,7 @@
 #
 # Note, {0} is the manpage section, while {target} is the command.
 #
-# Show GIT link as: command(section); if section is defined, else just show
+# Show Git link as: command(section); if section is defined, else just show
 # the command.
 
 [macros]
diff --git a/Documentation/everyday.txt b/Documentation/everyday.txt
index 048337b..6acfd33 100644
--- a/Documentation/everyday.txt
+++ b/Documentation/everyday.txt
@@ -1,4 +1,4 @@
-Everyday GIT With 20 Commands Or So
+Everyday Git With 20 Commands Or So
 ===
 
 Individual Developer (Standalone) commands are essential for
@@ -229,7 +229,7 @@ commands in addition to the ones needed by participants.
 Examples
 
 
-My typical GIT day.::
+My typical Git day.::
 +
 
 $ git status 1
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 7fefdb0..597048b 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -125,7 +125,7 @@ objects from the source repository into a pack in the 
cloned repository.
No checkout of HEAD is performed after the clone is complete.
 
 --bare::
-   Make a 'bare' GIT repository.  That is, instead of
+   Make a 'bare' Git repository.  That is, instead of
creating `directory` and placing the administrative
files in `directory/.git`, make the `directory`
itself the `$GIT_DIR`. This obviously implies the `-n`
diff --git a/Documentation/git-cvsexportcommit.txt 
b/Documentation/git-cvsexportcommit.txt
index 7f79cec..a671e22 100644
--- a/Documentation/git-cvsexportcommit.txt
+++ b/Documentation/git-cvsexportcommit.txt
@@ -15,7 +15,7 @@ SYNOPSIS
 
 DESCRIPTION
 ---
-Exports a commit from GIT to a CVS checkout, making it easier
+Exports a commit from Git to a CVS checkout, making it easier
 to merge patches from a git repository into a CVS repository.
 
 Specify the name of a CVS checkout using the -w switch or execute it
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt
index 88d814a..36d069b 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.txt
@@ -72,9 +72,9 @@ plugin. Most functionality works fine with both of these 
clients.
 LIMITATIONS
 ---
 
-CVS clients cannot tag, branch or perform GIT merges.
+CVS clients cannot tag, branch or perform Git merges.
 
-'git-cvsserver' maps GIT branches to CVS modules. This is very different
+'git-cvsserver' maps Git branches to CVS modules. This is very different
 from what most CVS users would expect since in CVS modules usually represent
 one or more directories.
 
@@ -130,7 +130,7 @@ Then provide your password via the pserver method, for 
example:
 --
cvs -d:pserver:someuser:somepassword at server/path/repo.git co 
HEAD_name
 --
-No special setup is needed for SSH access, other than having GIT tools
+No special setup is 

Aw: [PATCH v2 0/6] GIT, Git, git

2013-01-21 Thread Thomas Ackermann
 
Please ignore these series ... there are still problems with the size of the 
patches :-|

- Original Nachricht 
Von: Thomas Ackermann th.ac...@arcor.de
An:  gits...@pobox.com, th.ac...@arcor.de
Datum:   21.01.2013 19:36
Betreff: [PATCH v2 0/6] GIT, Git, git

 Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
 (as can be seen in the corresponding release note where 'GIT' was 
 changed to 'Git' in the header line).
 
 Alas the documention uses 'GIT', 'Git' or even 'git' to refer to the
 Git system. So change every occurrence of 'GIT and 'git' in the 
 documention  to 'Git' whenever Git as a system is referred to 
 (but don't do this change in the release notes because they 
 constitute a history orthogonal to the history versioned by Git).
 
 There is also one occurence of 'GITweb' which is changed to 'Gitweb' but
 changing 'gitweb' to 'Gitweb' (or 'GitWeb'?) should be part of another
 patch.
 
 The 'git' to 'Git' patch has to be divided in four parts to stay within
 the mail size limit of 100kB.
 
 [PATCH v2 1/6] Change old system name 'GIT' to 'Git'
 [PATCH v2 2/6] Change 'git' to 'Git' whenever the whole system is referred
 to #1
 [PATCH v2 3/6] Change 'git' to 'Git' whenever the whole system is referred
 to #2
 [PATCH v2 4/6] Change 'git' to 'Git' whenever the whole system is referred
 to #3
 [PATCH v2 5/6] Change 'git' to 'Git' whenever the whole system is referred
 to #4
 [PATCH v2 6/6] Add rule for when to use 'git' and when to use 'Git'
 
 
 ---
 Thomas
 

---
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: GIT get corrupted on lustre

2013-01-21 Thread Brian J. Murrell
On 13-01-21 11:11 AM, Thomas Rast wrote:
 
 What's odd is that while I cannot reproduce the original problem, there
 seems to be another issue/bug with utime():

I wonder if this is related to http://jira.whamcloud.com/browse/LU-305.
 That was reported as fixed in Lustre 2.0.0 and 2.1.0 but I thought I
saw it on 2.1.1 and added a comment to the above ticket about that.

 In the absence of it, wouldn't we in theory have to write a simple
 loop-on-EINTR wrapper for *all* syscalls?

IIUC, that's what SA_RESTART is all about.

 Of course there's the added problem that when open(O_CREAT|O_EXCL) fails
 with EINTR, it's hard to tell whether a file that may now exist is
 indeed yours or some other process's.

Or whether it's in a half created state such as I hypothesize in
http://jira.whamcloud.com/browse/LU-2276.

b.




signature.asc
Description: OpenPGP digital signature


Re: [RFC] git rm -u

2013-01-21 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 Piotr Krukowiecki piotr.krukowie...@gmail.com writes:

 Do you mean git add will be disallowed without . or :/ argument?
 Or will this change in future and git add without argument will me
 whole tree, same as :/ ?

 No.  This is only about git add -uRETURN, not any other forms of
 git add ...with or without other args

This part is still correct, but all the remainder of the message I
am responding to is a total garbage, written from faulty memory
without fact check.  Sorry about noise.

 git add -uRETURN historically meant,...

The very original git add -uRETURN done at v1.5.2-rc0~17^2
(git-add -u: match the index with working tree., 2007-04-20) did
update the index with every change under the root of the working
tree, no matter where you were.

But v1.5.2.5~1 (git-add -u paths... now works from subdirectory,
2007-08-16) changed the semantics to limit the operation to the
working tree.  The log message seems to suggest that this was a
deliberate semantics change post release (i.e. the tree-wide was a
bug); I do not recall if there was a discussion and concensus when
this change was made, though.
--
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] l10n: de.po: fix some minor issues

2013-01-21 Thread Ralf Thielow
This fixes some minor issues and improves the
German translation a bit. The following things
were changed:
- use complete sentences in option related messages
- translate use consistently as verwendet
- don't translate make sense as macht Sinn

Signed-off-by: Ralf Thielow ralf.thie...@gmail.com
---
 po/de.po | 205 +--
 1 file changed, 109 insertions(+), 96 deletions(-)

diff --git a/po/de.po b/po/de.po
index c8ad2f0..a23991d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1550,12 +1550,12 @@ msgstr Hinzufügen von Dateien fehlgeschlagen
 
 #: builtin/add.c:392
 msgid -A and -u are mutually incompatible
-msgstr -A und -u sind zueinander inkompatibel
+msgstr Die Optionen -A und -u sind zueinander inkompatibel.
 
 #: builtin/add.c:394
 msgid Option --ignore-missing can only be used together with --dry-run
 msgstr 
-Die Option --ignore-missing kann nur zusammen mit --dry-run benutzt werden.
+Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden.
 
 #: builtin/add.c:414
 #, c-format
@@ -2045,15 +2045,18 @@ msgstr stellt Wurzelverzeichnis vor alle Dateinamen
 
 #: builtin/apply.c:4384
 msgid --3way outside a repository
-msgstr --3way außerhalb eines Projektarchivs
+msgstr Die Option --3way kann nicht außerhalb eines Projektarchivs verwendet
+ werden.
 
 #: builtin/apply.c:4392
 msgid --index outside a repository
-msgstr --index außerhalb eines Projektarchivs
+msgstr Die Option --index kann nicht außerhalb eines Projektarchivs verwendet
+ werden.
 
 #: builtin/apply.c:4395
 msgid --cached outside a repository
-msgstr --cached außerhalb eines Projektarchivs
+msgstr Die Option --cached kann nicht außerhalb eines Projektarchivs 
verwendet
+ werden.
 
 #: builtin/apply.c:4411
 #, c-format
@@ -2503,7 +2506,7 @@ msgstr Zweigspitze (HEAD) wurde nicht unter 
\refs/heads\ gefunden!
 
 #: builtin/branch.c:836
 msgid --column and --verbose are incompatible
-msgstr --column und --verbose sind inkompatibel
+msgstr Die Optionen --column und --verbose sind inkompatibel.
 
 #: builtin/branch.c:887
 #, c-format
@@ -2518,8 +2521,8 @@ msgstr Zweig '%s' hat keinen externen Übernahmezweig 
gesetzt
 #: builtin/branch.c:914
 msgid -a and -r options to 'git branch' do not make sense with a branch name
 msgstr 
-Die Optionen -a und -r bei 'git branch' machen mit einem Zweignamen keinen 
-Sinn.
+Die Optionen -a und -r bei 'git branch' können nicht gemeimsam mit einem 
+Zweignamen verwendet werden.
 
 #: builtin/branch.c:917
 #, c-format
@@ -2720,12 +2723,12 @@ msgstr Konnte Ergebnis der Zusammenführung von '%s' 
nicht hinzufügen.
 #: builtin/checkout.c:245
 #, c-format
 msgid '%s' cannot be used with updating paths
-msgstr '%s' kann nicht mit Pfaden benutzt werden
+msgstr '%s' kann nicht mit Pfaden verwendet werden
 
 #: builtin/checkout.c:248 builtin/checkout.c:251
 #, c-format
 msgid '%s' cannot be used with %s
-msgstr '%s' kann nicht mit '%s' benutzt werden
+msgstr '%s' kann nicht mit '%s' verwendet werden
 
 #: builtin/checkout.c:254
 #, c-format
@@ -2849,18 +2852,18 @@ msgstr Referenz ist kein Baum: %s
 
 #: builtin/checkout.c:964
 msgid paths cannot be used with switching branches
-msgstr Pfade können nicht mit dem Wechseln von Zweigen benutzt werden
+msgstr Pfade können nicht mit dem Wechseln von Zweigen verwendet werden
 
 #: builtin/checkout.c:967 builtin/checkout.c:971
 #, c-format
 msgid '%s' cannot be used with switching branches
-msgstr '%s' kann nicht mit dem Wechseln von Zweigen benutzt werden
+msgstr '%s' kann nicht mit dem Wechseln von Zweigen verwendet werden
 
 #: builtin/checkout.c:975 builtin/checkout.c:978 builtin/checkout.c:983
 #: builtin/checkout.c:986
 #, c-format
 msgid '%s' cannot be used with '%s'
-msgstr '%s' kann nicht mit '%s' benutzt werden
+msgstr '%s' kann nicht mit '%s' verwendet werden
 
 #: builtin/checkout.c:991
 #, c-format
@@ -2938,11 +2941,11 @@ msgstr second guess 'git checkout no-such-branch'
 
 #: builtin/checkout.c:1057
 msgid -b, -B and --orphan are mutually exclusive
-msgstr -b, -B und --orphan schliessen sich gegenseitig aus
+msgstr Die Optionen -b, -B und --orphan schließen sich gegenseitig aus.
 
 #: builtin/checkout.c:1074
 msgid --track needs a branch name
-msgstr --track benötigt einen Zweignamen
+msgstr Bei der Option --track muss ein Zweigname angegeben werden.
 
 #: builtin/checkout.c:1081
 msgid Missing branch name; try -b
@@ -3010,7 +3013,7 @@ msgstr löscht nur ignorierte Dateien
 
 #: builtin/clean.c:78
 msgid -x and -X cannot be used together
-msgstr -x und -X können nicht zusammen benutzt werden
+msgstr Die Optionen -x und -X können nicht gemeinsam verwendet werden.
 
 #: builtin/clean.c:82
 msgid 
@@ -3079,7 +3082,7 @@ msgstr um von einem lokalen Projektarchiv zu klonen
 
 #: builtin/clone.c:76
 msgid don't use local hardlinks, always copy
-msgstr benutzt lokal keine harten Links, immer Kopien
+msgstr verwendet lokal keine harten Links, immer Kopien
 
 #: builtin/clone.c:78
 msgid setup as shared 

Re: git interactive rebase 'consume' command

2013-01-21 Thread Stephen Kelly

On 01/21/2013 12:05 PM, Michael Haggerty wrote:

It is perverse to have to turn a well-defined and manifestly
conflict-free wish into one that has a good chance of conflicting, just
because of a limitation of the tool.


Yes, I agree.


I would prefer to be able to mark a commit as 'should be consumed', so that:

  pick 07bc3c9 Good commit.
  consume 1313a5e Commit to fixup into c2f62a3.
  pick c2f62a3 Another commit.

will result in

  pick 07bc3c9 Good commit.
  pick 62a3c2f Another commit.

directly.

Excellent.  But the name is not self-explanatory.  And there is
something different about your consume command:

Normally, pick means that the commit on that line is the start of a
new commit unrelated to its predecessors.  And in general, the command
on one line only affects the lines that come before it, not the lines
that come after it.  Under your proposal consume would change the
meaning of the following line, namely by changing what its pick means.



  It might be more consistent to require the following line to be changed
to squash:


I'm -1 on that. I value the simple format of the todo file. If I want to 
edit a commit, I type deif, reword - deir, fixup - deif. I'd like 
something equally simple like deic for this operation. There's also a 
'consistency' argument there, and one I prefer to your consistency 
interpretation.


The same simplicity request applies to what you write below.

Thanks,

Steve.


 pick 07bc3c9 Good commit.
 consume 1313a5e Commit to fixup into c2f62a3.
 squash c2f62a3 Another commit.

in which case the meaning of consume would be something like pick
this commit but not its commit message.  There would have to be a
prohibition against generating commits with *no* commit messages, to
prevent series like [consume, pick] or [consume, fix, pick] while
allowing series like [consume, consume, squash, fix, fix].

If this is the interpretation, the name quiet/q might make things clearer.

Yet another approach would be to allow options on the commands.  For
example,

 pick 07bc3c9 Good commit.
 pick --quiet 1313a5e Commit to fixup into c2f62a3.
 squash c2f62a3 Another commit.

In fact if options were implemented, then fixup would mean the same as
squash --quiet, reword could be written pick --edit, and I'm sure
the new flexibility would make it easier to add other features (e.g.,
pick --reset-author).

Michael



--
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] git rm -u

2013-01-21 Thread Piotr Krukowiecki
On Mon, Jan 21, 2013 at 10:23 AM, Junio C Hamano gits...@pobox.com wrote:
 No.  This is only about git add -uRETURN, not any other forms of
 git add ...with or without other args

 git add -uRETURN historically meant, and it still means, to
 update the index with every change in the working tree, even when
 you are in a subdirectory.

But it *currently* limits itself to a subdirectory - does not work on
whole tree:

piotr@PIOTR-X73 ~/dv/test/dir1 (master)
$ git status
# On branch master
# Changes not staged for commit:
#   (use git add file... to update what will be committed)
#   (use git checkout -- file... to discard changes in working directory)
#
#   modified:   dir2/file2.txt
#   modified:   file1.txt
#   modified:   ../file.txt
#
no changes added to commit (use git add and/or git commit -a)

piotr@PIOTR-X73 ~/dv/test/dir1 (master)
$ git add -u

piotr@PIOTR-X73 ~/dv/test/dir1 (master)
$ git status
# On branch master
# Changes to be committed:
#   (use git reset HEAD file... to unstage)
#
#   modified:   dir2/file2.txt
#   modified:   file1.txt
#
# Changes not staged for commit:
#   (use git add file... to update what will be committed)
#   (use git checkout -- file... to discard changes in working directory)
#
#   modified:   ../file.txt
#

piotr@PIOTR-X73 ~/dv/test/dir1 (master)
$ git --version
git version 1.8.0.msysgit.0



--
Piotr Krukowiecki
--
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 v3 0/6] GIT, Git, git

2013-01-21 Thread Thomas Ackermann
Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
(as can be seen in the corresponding release note where 'GIT' was 
changed to 'Git' in the header line).
 
Alas the documention uses 'GIT', 'Git' or even 'git' to refer to the
Git system. So change every occurrence of 'GIT and 'git' in the 
documention  to 'Git' whenever Git as a system is referred to 
(but don't do this change in the release notes because they 
constitute a history orthogonal to the history versioned by Git).
 
There is also one occurence of 'GITweb' which is changed to 'Gitweb' but
changing 'gitweb' to 'Gitweb' (or 'GitWeb'?) should be part of another
patch.
 
The 'git' to 'Git' patch has to be divided in four parts to stay within
the mail size limit of 100kB (sorry for the noise with v2 of this series).
 
[PATCH v3 1/6] Change old system name 'GIT' to 'Git'
[PATCH v3 2/6] Change 'git' to 'Git' whenever the whole system is referred to #1
[PATCH v3 3/6] Change 'git' to 'Git' whenever the whole system is referred to #2
[PATCH v3 4/6] Change 'git' to 'Git' whenever the whole system is referred to #3
[PATCH v3 5/6] Change 'git' to 'Git' whenever the whole system is referred to #4
[PATCH v3 6/6] Add rule for when to use 'git' and when to use 'Git'


---
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: [RFC/PATCH] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Junio C Hamano
Matthieu Moy matthieu@imag.fr writes:

 Most git commands that can be used with our without a filepattern are
 tree-wide by default, the filepattern being used to restrict their scope.
 A few exceptions are: 'git grep', 'git clean', 'git add -u' and 'git add -A'.

 The inconsistancy of 'git add -u' and 'git add -A' are particularly
 problematic since other 'git add' subcommands (namely 'git add -p' and
 'git add -e') are tree-wide by default.

 Flipping the default now is unacceptable, so this patch starts training
 users to type explicitely 'git add -u|-A :/' or 'git add -u|-A .', to prepare
 for the next steps:

 * forbid 'git add -u|-A' without filepattern (like 'git add' without
   option)

 * much later, maybe, re-allow 'git add -u|-A' without filepattern, with a
   tree-wide scope.

 A nice side effect of this patch is that it makes the :/ special
 filepattern easier to discover for users.

Nicely explained.

 The first step should look like this patch. The message remains vague
 about the next steps (change in a future Git version, no mention of
 the exact change nor of the exact version in which it will happen),
 but I'm fine with refining it (perhaps this could be a 2.0 change,
 like the change to push.default?).

I think rolling big changes line these to a single version bump
would make sense, if we were to do it.

I have to wonder if git add -p and git add -e are the ones that
are broken, and the migration suggested here is going in the wrong
direction, though.  After all add -p and add -e are interactive
by their nature, so it is a _lot_ easier to change their default
behaviour in the name of usability fix, consistency fix, or
whatever.  Wouldn't we achieve the same consistency across modes of
add if we made them relative to the current directory?
--
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 v3 1/6] Change old system name 'GIT' to 'Git'

2013-01-21 Thread Thomas Ackermann
Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
(as can be seen in the corresponding release note where 'GIT' was
changed to 'Git' in the header line). So change every occurrence
of 'GIT in the documention to 'Git'.

Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/asciidoc.conf |  2 +-
 Documentation/everyday.txt  |  4 ++--
 Documentation/git-clone.txt |  2 +-
 Documentation/git-cvsexportcommit.txt   |  2 +-
 Documentation/git-cvsserver.txt |  8 
 Documentation/git-daemon.txt|  4 ++--
 Documentation/git-mv.txt|  2 +-
 Documentation/git-send-email.txt|  2 +-
 Documentation/git-tools.txt | 14 +++---
 Documentation/git-update-ref.txt|  2 +-
 Documentation/git.txt   |  2 +-
 Documentation/gitcore-tutorial.txt  |  4 ++--
 Documentation/gitglossary.txt   |  2 +-
 Documentation/gittutorial.txt   |  2 +-
 Documentation/gitweb.txt|  2 +-
 Documentation/gitworkflows.txt  |  2 +-
 Documentation/glossary-content.txt  |  2 +-
 Documentation/howto-index.sh|  2 +-
 Documentation/howto/rebase-from-internal-branch.txt |  6 +++---
 Documentation/howto/revert-branch-rebase.txt|  4 ++--
 Documentation/howto/setup-git-server-over-http.txt  |  4 ++--
 Documentation/technical/api-index-skel.txt  |  4 ++--
 Documentation/technical/index-format.txt|  6 +++---
 Documentation/technical/pack-format.txt |  4 ++--
 Documentation/user-manual.txt   |  4 ++--
 25 files changed, 46 insertions(+), 46 deletions(-)

diff --git a/Documentation/asciidoc.conf b/Documentation/asciidoc.conf
index 1273a85..2c16c53 100644
--- a/Documentation/asciidoc.conf
+++ b/Documentation/asciidoc.conf
@@ -4,7 +4,7 @@
 #
 # Note, {0} is the manpage section, while {target} is the command.
 #
-# Show GIT link as: command(section); if section is defined, else just show
+# Show Git link as: command(section); if section is defined, else just show
 # the command.
 
 [macros]
diff --git a/Documentation/everyday.txt b/Documentation/everyday.txt
index 048337b..6acfd33 100644
--- a/Documentation/everyday.txt
+++ b/Documentation/everyday.txt
@@ -1,4 +1,4 @@
-Everyday GIT With 20 Commands Or So
+Everyday Git With 20 Commands Or So
 ===
 
 Individual Developer (Standalone) commands are essential for
@@ -229,7 +229,7 @@ commands in addition to the ones needed by participants.
 Examples
 
 
-My typical GIT day.::
+My typical Git day.::
 +
 
 $ git status 1
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 7fefdb0..597048b 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -125,7 +125,7 @@ objects from the source repository into a pack in the 
cloned repository.
No checkout of HEAD is performed after the clone is complete.
 
 --bare::
-   Make a 'bare' GIT repository.  That is, instead of
+   Make a 'bare' Git repository.  That is, instead of
creating `directory` and placing the administrative
files in `directory/.git`, make the `directory`
itself the `$GIT_DIR`. This obviously implies the `-n`
diff --git a/Documentation/git-cvsexportcommit.txt 
b/Documentation/git-cvsexportcommit.txt
index 7f79cec..a671e22 100644
--- a/Documentation/git-cvsexportcommit.txt
+++ b/Documentation/git-cvsexportcommit.txt
@@ -15,7 +15,7 @@ SYNOPSIS
 
 DESCRIPTION
 ---
-Exports a commit from GIT to a CVS checkout, making it easier
+Exports a commit from Git to a CVS checkout, making it easier
 to merge patches from a git repository into a CVS repository.
 
 Specify the name of a CVS checkout using the -w switch or execute it
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt
index 88d814a..36d069b 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.txt
@@ -72,9 +72,9 @@ plugin. Most functionality works fine with both of these 
clients.
 LIMITATIONS
 ---
 
-CVS clients cannot tag, branch or perform GIT merges.
+CVS clients cannot tag, branch or perform Git merges.
 
-'git-cvsserver' maps GIT branches to CVS modules. This is very different
+'git-cvsserver' maps Git branches to CVS modules. This is very different
 from what most CVS users would expect since in CVS modules usually represent
 one or more directories.
 
@@ -130,7 +130,7 @@ Then provide your password via the pserver method, for 
example:
 --
cvs -d:pserver:someuser:somepassword at server/path/repo.git co 
HEAD_name
 --
-No special setup is needed for SSH access, other than having GIT tools
+No special setup is 

Re: [PATCH] l10n: de.po: fix some minor issues

2013-01-21 Thread Thomas Rast
Ralf Thielow ralf.thie...@gmail.com writes:

 This fixes some minor issues and improves the
 German translation a bit. The following things
 were changed:
 - use complete sentences in option related messages
 - translate use consistently as verwendet
 - don't translate make sense as macht Sinn

 Signed-off-by: Ralf Thielow ralf.thie...@gmail.com

It would be easier on the reviewers if you could split out such
searchreplace changes as s/benutzt/verwendet/ into a separate patch.

I'm not sure though which one would be more error-prone.  As it stands,
it's very tiring to review because of the very similar s/// changes, and
I am unlikely to spot any other change or mistake in a message that
undergoes the substitution.  With my proposal, I'd just skip reviewing
the s/// patch :-)

[No, don't change it for this patch; not worth the splitting effort.]

  #: builtin/checkout.c:964
  msgid paths cannot be used with switching branches
 -msgstr Pfade können nicht mit dem Wechseln von Zweigen benutzt werden
 +msgstr Pfade können nicht mit dem Wechseln von Zweigen verwendet werden
  
  #: builtin/checkout.c:967 builtin/checkout.c:971
  #, c-format
  msgid '%s' cannot be used with switching branches
 -msgstr '%s' kann nicht mit dem Wechseln von Zweigen benutzt werden
 +msgstr '%s' kann nicht mit dem Wechseln von Zweigen verwendet werden

Not new, but they sound a bit strange to me.  Perhaps kann nicht *beim*
Wechseln von Zweigen verwendet werden?

  #: builtin/clone.c:734
  #, c-format
 @@ -3293,7 +3297,7 @@ msgstr Abstand zwischen Spalten
  
  #: builtin/column.c:51
  msgid --command must be the first argument
 -msgstr Option --command muss zuerst angegeben werden
 +msgstr Die Option --command muss zuerst angegeben werden.

Not new either, but also took a second reading.  Maybe muss an erster
Stelle stehen?

  #: builtin/describe.c:482
  msgid --dirty is incompatible with committishes
 -msgstr --dirty ist inkompatibel mit Versionen
 +msgstr Die Option --dirty ist inkompatibel mit Versionen.

I think in this case it would sound nicer if you used the Die Option
--dirty kann nicht mit Versionen verwendet werden pattern instead of
the inkompatibel one.

  #: builtin/grep.c:866
  msgid --open-files-in-pager only works on the worktree
 -msgstr --open-files-in-pager arbeitet nur innerhalb des Arbeitsbaums
 +msgstr Die Option --open-files-in-pager kann nur innerhalb des 
 +Arbeitsbaums.

...  verwendet werden!

  #: builtin/grep.c:897
  msgid --[no-]exclude-standard cannot be used for tracked contents.
 -msgstr 
 ---[no-]exlude-standard kann nicht mit beobachteten Inhalten benutzt werden
 +msgstr Die Option --[no-]exlude-standard kann nicht mit beobachteten 
 +Inhalten verwendet werden.

Typo in --no-exClude-standard.  (It was in the old version, too.)

  #: builtin/log.c:1218
  msgid --name-only does not make sense
 -msgstr --name-only macht keinen Sinn
 +msgstr Die Option --name-only kann nicht verwendet werden.

If you were curious as to the point of the message (even in English):
it's only triggered by format-patch.

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
--
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 v3 6/6] Add rule for when to use 'git' and when to use 'Git'

2013-01-21 Thread Thomas Ackermann

Signed-off-by: Thomas Ackermann th.ac...@arcor.de
---
 Documentation/CodingGuidelines | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 5e60daf..4f40b44 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -230,3 +230,9 @@ Writing Documentation:
valid usage.  * has its own pair of brackets, because it can
(optionally) be specified only when one or more of the letters is
also provided.
+
+  A note on notation:
+   Use 'git' (all lowercase) when talking about commands i.e. something
+   the user would type into a shell and use 'Git' (uppercase first letter) 
+   when talking about the version control system and its properties.
+   
-- 
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


Re: [PATCH 1/2] Update :/abc ambiguity check

2013-01-21 Thread Junio C Hamano
Nguyễn Thái Ngọc Duy  pclo...@gmail.com writes:

 :/abc may mean two things:

 - as a revision, it means the revision that has abc in commit
   message.

 - as a pathpec, it means abc from root.

 Currently we see :/abc as a rev (most of the time), but never see it
 as a pathspec even if abc exists and git log :/abc will gladly
 take :/abc as rev even it's ambiguous. This patch makes it:

 - ambiguous when abc exists on worktree
 - a rev if abc does not exist on worktree
 - a path if abc is not found in any commits (although better use

The any commits above sounds very scary. Are you really going to
check against all the commits?

   -- to avoid ambiguation because searching through commit DAG is
   expensive)

 A plus from this patch is, because :/ never matches anything as a
 rev, it is never considered a valid rev and because root directory
 always exists, :/ is always unambiguously seen as a pathspec.

That is the primary plus in practice, I think, and it is a big one.

When naming a directory that belongs to a different subdirectory
hierarchy, typing :/that/directory/name is not any easier than
having your shell help you complete ../../that/directory/name; I
suspect nobody uses the relative-to-root notation to name anything
but the root in real life.
--
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: GIT get corrupted on lustre

2013-01-21 Thread Thomas Rast
Please don't drop the Cc list!

Brian J. Murrell br...@interlinx.bc.ca writes:

 What's odd is that while I cannot reproduce the original problem, there
 seems to be another issue/bug with utime():

 I wonder if this is related to http://jira.whamcloud.com/browse/LU-305.
  That was reported as fixed in Lustre 2.0.0 and 2.1.0 but I thought I
 saw it on 2.1.1 and added a comment to the above ticket about that.

Aha, that's a very interesting bug report.  My observations support
yours: I managed to get EINTR during utime().

 In the absence of it, wouldn't we in theory have to write a simple
 loop-on-EINTR wrapper for *all* syscalls?

 IIUC, that's what SA_RESTART is all about.

Yes, but there's precious little clear language on when SA_RESTART is
supposed to act.  In all cases?

The wording on

  http://www.delorie.com/gnu/docs/glibc/libc_485.html
  http://www.delorie.com/gnu/docs/glibc/libc_498.html

leads me to believe that SA_RESTART is actually used on the glibc side
of things, so that any glibc syscall wrapper not specifically equipped
with the restarting behavior would return EINTR unmodified.  This might
explain why utime() doesn't restart like it should (assuming we work on
the theory that POSIX doesn't allow an EINTR from utime() to begin
with).

-- 
Thomas Rast
trast@{inf,student}.ethz.ch
--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Piotr Krukowiecki
On Mon, Jan 21, 2013 at 8:12 PM, Junio C Hamano gits...@pobox.com wrote:
 Matthieu Moy matthieu@imag.fr writes:

 Most git commands that can be used with our without a filepattern are
 tree-wide by default, the filepattern being used to restrict their scope.
 A few exceptions are: 'git grep', 'git clean', 'git add -u' and 'git add -A'.

 The inconsistancy of 'git add -u' and 'git add -A' are particularly
 problematic since other 'git add' subcommands (namely 'git add -p' and
 'git add -e') are tree-wide by default.

 Flipping the default now is unacceptable, so this patch starts training
 users to type explicitely 'git add -u|-A :/' or 'git add -u|-A .', to prepare
 for the next steps:

 * forbid 'git add -u|-A' without filepattern (like 'git add' without
   option)

 * much later, maybe, re-allow 'git add -u|-A' without filepattern, with a
   tree-wide scope.


 I have to wonder if git add -p and git add -e are the ones that
 are broken, and the migration suggested here is going in the wrong
 direction, though.  After all add -p and add -e are interactive
 by their nature, so it is a _lot_ easier to change their default
 behaviour in the name of usability fix, consistency fix, or
 whatever.  Wouldn't we achieve the same consistency across modes of
 add if we made them relative to the current directory?

Consistency is one issue. +1 for having consistent behavior. But even
if all git add modes work consistently on current subdirectory, they
will be inconsistent with other git command, for example git status
or git diff. I think it'd be better to have all git command work the
same (is that possible? is there a list of all commands which work on
current dir vs those working on whole tree?). I believe changing all
commands to work on current subdir is not an option.

Another issue is usability. Can we definitely say which is better: add
all changes from current subdir, or add all changes from whole tree? I
don't know. At the moment I think whole tree is better. That's usually
what I want. If I want to add only some changes, I first list the
status or run diff, and then explicitly say what to add. OTOH add is
kind of dangerous command - adding content to index is not reversible
(i.e. if there already is a previous version in index with changes,
add will overwrite it). But at the same time, another dangerous
command, git add -a works on whole tree. I use it frequently and
never had any problem with it.

So, from me +1 on making all commands work on whole tree.

--
Piotr Krukowiecki
--
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 v2 0/6] GIT, Git, git

2013-01-21 Thread Junio C Hamano
Thomas Ackermann th.ac...@arcor.de writes:

 Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
 (as can be seen in the corresponding release note where 'GIT' was 
 changed to 'Git' in the header line).

Didn't I already say that we never changed the name?  The same
description seems to appear in [1/6] 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: [PATCH v2 0/6] GIT, Git, git

2013-01-21 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 Thomas Ackermann th.ac...@arcor.de writes:

 Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
 (as can be seen in the corresponding release note where 'GIT' was 
 changed to 'Git' in the header line).

 Didn't I already say that we never changed the name?  The same
 description seems to appear in [1/6] as well.

What we stopped doing was to use poor man's small caps.  I do
agree the change in 1/6 to run s/GIT/Git/ is the right thing to do.
--
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] git rm -u

2013-01-21 Thread Matthieu Moy
Junio C Hamano gits...@pobox.com writes:

 But v1.5.2.5~1 (git-add -u paths... now works from subdirectory,
 2007-08-16) changed the semantics to limit the operation to the
 working tree.

Not really. It fixed git add -u path, not plain git add -u. A quick
test checking out and compiling v1.5.2.5~1^ shows that git add -u .
from a subdirectory was adding everything from the root.

My interpretation is that v1.5.2.5~1 fixed an actual bug, without
thinking about what would happen when git add -u was called without
path, so the behavior is what happens to be the most natural to
implement. Indeed, the behavior was actually documented only later, in
v1.5.4.3~3 (Feb 21 00:29:39 2008, Clarified the meaning of git-add -u in
the documentation), the previous doc said only If no paths are
specified, all tracked files are updated..

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Matthieu Moy
Piotr Krukowiecki piotr.krukowie...@gmail.com writes:

 Another issue is usability. Can we definitely say which is better: add
 all changes from current subdir, or add all changes from whole tree? I
 don't know.

Hard to tell, depending on users, use-case, ...

But the good news is: whatever option is chosen, the other one is only a
few keystrokes away (git add -u . or git add -u :/).

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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


[PATCHv2] l10n: de.po: fix some minor issues

2013-01-21 Thread Ralf Thielow
This fixes some minor issues and improves the
German translation a bit. The following things
were changed:
- use complete sentences in option related messages
- translate use consistently as verwendet
- don't translate make sense as macht Sinn

Signed-off-by: Ralf Thielow ralf.thie...@gmail.com
---

2013/1/21 Thomas Rast tr...@inf.ethz.ch:
 Ralf Thielow ralf.thie...@gmail.com writes:

[...]
 It would be easier on the reviewers if you could split out such
 searchreplace changes as s/benutzt/verwendet/ into a separate patch.


Yeah, I'll do so next time.

Thanks for your comments.

Ralf

 po/de.po | 205 +--
 1 file changed, 109 insertions(+), 96 deletions(-)

diff --git a/po/de.po b/po/de.po
index c8ad2f0..d3f4913 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1550,12 +1550,12 @@ msgstr Hinzufügen von Dateien fehlgeschlagen
 
 #: builtin/add.c:392
 msgid -A and -u are mutually incompatible
-msgstr -A und -u sind zueinander inkompatibel
+msgstr Die Optionen -A und -u sind zueinander inkompatibel.
 
 #: builtin/add.c:394
 msgid Option --ignore-missing can only be used together with --dry-run
 msgstr 
-Die Option --ignore-missing kann nur zusammen mit --dry-run benutzt werden.
+Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden.
 
 #: builtin/add.c:414
 #, c-format
@@ -2045,15 +2045,18 @@ msgstr stellt Wurzelverzeichnis vor alle Dateinamen
 
 #: builtin/apply.c:4384
 msgid --3way outside a repository
-msgstr --3way außerhalb eines Projektarchivs
+msgstr Die Option --3way kann nicht außerhalb eines Projektarchivs verwendet
+ werden.
 
 #: builtin/apply.c:4392
 msgid --index outside a repository
-msgstr --index außerhalb eines Projektarchivs
+msgstr Die Option --index kann nicht außerhalb eines Projektarchivs verwendet
+ werden.
 
 #: builtin/apply.c:4395
 msgid --cached outside a repository
-msgstr --cached außerhalb eines Projektarchivs
+msgstr Die Option --cached kann nicht außerhalb eines Projektarchivs 
verwendet
+ werden.
 
 #: builtin/apply.c:4411
 #, c-format
@@ -2503,7 +2506,7 @@ msgstr Zweigspitze (HEAD) wurde nicht unter 
\refs/heads\ gefunden!
 
 #: builtin/branch.c:836
 msgid --column and --verbose are incompatible
-msgstr --column und --verbose sind inkompatibel
+msgstr Die Optionen --column und --verbose sind inkompatibel.
 
 #: builtin/branch.c:887
 #, c-format
@@ -2518,8 +2521,8 @@ msgstr Zweig '%s' hat keinen externen Übernahmezweig 
gesetzt
 #: builtin/branch.c:914
 msgid -a and -r options to 'git branch' do not make sense with a branch name
 msgstr 
-Die Optionen -a und -r bei 'git branch' machen mit einem Zweignamen keinen 
-Sinn.
+Die Optionen -a und -r bei 'git branch' können nicht gemeimsam mit einem 
+Zweignamen verwendet werden.
 
 #: builtin/branch.c:917
 #, c-format
@@ -2720,12 +2723,12 @@ msgstr Konnte Ergebnis der Zusammenführung von '%s' 
nicht hinzufügen.
 #: builtin/checkout.c:245
 #, c-format
 msgid '%s' cannot be used with updating paths
-msgstr '%s' kann nicht mit Pfaden benutzt werden
+msgstr '%s' kann nicht mit Pfaden verwendet werden
 
 #: builtin/checkout.c:248 builtin/checkout.c:251
 #, c-format
 msgid '%s' cannot be used with %s
-msgstr '%s' kann nicht mit '%s' benutzt werden
+msgstr '%s' kann nicht mit '%s' verwendet werden
 
 #: builtin/checkout.c:254
 #, c-format
@@ -2849,18 +2852,18 @@ msgstr Referenz ist kein Baum: %s
 
 #: builtin/checkout.c:964
 msgid paths cannot be used with switching branches
-msgstr Pfade können nicht mit dem Wechseln von Zweigen benutzt werden
+msgstr Pfade können nicht beim Wechseln von Zweigen verwendet werden
 
 #: builtin/checkout.c:967 builtin/checkout.c:971
 #, c-format
 msgid '%s' cannot be used with switching branches
-msgstr '%s' kann nicht mit dem Wechseln von Zweigen benutzt werden
+msgstr '%s' kann nicht beim Wechseln von Zweigen verwendet werden
 
 #: builtin/checkout.c:975 builtin/checkout.c:978 builtin/checkout.c:983
 #: builtin/checkout.c:986
 #, c-format
 msgid '%s' cannot be used with '%s'
-msgstr '%s' kann nicht mit '%s' benutzt werden
+msgstr '%s' kann nicht mit '%s' verwendet werden
 
 #: builtin/checkout.c:991
 #, c-format
@@ -2938,11 +2941,11 @@ msgstr second guess 'git checkout no-such-branch'
 
 #: builtin/checkout.c:1057
 msgid -b, -B and --orphan are mutually exclusive
-msgstr -b, -B und --orphan schliessen sich gegenseitig aus
+msgstr Die Optionen -b, -B und --orphan schließen sich gegenseitig aus.
 
 #: builtin/checkout.c:1074
 msgid --track needs a branch name
-msgstr --track benötigt einen Zweignamen
+msgstr Bei der Option --track muss ein Zweigname angegeben werden.
 
 #: builtin/checkout.c:1081
 msgid Missing branch name; try -b
@@ -3010,7 +3013,7 @@ msgstr löscht nur ignorierte Dateien
 
 #: builtin/clean.c:78
 msgid -x and -X cannot be used together
-msgstr -x und -X können nicht zusammen benutzt werden
+msgstr Die Optionen -x und -X können nicht gemeinsam verwendet werden.
 
 #: builtin/clean.c:82
 msgid 
@@ -3079,7 +3082,7 @@ 

Re: [RFC/PATCH] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Matthieu Moy
Junio C Hamano gits...@pobox.com writes:

 Wouldn't we achieve the same consistency across modes of
 add if we made them relative to the current directory?

As other people already said, it would be nice to have consistency
accross most if not all commands. AFAICT, the only exceptions to
tree-wide by default, say '.' to restrict to subdirectory are git add
-u|-A, git grep and git clean.

Arguably, the subtree by default is a safety feature of git clean,
and should be kept.

I don't care too deepely about git grep. From previous discussions,
IIRC, other people didn't care either.

On the other hand, I can think of at least git log, git diff, git
status and to some extend git commit as tree-wide by default with
optional path restriction. I'd like git add to be on the same side.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Robin Rosenberg


- Ursprungligt meddelande -

  git diff
  #looks good
  git add -u
 
 That's indeed the kind of mistake I'd like to avoid. In your example,
 git diff is tree-wide, and git add -u is limited to ., so in
 general
 git add -u won't stage the same thing as git diff just showed.

Good point. I rarely cd to anything but the top of the tree, but that
might be just me. OTOH, git diff after -u would remind me. It would bad if -u 
was tree wide and diff wasn't, but fortunately that's not the case.

The -A is a bit worse since it adds all the crap files lying around.

-- robin
--
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 v3 0/2] Make git-svn work with gitdir links

2013-01-21 Thread Philip Oakley

From: Joachim Schmitz j...@schmitz-digital.de
Sent: Monday, January 21, 2013 2:19 PM

Junio C Hamano wrote:

Barry Wardell barry.ward...@gmail.com writes:

[...]

Thanks for your persistence ;-) As this is a pretty old topic, I'll
give two URLs for people who are interested to view the previous
threads:

   http://thread.gmane.org/gmane.comp.version-control.git/192133
   http://thread.gmane.org/gmane.comp.version-control.git/192127

You would want to mark it as test_expect_failure in the first patch
and then flip it to text_expect_success in the second patch where
you fix the breakage?  Otherwise, after applying the first patch,
the testsuite will break needlessly.


I'd just apply them the other way round, 1st fix the problem, 2nd add 
a test for it


Isn't it a case of, 1st demonstrate the problem with a test, and then 
2nd  fix the problem.


Those less principled could could simply fix a non-existent problem 
merely to get themselves into the change log, or worse, even if one may 
fix-test under the hood.




Bye, Jojo


Philip 


--
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 v3 0/2] Make git-svn work with gitdir links

2013-01-21 Thread Junio C Hamano
Philip Oakley philipoak...@iee.org writes:

 From: Joachim Schmitz j...@schmitz-digital.de
 Sent: Monday, January 21, 2013 2:19 PM
 Junio C Hamano wrote:
 Barry Wardell barry.ward...@gmail.com writes:
 [...]
 Thanks for your persistence ;-) As this is a pretty old topic, I'll
 give two URLs for people who are interested to view the previous
 threads:

http://thread.gmane.org/gmane.comp.version-control.git/192133
http://thread.gmane.org/gmane.comp.version-control.git/192127

 You would want to mark it as test_expect_failure in the first patch
 and then flip it to text_expect_success in the second patch where
 you fix the breakage?  Otherwise, after applying the first patch,
 the testsuite will break needlessly.

 I'd just apply them the other way round, 1st fix the problem, 2nd
 add a test for it

 Isn't it a case of, 1st demonstrate the problem with a test, and then
 2nd  fix the problem.

 Those less principled could could simply fix a non-existent problem
 merely to get themselves into the change log, or worse, even if one
 may fix-test under the hood.

For a small/trivial fix, fixing the code and protecting the fix from
future breakages by adding tests that expect success in a single
commit is the most sensible thing to do.  People who are interested,
and people who are auditing, can locally revert only the code change
to see the new tests fail fairly easily in such a case.

For a more involved series, it is easier to demonstrate a breakage
by adding tests that expect failure in the first commit, and then in
subsequent commits, to fix a class of bugs in the code and flipping
expect_failure into expect_success for the tests that the updated
code in the commit fixes.

For this particular topic, squashing the two patches into a single
commit may probably be the more appropriate between the two.

Thanks.
--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Jonathan Nieder
Hi,

Matthieu Moy wrote:

 The inconsistancy of 'git add -u' and 'git add -A' are particularly
 problematic since other 'git add' subcommands (namely 'git add -p' and
 'git add -e') are tree-wide by default.

 Flipping the default now is unacceptable, so this patch starts training
 users to type explicitely 'git add -u|-A :/' or 'git add -u|-A .', to prepare
 for the next steps:

Thanks for tackling this.

 --- a/builtin/add.c
 +++ b/builtin/add.c
[...]
 + if (option_with_implicit_dot  !argc) {
 + /*
 +  * To be consistant with git add -p and most Git
 +  * commands, we should default to being tree-wide, but
 +  * this is not the original behavior and can't be
 +  * changed until users trained themselves not to type
 +  * git add -u or git add -A. For now, we warn and
 +  * keep the old behavior. Later, this warning can be
 +  * turned into a die(...), and eventually we may
 +  * reallow the command with a new behavior.
 +  */
 + warning(_(The behavior of 'git add %s' with no path argument 
 will change in a future\n

Would it be possible to make this conditional on cwd not being at the
toplevel (the case where git add -u :/ and git add -u . have
different behavior)?  E.g.,

static const char *here[2] = { ., NULL };
if (prefix)
warning(...);

Thanks,
Jonathan
--
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


[RFC] Instruct git-completion.bash that we are in test mode

2013-01-21 Thread Jean-Noël AVILA
In test mode, git completion should only propose core commands.

Signed-off-by: Jean-Noel Avila jn.av...@free.fr
---

I reworked the patch so that the test argument is only evaluated
when sourcing the file and there is no environment clutter.

At least, it works for me.

 contrib/completion/git-completion.bash | 8 +++-
 t/t9902-completion.sh  | 2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 14dd5e7..ac9fa65 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -531,10 +531,16 @@ __git_complete_strategy ()
return 1
 }
 
+if [ x$1 != xTEST ]; then
+   __git_cmdlist () { git help -a|egrep '^  [a-zA-Z0-9]'; }
+else
+   __git_cmdlist () { git help -a| egrep -m 1 -B1000 PATH | egrep '^  
[a-zA-Z0-9]'; }
+fi
+
 __git_list_all_commands ()
 {
local i IFS= $'\n'
-   for i in $(git help -a|egrep '^  [a-zA-Z0-9]')
+   for i in $(__git_cmdlist)
do
case $i in
*--*) : helper pattern;;
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 3cd53f8..51463b2 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -13,7 +13,7 @@ complete ()
return 0
 }
 
-. $GIT_BUILD_DIR/contrib/completion/git-completion.bash
+. $GIT_BUILD_DIR/contrib/completion/git-completion.bash TEST
 
 # We don't need this function to actually join words or do anything special.
 # Also, it's cleaner to avoid touching bash's internal completion variables.
-- 
1.8.1.1.271.g02f55e6

--
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] Hiding some refs in ls-remote

2013-01-21 Thread Jeff King
On Sat, Jan 19, 2013 at 11:16:00AM -0800, Junio C Hamano wrote:

 For example, if you mirror-clone from either of my repositories from
 GitHub:
 
 git clone --mirror git://github.com/git/git/
 git clone --mirror git://github.com/gitster/git/
 
 you will see stuff that does not belong to the project; objects that
 are only reachable from refs/pull/* are not something I approved to
 be placed in my repository; I as the project owner do not want to
 give these objects to a cloner as if they are part of my project.
 
 The server side can hide refs/pull/ and refs/pull-request-tags/ so
 that clones (and ls-remote) will not see clutter, and nobody gets
 hurt.

I think it is unfortunately not so simple as that. You do not want them
to be part of your clone --mirror, but some people do (because they
will inspect them when evaluating the pull request). And that decision
is, I think, in the eye of the cloner, not the eye of the repo owner. I
think in your case it is a little harder to see, in that you do not care
about the PR mechanism for git.git at all, but let us think for a minute
about a project that actually uses PRs.

For an ordinary developer, they would be content to fetch the branch
tips and tags (and that is what we do by default with git clone). They
do not need to fetch all of refs/pull. If they learn out-of-band that PR
123 exists, they can in theory ask for refs/pull/123/head. That works
even with your proposal, because it is just about dropping the
advertisement, not the availability of refs.

But what about entities which really do want all of refs/pull?  I can
think of two good reasons to want them:

  1. You really do want a mirror, because you are creating a backup or
 alternate distribution channel. IOW, you are using git clone
 --mirror, but it is missing those refs.

  2. You are a developer who is sometimes disconnected. You want to
 fetch all of the PRs, and then examine them at your leisure.

Without advertising, how do they ask for the wildcard of `refs/pull/*`?
They're stuck massaging some out-of-band data into a set of distinct
fetch refspecs.

I don't know much about what's in Gerrit's refs/changes, but I imagine
one could make a similar argument that their value is in the eye of the
client. And later you give this example:

 Another example.  If you run ls-remote against the above two
 repositories, you will notice that the latter has tons more
 branches.  The former are to publish only the primary integration
 branches, while the latter are to show individual topics.
 
 I wish I didn't have to do this if I could.
 
 We have periodical What's cooking postings that let interested
 parties learn topics out-of-band.  If I can hide refs/heads/??/*
 from normal users' clones while actually keeping individual topics
 there at the same place, I do not have to push into two places.

Most people do not want to see those heads. But some people (like me)
do, and it is a great convenience to be able to fetch them all with a
wildcard refspec, which cannot work if they are not advertised. I would
have to parse what's cooking and fetch them each individually. That's
not a technologically insurmountable problem, but it means git is being
a lot less helpful than it could be.


So I think in these cases of extra refs, some clients would want them,
and some would not. And only they can know which camp they are in, not
the server side. Which is why the current system works pretty well: we
advertise everything and let the client decide what it wants. Clone very
sanely fetches only refs/heads/* (and associated tags), and you can put
whatever extra junk you want elsewhere in the hierarchy. A mirrored
clone will fetch it, but to me that is the point of --mirror. And if you
want some arbitrary subset, then you can implement that, too, by the
use of fetch refspecs[1].

The downside, of course, is that the ref advertisement is bigger than
many clients will want. But dealing with that is a separate issue from
these refs should never be shown, as solutions for one may not work
from the other (e.g., if we delayed ref advertisement until the client
had spoken, the client could tell us what refspecs they are interested
in).

For your topic branch example, why don't you push to refs/topics of the
main git repository? Then normal cloners wouldn't see it, but anybody
interested could add the appropriate fetch refspec.

-Peff

[1] It may be that refspecs are not as expressive as we would like,
but that is a client side problem we can deal with. For instance,
you cannot currently say give me everything except refs/foo/*.
--
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] Hiding some refs in ls-remote

2013-01-21 Thread Jeff King
On Sun, Jan 20, 2013 at 02:08:32PM -0800, Junio C Hamano wrote:

 Junio C Hamano gits...@pobox.com writes:
 
  Jeff King p...@peff.net writes:
 
[uploadPack]
hiderefs = refs/changes
 
  Would you want to do the same thing on receive-pack? It could benefit
  from the same reduction in network cost (although it tends to be invoked
  less frequently than upload-pack).
  ...
  As I said, I view this primarily as solving the cluttering issue.
  The use of hiderefs to hide these refs that point at objects I do
  not consider belong to my repository from the pushers equally makes
  sense as such, I think.
 
 Now that raises one question.  Should this be transfer.hiderefs that
 governs both upload-pack and receive-pack?  I tend to think the
 answer is yes.

Yes, that is what I was getting at (and it should have individual
hiderefs for each side that override the transfer.*, in case somebody
wants to make the distinction).

 It may even make sense to have git push honor it, excluding them
 from git push --mirror (or git push --all if some of the
 branches are hidden); I haven't thought things through, though.

That is harder, as that is something that happens on the client. How
does the client learn about the transfer.hiderefs setting on the remote?
It has to be out-of-band, at which point calling it by the same name has
little benefit.

-Peff
--
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] Hiding some refs in ls-remote

2013-01-21 Thread Jeff King
On Sun, Jan 20, 2013 at 10:06:33AM -0800, Junio C Hamano wrote:

 Jeff King p...@peff.net writes:
 
 [uploadPack]
 hiderefs = refs/changes
 
  Would you want to do the same thing on receive-pack? It could benefit
  from the same reduction in network cost (although it tends to be invoked
  less frequently than upload-pack).
 
 Do *I* want to do?  Not when there already is a patch exists; I'd
 rather take existing and tested patch ;-)

The patch we have is below, but I do not think you want it, as it is
missing several things:

  - docs and tests

  - handling multiple values

  - anything but raw prefix matching (you even have to put in the /
yourself).

It was not my patch originally, and I never bothered to clean and
upstream it because I didn't think it was something anybody else would
be interested in. I'm happy to do so, but if you are working in the area
anyway, it would make sense to be part of your series.

-Peff

---
diff --git b/builtin/receive-pack.c a/builtin/receive-pack.c
index 0afb8b2..b22670c 100644
--- b/builtin/receive-pack.c
+++ a/builtin/receive-pack.c
@@ -39,6 +39,7 @@ static void *head_name_to_free;
 static int auto_gc = 1;
 static const char *head_name;
 static void *head_name_to_free;
+static const char *hide_refs;
 static int sent_capabilities;
 
 static enum deny_action parse_deny_action(const char *var, const char *value)
@@ -113,11 +114,19 @@ static void show_ref(const char *path, const unsigned 
char *sha1)
return 0;
}
 
+   if (strcmp(var, receive.hiderefs) == 0) {
+   git_config_string(hide_refs, var, value);
+   return 0;
+   }
+
return git_default_config(var, value, cb);
 }
 
 static void show_ref(const char *path, const unsigned char *sha1)
 {
+   if (hide_refs  strncmp(path, hide_refs, strlen(hide_refs)) == 0)
+   return 0;
+
if (sent_capabilities)
packet_write(1, %s %s\n, sha1_to_hex(sha1), path);
else
--
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 v3 08/31] parse_pathspec: add PATHSPEC_EMPTY_MATCH_ALL

2013-01-21 Thread Martin von Zweigbergk
Hi,

I was tempted to ask this before, and the recent thread regarding add
-u/A [1] convinced me to.

On Sun, Jan 13, 2013 at 4:35 AM, Nguyễn Thái Ngọc Duy pclo...@gmail.com wrote:
 We have two ways of dealing with empty pathspec:

 1. limit it to current prefix
 2. match the entire working directory

 Some commands go with #1, some with #2. get_pathspec() and
 parse_pathspec() only supports #1. Make it support #2 too via
 PATHSPEC_EMPTY_MATCH_ALL flag.

If #2 is indeed the direction we want to go, then maybe we should make
that the default behavior from parse_pathspec()? I.e. rename the flag
PATHSPEC_EMPTY_MATCH_PREFIX (or something). Makes sense?

Btw, Matthieu was asking where we use #1. If you do invert the name
and meaning of the flag, then the answer to that question should be
(mostly?) obvious from a re-roll of your series (i.e. all the places
where PATHSPEC_EMPTY_MATCH_PREFIX is used).

Martin

 [1] http://thread.gmane.org/gmane.comp.version-control.git/213988/focus=214113
--
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 v2] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-21 Thread Jeff King
On Mon, Jan 21, 2013 at 06:40:33PM +0700, Nguyen Thai Ngoc Duy wrote:

 + /*
 +  * If it has the same content that we are going to overwrite,
 +  * there's no point in complaining. We still overwrite it in
 +  * the end though.
 +  */
 + if (ce 
 + S_ISREG(st-st_mode)  S_ISREG(ce-ce_mode) 
 + (!trust_executable_bit ||
 +  (0100  (ce-ce_mode ^ st-st_mode)) == 0) 
 + st-st_size  SAME_CONTENT_SIZE_LIMIT 
 + sha1_object_info(ce-sha1, ce_size) == OBJ_BLOB 
 + ce_size == st-st_size) {
 + void *buffer = NULL;
 + unsigned long size;
 + enum object_type type;
 + struct strbuf sb = STRBUF_INIT;
 + int matched =
 + strbuf_read_file(sb, ce-name, ce_size) == ce_size 
 + (buffer = read_sha1_file(ce-sha1, type, size)) != 
 NULL 
 + type == OBJ_BLOB 
 + size == ce_size 
 + !memcmp(buffer, sb.buf, size);
 + free(buffer);
 + strbuf_release(sb);
 + if (matched)
 + return 0;
 + }

Can you elaborate on when this code is triggered?

In the general case, shouldn't we already know the sha1 of what's on
disk in the index, and be able to just compare the hashes? And if we
don't, because the entry is start-dirty, should we be updating it
(possibly earlier, so we do not even get into the need to write code
path) instead of doing this ad-hoc byte comparison?

Confused...

-Peff
--
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] git rm -u

2013-01-21 Thread Junio C Hamano
Matthieu Moy matthieu@grenoble-inp.fr writes:

 Junio C Hamano gits...@pobox.com writes:

 But v1.5.2.5~1 (git-add -u paths... now works from subdirectory,
 2007-08-16) changed the semantics to limit the operation to the
 working tree.

 Not really. It fixed git add -u path, not plain git add -u. A quick
 test checking out and compiling v1.5.2.5~1^ shows that git add -u .
 from a subdirectory was adding everything from the root.

 My interpretation is that v1.5.2.5~1 fixed an actual bug, without
 thinking about what would happen when git add -u was called without
 path, so the behavior is what happens to be the most natural to
 implement.

I guess at this point it does not matter that much if that was an
unintended consequence of a buggy fix, or a new behaviour by design.
We initially were tree-wide but later limited the operation to the
current directory.

I think your Check 'git diff' then run 'git add -u' example may be
a good enough argument that it is a good idea to restore the
originally intended tree-wide behaviour in any case.
--
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] Instruct git-completion.bash that we are in test mode

2013-01-21 Thread Junio C Hamano
Jean-Noël AVILA jn.av...@free.fr writes:

 At least, it works for me.

I suspect that your approach will still not fix the case in which
you build a branch with a new command git-check-ignore, and then
check out another branch that does not yet have that command without
first running make clean.

Does the following really pass with your patch?

git checkout origin/next
make
git checkout origin/maint
git apply your_patch.mbox
make
cd t  sh ./t9902-completion.sh

 + __git_cmdlist () { git help -a| egrep -m 1 -B1000 PATH | egrep '^  
 [a-zA-Z0-9]'; }

'egrep' is not even in POSIX in the first place but grep -E ought to
be a replacement for it, so I'll let it pass, but -m1 -B1000?
Please stay within portable options.

git help -a |
sed -n -e '/^  [a-z]/p' -e '/^git commands available from elsewhere/q'/'

might be a good enough substitute, I think, if we were to take your
approach, but I suspect it needs a lot more to limit the output in
the test mode.

--
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] Hiding some refs in ls-remote

2013-01-21 Thread Junio C Hamano
Jeff King p...@peff.net writes:

 It may even make sense to have git push honor it, excluding them
 from git push --mirror (or git push --all if some of the
 branches are hidden); I haven't thought things through, though.

 That is harder, as that is something that happens on the client. How
 does the client learn about the transfer.hiderefs setting on the remote?

No, I was talking about running git push from a repository that
has the transfer.hiderefs set, emulating a fetch from a client by
pushing out in the reverse direction.
--
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 v6 0/8] push: update remote tags only with force

2013-01-21 Thread Junio C Hamano
Jeff King p...@peff.net writes:

 ... The problem there is not already exists but rather
 a blob is not something that can fast-forward. Using the existing
 REJECT_NONFASTFORWARD is insufficient (because later code will recommend
 pull-then-push, which is wrong). So I'd be in favor of creating a new
 error status for it.

Very well said.

Please make it so ;-) or should I?
--
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 v3 1/6] Change old system name 'GIT' to 'Git'

2013-01-21 Thread Junio C Hamano
Thomas Ackermann th.ac...@arcor.de writes:

 Git changed its 'official' system name from 'GIT' to 'Git' in v1.6.5.3
 (as can be seen in the corresponding release note where 'GIT' was
 changed to 'Git' in the header line). So change every occurrence
 of 'GIT in the documention to 'Git'.

 Signed-off-by: Thomas Ackermann th.ac...@arcor.de
 ---

This is more about stop using poor-man's small caps.

I think it misses GIT - the stupid content tracker in README, but
probably it is OK (it is not an end-user facing documentation).

I noticed that these two places still use poor-man's small caps
after this patch.

 * Documentation/SubmittingPatches:
 that are being emailed around. Although core GIT is a lot

 * Documentation/git-credential.txt:
 TYPICAL USE OF GIT CREDENTIAL

With these two updated, I think it is a sensible change and the
patch is timed reasonably well.  It applies to 'maint', and other
topics in flight do not seem to add new uses of GIT.

Not commenting on other 5 patches in the series yet, but if they
interact with other topics in flight, they may have to be separated
out. We'll see.

Thanks.
--
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 v3 2/6] Change 'git' to 'Git' whenever the whole system is referred to #1

2013-01-21 Thread Junio C Hamano
Thomas Ackermann th.ac...@arcor.de writes:

 Signed-off-by: Thomas Ackermann th.ac...@arcor.de
 ---


Forgot --stat?

It helps to check the integrity of patch application and also helps
anticipating possible interaction with other topics in flight.
Please don't omit 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


Re: [PATCH v2] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-21 Thread Duy Nguyen
On Tue, Jan 22, 2013 at 6:15 AM, Jeff King p...@peff.net wrote:
 Can you elaborate on when this code is triggered?

 In the general case, shouldn't we already know the sha1 of what's on
 disk in the index, and be able to just compare the hashes? And if we
 don't, because the entry is start-dirty, should we be updating it
 (possibly earlier, so we do not even get into the need to write code
 path) instead of doing this ad-hoc byte comparison?

 Confused...

git reset HEAD~10
# blah that was a mistake, undo it
git checkout HEAD@{1}

I hit it a few times, probably not with the exact recipe above though.
-- 
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


Re: [RFC/PATCH] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Duy Nguyen
On Mon, Jan 21, 2013 at 7:00 PM, Matthieu Moy matthieu@imag.fr wrote:
 Most git commands that can be used with our without a filepattern are
 tree-wide by default, the filepattern being used to restrict their scope.
 A few exceptions are: 'git grep', 'git clean', 'git add -u' and 'git add -A'.

 The inconsistancy of 'git add -u' and 'git add -A' are particularly
 problematic since other 'git add' subcommands (namely 'git add -p' and
 'git add -e') are tree-wide by default.

 Flipping the default now is unacceptable, so this patch starts training
 users to type explicitely 'git add -u|-A :/' or 'git add -u|-A .', to prepare
 for the next steps:

 * forbid 'git add -u|-A' without filepattern (like 'git add' without
   option)

 * much later, maybe, re-allow 'git add -u|-A' without filepattern, with a
   tree-wide scope.

What about 'grep' and 'clean'? I think at least 'clean' should go
tree-wide default too. I don't mind grep go the same way either but I
think people voiced preference in current behavior..
-- 
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


Re: [PATCH v2] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-21 Thread Junio C Hamano
Duy Nguyen pclo...@gmail.com writes:

 On Tue, Jan 22, 2013 at 6:15 AM, Jeff King p...@peff.net wrote:
 Can you elaborate on when this code is triggered?

 In the general case, shouldn't we already know the sha1 of what's on
 disk in the index, and be able to just compare the hashes? And if we
 don't, because the entry is start-dirty, should we be updating it
 (possibly earlier, so we do not even get into the need to write code
 path) instead of doing this ad-hoc byte comparison?

If the index knows what is in the working tree, I think I agree.

 Confused...

 git reset HEAD~10
 # blah that was a mistake, undo it
 git checkout HEAD@{1}

 I hit it a few times, probably not with the exact recipe above though.

I've seen myself doing git reset HEAD~10 by mistake (I wanted --hard),
but the recovery is to do git reset --hard @{1} and then come back
with git reset --hard HEAD~10, so it hasn't been a real problem
for me.

A case similar to this is already covered by a special case of
two-tree read-tree where the index already matches the tree we are
checking out even though it is different from HEAD; in other words,
if you did this:

git init
date file
git add file; git commit -m 'has a file'
git checkout -b side
git rm file; git commit -m 'does not have the file'
git checkout master file
: now index has the file from 'master' and worktree is clean
git checkout master

you shouldn't get any complaint, I think.

If you did git rm --cached file to lose it from the index,
immediately after git checkout master file, then we wouldn't know
what we may be losing.  If the file in the working tree happens to
match the index and the HEAD after checking out the other branch
('master' in this case), it is _not_ losing information, so we might
be able to treat it as an extension of the existing special case.

I haven't thought things through to see if in a more general case
that this codepath triggers we might be losing a local changes that
we should be carrying forward while checking out a new branch,
though.


--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Junio C Hamano
Duy Nguyen pclo...@gmail.com writes:

 What about 'grep' and 'clean'? I think at least 'clean' should go
 tree-wide default too. I don't mind grep go the same way either but I
 think people voiced preference in current behavior..

I think the major argument for git grep to be the way it is is
because people expect it to be extension of running grep -r in the
same directory (git grep excludes untracked ones so you do not
have to suffer from --exclude=.git and such unpleasantries).

Shouldn't git clean be an extension of running rm -r in the same
directory (git clean does not lose tracked ones but otherwise it
is a recursive removal)?


--
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 v2] unpack-trees: do not abort when overwriting an existing file with the same content

2013-01-21 Thread Duy Nguyen
On Tue, Jan 22, 2013 at 8:45 AM, Junio C Hamano gits...@pobox.com wrote:
 Duy Nguyen pclo...@gmail.com writes:

 On Tue, Jan 22, 2013 at 6:15 AM, Jeff King p...@peff.net wrote:
 Can you elaborate on when this code is triggered?

 In the general case, shouldn't we already know the sha1 of what's on
 disk in the index, and be able to just compare the hashes? And if we
 don't, because the entry is start-dirty, should we be updating it
 (possibly earlier, so we do not even get into the need to write code
 path) instead of doing this ad-hoc byte comparison?

 If the index knows what is in the working tree, I think I agree.

 Confused...

 git reset HEAD~10
 # blah that was a mistake, undo it
 git checkout HEAD@{1}

 I hit it a few times, probably not with the exact recipe above though.

 I've seen myself doing git reset HEAD~10 by mistake (I wanted --hard),
 but the recovery is to do git reset --hard @{1} and then come back
 with git reset --hard HEAD~10, so it hasn't been a real problem
 for me.

Except when you already make some changes elsewhere and you don't want --hard.
-- 
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


Re: [PATCH v3 08/31] parse_pathspec: add PATHSPEC_EMPTY_MATCH_ALL

2013-01-21 Thread Duy Nguyen
On Tue, Jan 22, 2013 at 6:12 AM, Martin von Zweigbergk
martinv...@gmail.com wrote:
 Hi,

 I was tempted to ask this before, and the recent thread regarding add
 -u/A [1] convinced me to.

 On Sun, Jan 13, 2013 at 4:35 AM, Nguyễn Thái Ngọc Duy pclo...@gmail.com 
 wrote:
 We have two ways of dealing with empty pathspec:

 1. limit it to current prefix
 2. match the entire working directory

 Some commands go with #1, some with #2. get_pathspec() and
 parse_pathspec() only supports #1. Make it support #2 too via
 PATHSPEC_EMPTY_MATCH_ALL flag.

 If #2 is indeed the direction we want to go, then maybe we should make
 that the default behavior from parse_pathspec()? I.e. rename the flag
 PATHSPEC_EMPTY_MATCH_PREFIX (or something). Makes sense?

No problem with me. Will do unless someone objects.

 Btw, Matthieu was asking where we use #1. If you do invert the name
 and meaning of the flag, then the answer to that question should be
 (mostly?) obvious from a re-roll of your series (i.e. all the places
 where PATHSPEC_EMPTY_MATCH_PREFIX is used).

 Martin

  [1] 
 http://thread.gmane.org/gmane.comp.version-control.git/213988/focus=214113
-- 
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


Re: [PATCH 1/2] Update :/abc ambiguity check

2013-01-21 Thread Junio C Hamano
Duy Nguyen pclo...@gmail.com writes:

 ... take :/abc as rev even it's ambiguous. This patch makes it:

 - ambiguous when abc exists on worktree
 - a rev if abc does not exist on worktree
 - a path if abc is not found in any commits (although better use

 The any commits above sounds very scary. Are you really going to
 check against all the commits?

 If I remember correctly :/ will search through commit chains until it
 finds a commit that matches. So :/non-existent-string definitely
 searches through all commits.

That is the real work the user asked us to do, so it is not a wasted
latency.  The description looked as if you were doing extra work
only for disambiguation, which triggered my Huh? meter.
--
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)

2013-01-21 Thread Drew Northup
On Sat, Jan 5, 2013 at 11:12 AM, Jeff King p...@peff.net wrote:
 On Mon, Dec 31, 2012 at 03:30:53AM -0700, Martin Fick wrote:

 The general approach is to setup a transaction and either
 commit or abort it.  A transaction can be setup by renaming
 an appropriately setup directory to the ref.lock name.  If
 the rename succeeds, the transaction is begun.  Any actor can
 abort the transaction (up until it is committed) by simply
 deleting the ref.lock directory, so it is not at risk of
 going stale.

 Deleting a directory is not atomic, as you first have to remove the
 contents, putting it into a potentially inconsistent state. I'll assume
 you deal with that later...

I know I'm a bit late to the dance here, but FWIW the apparent atomicy
(odd conjugation there) of directory deletion depends largely upon the
filesystem and VFS api in use. It is not unheard of that a delete
operation actually consist of moving the reference to the item's own
allocation marker into a trashcan to be cleaned up after later.
In other words, I'd not advise planning on directory deletes always
being atomic nor always not being atomic.

-- 
-Drew Northup
--
As opposed to vegetable or mineral error?
-John Pescatore, SANS NewsBites Vol. 12 Num. 59
--
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] Instruct git-completion.bash that we are in test mode

2013-01-21 Thread Junio C Hamano
Jeff King p...@peff.net writes:

 I really hate to suggest this, but should it be more like:

   if test -z $FAKE_COMMAND_LIST; then
   __git_cmdlist() {
   git help -a | egrep '^  [a-zA-Z0-9]'
   }
   else
   __git_cmdlist() {
   printf '%s' $FAKE_COMMAND_LIST
   }
   fi

 That gives us a nice predictable starting point for actually testing the
 completion code. The downside is that it  doesn't let us test that we
 remain compatible with the output of help -a.

Yeah, I think this is simpler and more to the point for the test in
t9902.  If we really want to test something that is the same as, or
at least any closer than this approach (or my help --standard), to
what the real users use, the test has to become inherently flaky, so
I think we should go for the simplicity of this patch shows.


--
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 v6 0/8] push: update remote tags only with force

2013-01-21 Thread Chris Rorvick
On Mon, Jan 21, 2013 at 5:40 PM, Jeff King p...@peff.net wrote:
 On Thu, Jan 17, 2013 at 09:18:50PM -0600, Chris Rorvick wrote:

 On Thu, Jan 17, 2013 at 7:06 PM, Jeff King p...@peff.net wrote:
  However, if instead of the rule being
  blobs on the remote side cannot be replaced, if it becomes the old
  value on the remote side must be referenced by what we replace it with,
  that _is_ something we can calculate reliably on the sending side.

 Interesting.  I would have thought knowing reachability implied having
 the old object in the sending repository.

 No, because if you do not have it, then you know it is not reachable
 from your refs (or your repository is corrupted). If you do have it, it
 _might_ be reachable. For commits, checking is cheap (merge-base) and we
 already do it. For trees and blobs, it is much more expensive, as you
 have to walk the whole object graph.  While it might be more correct
 in some sense to say it's OK to replace a tree with a commit that
 points to it, in practice I doubt anyone cares, so you can probably
 just punt on those ones and say no, it's not a fast forward.

Thanks for explaining this further.  I'm not exactly sure what I was
thinking when I wrote the above other than I didn't fully grasp you
point and responded in a confused state.  Clear on all fronts now.

  And
  that is logically an extension of the fast-forward rule, which is why I
  suggested placing it with ref_newer (but the latter should probably be
  extended to not suggest merging if we _know_ it is a non-commit object).

 Sounds great, especially if it is not dependent on the sender actually
 having the old object.  Until this is implemented, though, I don't
 understand what was wrong with doing the checks in the
 is_forwardable() helper function (of course after fixing the
 regression/bug.)

 I don't think it is wrong per se; I just think that the check would go
 more naturally where we are checking whether the object does indeed
 fast-forward. Because is_forwardable in some cases must say I don't
 know; I don't have the object to check its type, so maybe it is
 forwardable, and maybe it is not. Whereas when we do the actual
 reachability check, we can say definitely this is not reachable because
 I don't have it, or this is not reachable because it is a commit and I
 checked, or this might be reachable but I don't care to check because it
 has a funny type.

 I think looking at it as the latter makes it more obvious how to handle
 the maybe situation (e.g., the bug in is_forwardable was hard to see).

 Anyway, I do not care that much where it goes. To me, the important
 thing is the error message. I do think the error already exists is a
 reasonable one for refs/tags (we do not allow non-force pushes of
 existing tags), but not necessarily for other cases, like trying to push
 a blob over a blob. The problem there is not already exists but rather
 a blob is not something that can fast-forward. Using the existing
 REJECT_NONFASTFORWARD is insufficient (because later code will recommend
 pull-then-push, which is wrong). So I'd be in favor of creating a new
 error status for it.

I agree with everything above.  I just don't understand why reverting
the already exists behavior for non-commit-ish objects was a
prerequisite to fixing this.  Despite the flaws (I am not referring to
the buggy behavior) you and Junio have pointed out, this still seems
like an improvement over the previous (and soon-to-be current)
behavior.  Saying the remote reference already exists is true, and it
implies that removing it might solve the problem which is also true.
Adding another error status will allow the error message to be made
clearer in both cases (i.e., I avoided the word tag specifically so
that it would apply to other cases, or so I thought.)

Chris
--
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/3] Finishing touches to push advises

2013-01-21 Thread Junio C Hamano
This builds on Chris Rorvick's earlier effort to forbid unforced
updates to refs/tags/ hierarchy and giving sensible error and advise
messages for that case (we are not rejecting such a push due to fast
forwardness, and suggesting to fetch and integrate before pushing
again does not make sense).

The main change is in the second patch.  When we

 * do not have the object at the tip of the remote;
 * the object at the tip of the remote is not a commit; or
 * the object we are pushing is not a commit,

there is no point suggesting to fetch, integrate and push again.

If we do not have the current object at the tip of the remote, we
should tell the user to fetch first and evaluate the situation
before deciding what to do next.

Otherwise, if the current object is not a commit, or if we are
trying to push an object that is not a commit, then the user does
not have to fetch first (we already have the object), but it still
does not make sense to suggest to integrate and re-push.  Just tell
them that such a push requires a force in such a case.

Junio C Hamano (3):
  push: further clean up fields of struct ref
  push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE
  push: further reduce struct ref and simplify the logic

 advice.c|  4 
 advice.h|  2 ++
 builtin/push.c  | 25 +
 builtin/send-pack.c | 10 ++
 cache.h |  6 +++---
 remote.c| 38 --
 send-pack.c |  2 ++
 transport-helper.c  | 10 ++
 transport.c | 14 +-
 transport.h |  2 ++
 10 files changed, 87 insertions(+), 26 deletions(-)

-- 
1.8.1.1.498.gfdee8be

--
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] push: further clean up fields of struct ref

2013-01-21 Thread Junio C Hamano
The nonfastforward field is only used to decide what value to
assign to the status locally in a single function.  Remove it from
the struct ref and make it into a local variable.

The requires_force field is not used to decide if the proposed
update requires a --force option to succeed, or to record such a
decision made elsewhere.  It is used by status reporting code that
the particular update was forced.  Rename it to forced_udpate,
and move the code to assign to it around to further clarify how it
is used and what it is used for.

Signed-off-by: Junio C Hamano gits...@pobox.com
---
 cache.h |  3 +--
 remote.c| 10 +-
 transport.c |  2 +-
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/cache.h b/cache.h
index a942bbd..baa47b4 100644
--- a/cache.h
+++ b/cache.h
@@ -1001,9 +1001,8 @@ struct ref {
char *symref;
unsigned int
force:1,
-   requires_force:1,
+   forced_update:1,
merge:1,
-   nonfastforward:1,
update:1,
deletion:1;
enum {
diff --git a/remote.c b/remote.c
index d3a1ca2..875296c 100644
--- a/remote.c
+++ b/remote.c
@@ -1322,22 +1322,22 @@ void set_ref_status_for_push(struct ref *remote_refs, 
int send_mirror,
!is_null_sha1(ref-old_sha1);
 
if (ref-update) {
-   ref-nonfastforward =
+   int nonfastforward =
!has_sha1_file(ref-old_sha1)
- || !ref_newer(ref-new_sha1, ref-old_sha1);
+   || !ref_newer(ref-new_sha1, ref-old_sha1);
 
if (!prefixcmp(ref-name, refs/tags/)) {
-   ref-requires_force = 1;
if (!force_ref_update) {
ref-status = 
REF_STATUS_REJECT_ALREADY_EXISTS;
continue;
}
-   } else if (ref-nonfastforward) {
-   ref-requires_force = 1;
+   ref-forced_update = 1;
+   } else if (nonfastforward) {
if (!force_ref_update) {
ref-status = 
REF_STATUS_REJECT_NONFASTFORWARD;
continue;
}
+   ref-forced_update = 1;
}
}
}
diff --git a/transport.c b/transport.c
index 2673d27..585ebcd 100644
--- a/transport.c
+++ b/transport.c
@@ -659,7 +659,7 @@ static void print_ok_ref_status(struct ref *ref, int 
porcelain)
const char *msg;
 
strcpy(quickref, status_abbrev(ref-old_sha1));
-   if (ref-requires_force) {
+   if (ref-forced_update) {
strcat(quickref, ...);
type = '+';
msg = forced update;
-- 
1.8.1.1.498.gfdee8be

--
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] push: further reduce struct ref and simplify the logic

2013-01-21 Thread Junio C Hamano
The update field in struct ref is only used in a very narrow
scope in a single function.  Remove it.

Also simplify the code that rejects an attempted push by first
checking if the proposed update is forced (in which case we do not
need any check on our end).

Signed-off-by: Junio C Hamano gits...@pobox.com
---
 cache.h  |  1 -
 remote.c | 42 +-
 2 files changed, 13 insertions(+), 30 deletions(-)

diff --git a/cache.h b/cache.h
index 360bba5..377a3df 100644
--- a/cache.h
+++ b/cache.h
@@ -1003,7 +1003,6 @@ struct ref {
force:1,
forced_update:1,
merge:1,
-   update:1,
deletion:1;
enum {
REF_STATUS_NONE = 0,
diff --git a/remote.c b/remote.c
index 689dcf7..248910f 100644
--- a/remote.c
+++ b/remote.c
@@ -1317,37 +1317,21 @@ void set_ref_status_for_push(struct ref *remote_refs, 
int send_mirror,
 * passing the --force argument
 */
 
-   ref-update =
-   !ref-deletion 
-   !is_null_sha1(ref-old_sha1);
-
-   if (ref-update) {
-   if (!prefixcmp(ref-name, refs/tags/)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_ALREADY_EXISTS;
-   continue;
-   }
-   ref-forced_update = 1;
-   } else if (!has_sha1_file(ref-old_sha1) ||
-  
!lookup_commit_reference_gently(ref-old_sha1, 1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_FETCH_FIRST;
-   continue;
-   }
-   ref-forced_update = 1;
-   } else if 
(!lookup_commit_reference_gently(ref-new_sha1, 1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_NEEDS_FORCE;
-   continue;
-   }
-   ref-forced_update = 1;
-   } else if (!ref_newer(ref-new_sha1, ref-old_sha1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_NONFASTFORWARD;
-   continue;
-   }
+   if (!ref-deletion  !is_null_sha1(ref-old_sha1)) {
+   if (force_ref_update) {
ref-forced_update = 1;
+   continue;
}
+
+   if (!prefixcmp(ref-name, refs/tags/))
+   ref-status = REF_STATUS_REJECT_ALREADY_EXISTS;
+   else if (!has_sha1_file(ref-old_sha1) ||
+!lookup_commit_reference_gently(ref-old_sha1, 
1))
+   ref-status = REF_STATUS_REJECT_FETCH_FIRST;
+   else if (!lookup_commit_reference_gently(ref-new_sha1, 
1))
+   ref-status = REF_STATUS_REJECT_NEEDS_FORCE;
+   else if (!ref_newer(ref-new_sha1, ref-old_sha1))
+   ref-status = REF_STATUS_REJECT_NONFASTFORWARD;
}
}
 }
-- 
1.8.1.1.498.gfdee8be

--
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 2/3] push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE

2013-01-21 Thread Junio C Hamano
This one has a logic flaw.  The logic outlined in the cover letter
is correct, and the one described in the log message of this one is
not.

We should say fetch first only when we do not have old_sha1.


diff --git a/remote.c b/remote.c
index 248910f..8c39ea2 100644
--- a/remote.c
+++ b/remote.c
@@ -1325,10 +1325,10 @@ void set_ref_status_for_push(struct ref *remote_refs, 
int send_mirror,
 
if (!prefixcmp(ref-name, refs/tags/))
ref-status = REF_STATUS_REJECT_ALREADY_EXISTS;
-   else if (!has_sha1_file(ref-old_sha1) ||
-!lookup_commit_reference_gently(ref-old_sha1, 
1))
+   else if (!has_sha1_file(ref-old_sha1))
ref-status = REF_STATUS_REJECT_FETCH_FIRST;
-   else if (!lookup_commit_reference_gently(ref-new_sha1, 
1))
+   else if (!lookup_commit_reference_gently(ref-new_sha1, 
1) ||
+!lookup_commit_reference_gently(ref-old_sha1, 
1))
ref-status = REF_STATUS_REJECT_NEEDS_FORCE;
else if (!ref_newer(ref-new_sha1, ref-old_sha1))
ref-status = REF_STATUS_REJECT_NONFASTFORWARD;
--
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 3/3] push: further reduce struct ref and simplify the logic

2013-01-21 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 The update field in struct ref is only used in a very narrow
 scope in a single function.  Remove it.

 Also simplify the code that rejects an attempted push by first
 checking if the proposed update is forced (in which case we do not
 need any check on our end).

Actually, the latter is a bad idea; it changes the semantics and
mark a push that was done with an unnecessary --force option.

I'm rerolling these three patches (the update removal will also be
moved to the preparatory clean-up patch).
--
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/3] Finishing touches to push advises

2013-01-21 Thread Junio C Hamano
This builds on Chris Rorvick's earlier effort to forbid unforced
updates to refs/tags/ hierarchy and giving sensible error and advise
messages for that case (we are not rejecting such a push due to fast
forwardness, and suggesting to fetch and integrate before pushing
again does not make sense).

The series applies on top of 256b9d7 (push: fix refs/tags/
hierarchy cannot be updated without --force, 2013-01-16).

The main change is in the second patch.  When we

 * do not have the object at the tip of the remote;
 * the object at the tip of the remote is not a commit; or
 * the object we are pushing is not a commit,

there is no point suggesting to fetch, integrate and push again.

If we do not have the current object at the tip of the remote, we
should tell the user to fetch first and evaluate the situation
before deciding what to do next.

Otherwise, if the current object is not a commit, or if we are
trying to push an object that is not a commit, then the user does
not have to fetch first (we already have the object), but it still
does not make sense to suggest to integrate and re-push.  Just tell
them that such a push requires a force in such a case.

Junio C Hamano (3):
  push: further clean up fields of struct ref
  push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE
  push: further simplify the logic to assign rejection status

 advice.c|  4 
 advice.h|  2 ++
 builtin/push.c  | 25 +
 builtin/send-pack.c | 10 ++
 cache.h |  6 +++---
 remote.c| 42 +++---
 send-pack.c |  2 ++
 transport-helper.c  | 10 ++
 transport.c | 14 +-
 transport.h |  2 ++
 10 files changed, 90 insertions(+), 27 deletions(-)

-- 
1.8.1.1.498.gfdee8be

--
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 v2 1/3] push: further clean up fields of struct ref

2013-01-21 Thread Junio C Hamano
The nonfastforward and update fields are only used while
deciding what value to assign to the status locally in a single
function.  Remove them from the struct ref.

The requires_force field is not used to decide if the proposed
update requires a --force option to succeed, or to record such a
decision made elsewhere.  It is used by status reporting code that
the particular update was forced.  Rename it to forced_udpate,
and move the code to assign to it around to further clarify how it
is used and what it is used for.

Signed-off-by: Junio C Hamano gits...@pobox.com
---

 * The update removal in v1 has been moved to this.

 cache.h |  4 +---
 remote.c| 16 ++--
 transport.c |  2 +-
 3 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/cache.h b/cache.h
index a942bbd..12631a1 100644
--- a/cache.h
+++ b/cache.h
@@ -1001,10 +1001,8 @@ struct ref {
char *symref;
unsigned int
force:1,
-   requires_force:1,
+   forced_update:1,
merge:1,
-   nonfastforward:1,
-   update:1,
deletion:1;
enum {
REF_STATUS_NONE = 0,
diff --git a/remote.c b/remote.c
index d3a1ca2..3375914 100644
--- a/remote.c
+++ b/remote.c
@@ -1317,27 +1317,23 @@ void set_ref_status_for_push(struct ref *remote_refs, 
int send_mirror,
 * passing the --force argument
 */
 
-   ref-update =
-   !ref-deletion 
-   !is_null_sha1(ref-old_sha1);
-
-   if (ref-update) {
-   ref-nonfastforward =
+   if (!ref-deletion  !is_null_sha1(ref-old_sha1)) {
+   int nonfastforward =
!has_sha1_file(ref-old_sha1)
- || !ref_newer(ref-new_sha1, ref-old_sha1);
+   || !ref_newer(ref-new_sha1, ref-old_sha1);
 
if (!prefixcmp(ref-name, refs/tags/)) {
-   ref-requires_force = 1;
if (!force_ref_update) {
ref-status = 
REF_STATUS_REJECT_ALREADY_EXISTS;
continue;
}
-   } else if (ref-nonfastforward) {
-   ref-requires_force = 1;
+   ref-forced_update = 1;
+   } else if (nonfastforward) {
if (!force_ref_update) {
ref-status = 
REF_STATUS_REJECT_NONFASTFORWARD;
continue;
}
+   ref-forced_update = 1;
}
}
}
diff --git a/transport.c b/transport.c
index 2673d27..585ebcd 100644
--- a/transport.c
+++ b/transport.c
@@ -659,7 +659,7 @@ static void print_ok_ref_status(struct ref *ref, int 
porcelain)
const char *msg;
 
strcpy(quickref, status_abbrev(ref-old_sha1));
-   if (ref-requires_force) {
+   if (ref-forced_update) {
strcat(quickref, ...);
type = '+';
msg = forced update;
-- 
1.8.1.1.498.gfdee8be

--
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 v2 2/3] push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE

2013-01-21 Thread Junio C Hamano
When we push to update an existing ref, if:

 * we do not have the object at the tip of the remote; or
 * the object at the tip of the remote is not a commit; or
 * the object we are pushing is not a commit,

there is no point suggesting to fetch, integrate and push again.

If we do not have the current object at the tip of the remote, we
should tell the user to fetch first and evaluate the situation
before deciding what to do next.

Otherwise, if the current object is not a commit, or if we are
trying to push an object that is not a commit, then the user does
not have to fetch first (we already have the object), but it still
does not make sense to suggest to integrate and re-push.  Just tell
them that such a push requires a force in such a case.

In these cases, the push was locally rejected on the client end, but
we used the same error and advice messages as the ones used when
rejecting a non-fast-forward push, i.e. pull from there and
integrate before pushing again.  This did not make much sense.

Signed-off-by: Junio C Hamano gits...@pobox.com
---

 * Updated log message and fixed the logic to decide fetch first;
   we should say fetch first only when we do not have the current
   tip of the remote end.

   send-pack.c has style violation that else is not on the same
   line as closing brace of its corresponding if, but I followed
   the existing style of surrounding code.  Cleaning them up is for
   a separate topic.

 advice.c|  4 
 advice.h|  2 ++
 builtin/push.c  | 25 +
 builtin/send-pack.c | 10 ++
 cache.h |  2 ++
 remote.c| 22 --
 send-pack.c |  2 ++
 transport-helper.c  | 10 ++
 transport.c | 12 
 transport.h |  2 ++
 10 files changed, 85 insertions(+), 6 deletions(-)

diff --git a/advice.c b/advice.c
index d287927..780f58d 100644
--- a/advice.c
+++ b/advice.c
@@ -5,6 +5,8 @@ int advice_push_non_ff_current = 1;
 int advice_push_non_ff_default = 1;
 int advice_push_non_ff_matching = 1;
 int advice_push_already_exists = 1;
+int advice_push_fetch_first = 1;
+int advice_push_needs_force = 1;
 int advice_status_hints = 1;
 int advice_commit_before_merge = 1;
 int advice_resolve_conflict = 1;
@@ -20,6 +22,8 @@ static struct {
{ pushnonffdefault, advice_push_non_ff_default },
{ pushnonffmatching, advice_push_non_ff_matching },
{ pushalreadyexists, advice_push_already_exists },
+   { pushfetchfirst, advice_push_fetch_first },
+   { pushneedsforce, advice_push_needs_force },
{ statushints, advice_status_hints },
{ commitbeforemerge, advice_commit_before_merge },
{ resolveconflict, advice_resolve_conflict },
diff --git a/advice.h b/advice.h
index 8bf6356..fad36df 100644
--- a/advice.h
+++ b/advice.h
@@ -8,6 +8,8 @@ extern int advice_push_non_ff_current;
 extern int advice_push_non_ff_default;
 extern int advice_push_non_ff_matching;
 extern int advice_push_already_exists;
+extern int advice_push_fetch_first;
+extern int advice_push_needs_force;
 extern int advice_status_hints;
 extern int advice_commit_before_merge;
 extern int advice_resolve_conflict;
diff --git a/builtin/push.c b/builtin/push.c
index 8491e43..da928fa 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -224,6 +224,13 @@ static const char message_advice_ref_already_exists[] =
N_(Updates were rejected because the destination reference already 
exists\n
   in the remote.);
 
+static const char message_advice_ref_fetch_first[] =
+   N_(Updates were rejected; you need to fetch the destination 
reference\n
+  to decide what to do.\n);
+
+static const char message_advice_ref_needs_force[] =
+   N_(Updates were rejected; you need to force update.\n);
+
 static void advise_pull_before_push(void)
 {
if (!advice_push_non_ff_current || !advice_push_update_rejected)
@@ -252,6 +259,20 @@ static void advise_ref_already_exists(void)
advise(_(message_advice_ref_already_exists));
 }
 
+static void advise_ref_fetch_first(void)
+{
+   if (!advice_push_fetch_first || !advice_push_update_rejected)
+   return;
+   advise(_(message_advice_ref_fetch_first));
+}
+
+static void advise_ref_needs_force(void)
+{
+   if (!advice_push_needs_force || !advice_push_update_rejected)
+   return;
+   advise(_(message_advice_ref_needs_force));
+}
+
 static int push_with_options(struct transport *transport, int flags)
 {
int err;
@@ -285,6 +306,10 @@ static int push_with_options(struct transport *transport, 
int flags)
advise_checkout_pull_push();
} else if (reject_reasons  REJECT_ALREADY_EXISTS) {
advise_ref_already_exists();
+   } else if (reject_reasons  REJECT_FETCH_FIRST) {
+   advise_ref_fetch_first();
+   } else if (reject_reasons  REJECT_NEEDS_FORCE) {
+   advise_ref_needs_force();
}

[PATCH v2 3/3] push: further simplify the logic to assign rejection status

2013-01-21 Thread Junio C Hamano
Instead of using deeply nested if/else statements, first decide what
rejection status we would get if this push weren't forced, and then
assign the rejection reason to the ref-status field and flip the
ref-forced_update field when we forced a push for a ref that indeed
required forcing.

Signed-off-by: Junio C Hamano gits...@pobox.com
---

 * The first one mistakenly changed the semantics and reported a
   forced push even when the push was done with useless and
   unnecessary --force option (e.g. the update was properly
   fast-forwarding but --force was given from the command line).
   This fixes it.

 remote.c | 40 +++-
 1 file changed, 15 insertions(+), 25 deletions(-)

diff --git a/remote.c b/remote.c
index c991915..af2136d 100644
--- a/remote.c
+++ b/remote.c
@@ -1318,32 +1318,22 @@ void set_ref_status_for_push(struct ref *remote_refs, 
int send_mirror,
 */
 
if (!ref-deletion  !is_null_sha1(ref-old_sha1)) {
-   if (!prefixcmp(ref-name, refs/tags/)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_ALREADY_EXISTS;
-   continue;
-   }
+   int status = 0;
+
+   if (!prefixcmp(ref-name, refs/tags/))
+   status = REF_STATUS_REJECT_ALREADY_EXISTS;
+   else if (!has_sha1_file(ref-old_sha1))
+   status = REF_STATUS_REJECT_FETCH_FIRST;
+   else if (!lookup_commit_reference_gently(ref-old_sha1, 
1) ||
+!lookup_commit_reference_gently(ref-new_sha1, 
1))
+   status = REF_STATUS_REJECT_NEEDS_FORCE;
+   else if (!ref_newer(ref-new_sha1, ref-old_sha1))
+   status = REF_STATUS_REJECT_NONFASTFORWARD;
+
+   if (!force_ref_update)
+   ref-status = status;
+   else if (status)
ref-forced_update = 1;
-   } else if (!has_sha1_file(ref-old_sha1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_FETCH_FIRST;
-   continue;
-   }
-   ref-forced_update = 1;
-   } else if 
(!lookup_commit_reference_gently(ref-old_sha1, 1) ||
-  
!lookup_commit_reference_gently(ref-new_sha1, 1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_NEEDS_FORCE;
-   continue;
-   }
-   ref-forced_update = 1;
-   } else if (!ref_newer(ref-new_sha1, ref-old_sha1)) {
-   if (!force_ref_update) {
-   ref-status = 
REF_STATUS_REJECT_NONFASTFORWARD;
-   continue;
-   }
-   ref-forced_update = 1;
-   }
}
}
 }
-- 
1.8.1.1.498.gfdee8be

--
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 v6 0/8] push: update remote tags only with force

2013-01-21 Thread Junio C Hamano
Chris Rorvick ch...@rorvick.com writes:

 I agree with everything above.  I just don't understand why reverting
 the already exists behavior for non-commit-ish objects was a
 prerequisite to fixing this.

Because it is a regression.  People who did not force such a push
did not get already exists, but with your patch they do.

By reverting the wrong message so that we get the old wrong message
instead, people will only have to deal with an already known
breakage; a known devil is better than an unknown new devil (or an
unknown angel).

When a change that brings in a regression and an improvement at the
same time, it does not matter what the improvement is; we fix the
regression first as soon as safely possible and we then attempt to
resurrect and polish the improvement.
--
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/3] Finishing touches to push advises

2013-01-21 Thread Junio C Hamano
As far as I am concerned, I am pretty much done with this topic, at
least for now.  Of course if there are bugreports I'll try to help
resolving them, but I do not expect myself adding new object-type
based policy decision to this codepath.

The call the updated call makes to ref_newer() no longer feeds
certain combinations to the function, because the NULL-ness of the
old and commit-ness of both are checked before making a call.

I notice that builtin/remote.c has another callsite for ref_newer().
Although I didn't look at the code, I think it is trying to see if
the branch can be pushed as a fast-forward to the remote (or the
remote tip moved since you started building on top of it).

It probably makes sense to refactor the logic that is run per-ref in
the loop in the set_ref_status_for_push() function into a new helper
function, inline ref_newer() there, and have the remaining callers
of ref_newer() to use that new helper function, which knows the new
rules such as refs/tags/ cannot be replaced with anything without
force.

--
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] add: warn when -u or -A is used without filepattern

2013-01-21 Thread Matthieu Moy
Jonathan Nieder jrnie...@gmail.com writes:

 Would it be possible to make this conditional on cwd not being at the
 toplevel (the case where git add -u :/ and git add -u . have
 different behavior)?  E.g.,

   static const char *here[2] = { ., NULL };
   if (prefix)
   warning(...);

I thought about this too, after writting the patch. Actually, I still I
it makes sense to warn even from the toplevel, since the point is to
teach people to stop using pathless git add -u for a while, so I'd say
it's easier to teach this in every condition. OTOH, the next step
(forbidding pathless git add -u) can still allow it from the toplevel
to minimize the pain.

But I'm starting to be convinced ;-).

Any other thought on the question?

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
--
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 v3] Enable minimal stat checking

2013-01-21 Thread Robin Rosenberg
Specifically the fields uid, gid, ctime, ino and dev are set to zero
by JGit. Other implementations, eg. Git in cygwin are allegedly also
somewhat incompatible with Git For Windows and on *nix platforms
the resolution of the timestamps may differ.

Any stat checking by git will then need to check content, which may
be very slow, particularly on Windows. Since mtime and size
is typically enough we should allow the user to tell git to avoid
checking these fields if they are set to zero in the index.

This change introduces a core.checkstat config option where the
the user can select to check all fields (default), or just size
and the whole second part of mtime (minimal).

Signed-off-by: Robin Rosenberg robin.rosenb...@dewire.com
---
 Documentation/config.txt |  6 ++
 cache.h  |  1 +
 config.c |  8 
 environment.c|  1 +
 read-cache.c | 28 
 5 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index d5809e0..47c213d 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -235,6 +235,12 @@ core.trustctime::
crawlers and some backup systems).
See linkgit:git-update-index[1]. True by default.
 
+core.checkstat::
+   Determines which stat fields to match between the index
+   and work tree. The user can set this to 'default' or
+   'minimal'. Default (or explicitly 'default'), is to check
+   all fields, including the sub-second part of mtime and ctime.
+
 core.quotepath::
The commands that output paths (e.g. 'ls-files',
'diff'), when not given the `-z` option, will quote
diff --git a/cache.h b/cache.h
index c257953..ab20c4d 100644
--- a/cache.h
+++ b/cache.h
@@ -536,6 +536,7 @@ extern int delete_ref(const char *, const unsigned char 
*sha1, int delopt);
 /* Environment bits from configuration mechanism */
 extern int trust_executable_bit;
 extern int trust_ctime;
+extern int check_stat;
 extern int quote_path_fully;
 extern int has_symlinks;
 extern int minimum_abbrev, default_abbrev;
diff --git a/config.c b/config.c
index 7b444b6..2b58c75 100644
--- a/config.c
+++ b/config.c
@@ -566,6 +566,14 @@ static int git_default_core_config(const char *var, const 
char *value)
trust_ctime = git_config_bool(var, value);
return 0;
}
+   if (!strcmp(var, core.statinfo)) {
+   if (!strcasecmp(value, default))
+   check_stat = 1;
+   else if (!strcasecmp(value, minimal))
+   check_stat = 0;
+   else
+   die_bad_config(var);
+   }
 
if (!strcmp(var, core.quotepath)) {
quote_path_fully = git_config_bool(var, value);
diff --git a/environment.c b/environment.c
index 85edd7f..e828b37 100644
--- a/environment.c
+++ b/environment.c
@@ -13,6 +13,7 @@
 
 int trust_executable_bit = 1;
 int trust_ctime = 1;
+int check_stat = 1;
 int has_symlinks = 1;
 int minimum_abbrev = 4, default_abbrev = 7;
 int ignore_case;
diff --git a/read-cache.c b/read-cache.c
index fda78bc..23db681 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -197,21 +197,25 @@ static int ce_match_stat_basic(struct cache_entry *ce, 
struct stat *st)
}
if (ce-ce_mtime.sec != (unsigned int)st-st_mtime)
changed |= MTIME_CHANGED;
-   if (trust_ctime  ce-ce_ctime.sec != (unsigned int)st-st_ctime)
-   changed |= CTIME_CHANGED;
+   if (trust_ctime ? check_stat : trust_ctime/*false*/)
+   if (ce-ce_ctime.sec != (unsigned int)st-st_ctime)
+   changed |= CTIME_CHANGED;
 
 #ifdef USE_NSEC
-   if (ce-ce_mtime.nsec != ST_MTIME_NSEC(*st))
+   if (check_stat  ce-ce_mtime.nsec != ST_MTIME_NSEC(*st))
changed |= MTIME_CHANGED;
-   if (trust_ctime  ce-ce_ctime.nsec != ST_CTIME_NSEC(*st))
-   changed |= CTIME_CHANGED;
+   if (trust_ctime ? check_stat : trust_ctime/*false*/)
+   if (ce-ce_ctime.nsec != ST_CTIME_NSEC(*st))
+   changed |= CTIME_CHANGED;
 #endif
 
-   if (ce-ce_uid != (unsigned int) st-st_uid ||
-   ce-ce_gid != (unsigned int) st-st_gid)
-   changed |= OWNER_CHANGED;
-   if (ce-ce_ino != (unsigned int) st-st_ino)
-   changed |= INODE_CHANGED;
+   if (check_stat) {
+   if (ce-ce_uid != (unsigned int) st-st_uid ||
+   ce-ce_gid != (unsigned int) st-st_gid)
+   changed |= OWNER_CHANGED;
+   if (ce-ce_ino != (unsigned int) st-st_ino)
+   changed |= INODE_CHANGED;
+   }
 
 #ifdef USE_STDEV
/*
@@ -219,8 +223,8 @@ static int ce_match_stat_basic(struct cache_entry *ce, 
struct stat *st)
 * clients will have different views of what device
 * the filesystem is on
 */
-   if (ce-ce_dev 

mulberry taschen outlet

2013-01-21 Thread addshdaw
Die Marke [url=http://www.taschenoutlet.eu/]Mulberry taschen outlet[/url]
bietet hq  taschen insbesondere innerhalb der Kleinen Gemeinde Chilcompton
auf Großbritannien. Die Longchamp bestimmte Marke macht Viel Bessere nutzung
von Komponenten und weiblich Baio echte bei der entwicklung of this ArTeN
von Handtaschen. This Art des Stoffes Reichlich symbolisiert das. Glamour
Besondere an Land Großbritannien, Selbst wenn die Tasche Longchamp in
mehrere Optionen Ausgewählt Werden can. You can Aber Auch ein Paar switch
Marken, sterben oft Wirklich zu analysieren, Wie sterben Longchamp
Handtaschen, dass. Dior Tasche und Fendi Tasche seins can und man can sie in
verschiedenen Styles und Designs zu kaufen . Sie sollten versuchen, Eine
echte Longchamp Tasche finden dann stellen sie sicher, zu erhalten Wie ein
Geschäft oder vielleicht Ein sehr Bekannter Fachhändler zertifiziert. Eine
weitere Alternative ist Immer zum Shoppen gehen In sofort von Ihrem
Internet-Site auf Longchamp gesetzt. characterised can sichergestellt Werden
Eine leichte Aufgabe-, authentische Produkte zu erhalten, und You can Auch
suchen Jeden Künstler und weiblich Jahrgang , so dass. Sie sterben beste Art
oder vielleicht Layout, can das. sterben persönlichkeit passt wählen.

Die taschen  Hut eine große Popularität bei den Meisten Frauen. This Arten
von [url=http://www.taschenoutlet.eu/]Taschen Outlet[/url] sind in der regel
wunderbar und weiblich belastbar. Longchamp Waren Sind in der regel in der
Qualität und minderwertige Auch zugänglich in den Wert ausgezeichnet. Die
Meisten Mädchen Geschäftsstelle, elegante Frauen und Frauen weiblich voll
entweder innerhalb of this Arten von Taschen Entwickelt.

Die [url=http://www.taschenoutlet.eu/]Luxus Taschen Online Shop[/url] aus
beschichtetem, textilem Gewebe Sind mit Wollfilz ausgelegt-iPads, MacBook
Air s und iPhones finden so passgenauen Schutz. Die Leinwand Haptik und
Optik unterstreichen sterben Individualität und Den Stil der Tasche. Each
Stück ist ein handgefertigtes Unikat und wird durch sterben Sorgfalt des
Tragers geprägt. Die Taschen Werden mit Klettband Verschlossen-so can
sterben Geräte Nicht herausfallen und Sindh gut vor Schmutz, Staub und
Kratzern Geschützt. Die iPad Taschen, sterben für iPad 2,3 und Das neue iPad
4 (iPad Retina) Fahrgäste, Sowie sterben MacBook Air 11 und 13 Taschen
Haben ein Return to-Label, Das der besitzer fuer den Verlustfall mit
Wadenfänger Adresse und einer Belohnung versehen can.

Abro ist ein deutsches Etikett für Luxus Taschen Online Shop und wurde in
den 1930er jahren in Rodgau gegründet. Die anfängliche Produktion von
Gürteln wurde Schnell UM die Produktion von Qualitativ hochwertigen
Ledertaschen aufgestockt. 
 seit Düse 3. Generation der Familie das. anderen
Titeln leitet, Sindh sterben Kollektionen geprägt von Designs , Die
Funktionalität, Qualität und Den aktuellsten Modetrend Miteinander vereinen. 

Abro bringt 'mit Seinen lässig, stylishen Kollektionen im Jeden Alltag Éinen
Hauch von [url=http://www.taschenoutlet.eu/]Hermes taschen Online
Shop[/url].




--
View this message in context: 
http://git.661346.n2.nabble.com/mulberry-taschen-outlet-tp7575740.html
Sent from the git mailing list archive at Nabble.com.
--
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


  1   2   >