Re: [PATCH] fix some clang warnings

2013-01-17 Thread John Keeping
On Wed, Jan 16, 2013 at 07:01:37PM +, John Keeping wrote:
 On Wed, Jan 16, 2013 at 10:24:49AM -0800, Jeff King wrote:
  On Wed, Jan 16, 2013 at 06:22:40PM +, John Keeping wrote:
  
  Thanks for checking. I'd rather squelch the warning completely (as in my
  re-post of Max's patch from a few minutes ago), and we can loosen it
  (possibly with a version check) later when a fix is widely disseminated.
 
 I checked again with a trunk build of clang and the warning's still
 there, so I've created a clang bug [1] to see if they will change the
 behaviour.
 
 [1] http://llvm.org/bugs/show_bug.cgi?id=14968

Well, that was quick!  This warning is now gone when using a fresh trunk
build of clang.

From [2], it looks like this will become version 3.3 (in about 5
months).  So should we change the condition to:

#if defined(__GNUC__)  (!defined(__clang__) ||
__clang_major__  3 || \
(__clang__major == 3  __clang_minor__ = 3)


[2] http://llvm.org/docs/HowToReleaseLLVM.html


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


[PATCH] combine-diff: suppress a clang warning

2013-01-17 Thread John Keeping
When compiling combine-diff.c, clang 3.2 says:

combine-diff.c:1006:19: warning: adding 'int' to a string does not
append to the string [-Wstring-plus-int]
prefix = COLONS + offset;
 ~~~^~~~
combine-diff.c:1006:19: note: use array indexing to silence this warning
prefix = COLONS + offset;
^
   [   ]

Suppress this by making the suggested change.

Signed-off-by: John Keeping j...@keeping.me.uk
---
On Thu, Jan 17, 2013 at 11:00:08AM +, John Keeping wrote:
 On Thu, Jan 17, 2013 at 11:32:39AM +0100, Antoine Pelisse wrote:
 There is one remaining warning on pu which hasn't been discussed in this
 thread as far as I can see.  I'll send a patch shortly.

... and here it is.

 combine-diff.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/combine-diff.c b/combine-diff.c
index bb1cc96..dba4748 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -1003,7 +1003,7 @@ static void show_raw_diff(struct combine_diff_path *p, 
int num_parent, struct re
offset = strlen(COLONS) - num_parent;
if (offset  0)
offset = 0;
-   prefix = COLONS + offset;
+   prefix = COLONS[offset];
 
/* Show the modes */
for (i = 0; i  num_parent; i++) {
-- 
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 get corrupted on lustre

2013-01-17 Thread Eric Chamberland

Hi!

I still have the corruption problems

We just compiled a git without threads to try... (by the way, 
--without-pthreads doesn't work, you have to do a --disable-pthreads 
instead).


And to remove the warnings about threads at git gc execution, I did a:

git config --local pack.threads 1

and cloned a repository and started to do:

git gc

once every hour.

Then this night (at 05:35:02 exactly), the same error as usual occurred:

error: index file 
.git/objects/pack/pack-bf0748cee64a1964be0a1061c82aca51c993b825.idx is 
too small

error: refs/heads/master does not point to a valid object!

So now I am convinced that it is not a thread problem

I am kind of discouraged, we like to use git, but in this case we have 
this error which seems unsolvable!


Anyone has a new idea?

Thanks,

Eric


On 01/09/2013 04:20 PM, Eric Chamberland wrote:

Hi Brian,

On 01/08/2013 11:11 AM, Eric Chamberland wrote:

On 12/24/2012 10:11 AM, Brian J. Murrell wrote:

Have you tried adding a -q to the git command line to quiet down git's
feedback messages?





I moved to git 1.8.1 and added the -q to the command git gc but it
occured to return an error, so the -q option is not avoiding the
problem here... :-/

command in crontab:

cd /rap/jsf-051-aa/ericc/tests_git_clones/GIREF  for i in seq 10; do
/software/apps/git/1.8.1/bin/git gc -q || true;done

results:
error: index file
.git/objects/pack/pack-1f09879c88cd71a15dcc891713cf038d249830ad.idx is
too small
error: refs/remotes/origin/BIB_Branche_1_4_x does not point to a valid
object!

and this clone was a clean clone in which only git qc -q has been
run on

I still have a doubt on threads

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


--
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-17 Thread Chris Rorvick
On Thu, Jan 17, 2013 at 12:59 AM, Junio C Hamano gits...@pobox.com wrote:
 Chris Rorvick ch...@rorvick.com writes:

 On Wed, Jan 16, 2013 at 10:48 AM, Junio C Hamano gits...@pobox.com wrote:
 It is fine when pushing into refs/tags/ hierarchy.  It is *NOT*
 OK if the type check does not satisfy this function.  In that case,
 we do not actually see the existence of the destination as a
 problem, but it is reported as such.  We are blocking because we do
 not like the type of the new object or the type of the old object.
 If the destination points at a commit, the push can succeed if the
 user changes what object to push, so saying you cannot push because
 the destination already exists is just wrong in such a case.

 So the solution is to revert back to recommending a merge?

 Of course not, because at that point you may not even have what you
 were attempting to overwrite.  Nobody says it is even something you
 could merge.

I was referring to your concern about rejecting based on type.  A push
causing a reference to move (for example) from a commit to a blob is
rejected as already exists with this patch.  You emphatically state
this is not OK and your solution is to revert back to behavior that
advises a merge.

Clearly the bug regarding an 'old' unknown to the client should be
fixed.  This is a obvious test case I should have covered and it's
unfortunate it made it into master.  But I don't understand why
is_forwardable() was misguided (maybe poorly named) nor why
ref_newer() is a better place to solve the issues it was addressing.

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


merge vs. rebase question

2013-01-17 Thread Dennis Putnam
As a git noob I am having trouble understanding when to use which
commands. I have a repository (bare) on my Linux server. I also created
a build directory as a local repository. In my build script I do a 'git
pull' to make sure the build directory is up to date. No changes are
made to my source so this repository never does an 'add' or 'commit'.
When I run my script with 'pull', the output indicates that changes were
found and seems to have pulled them into the local directory. However,
when I look at the resulting source, none of the expected changes show
up. I then tried a 'fetch' and 'rebase'. That worked but I don't
understand why. I thought 'pull' did a 'fetch' and a 'merge' so I don't
understand why a 'fetch' and 'rebase' worked but 'fetch' and 'merge' did
not. Unless my understanding of what 'pull' does is wrong. In my case,
what should I be using in my script to assure that the build directory
is current?

Thanks.



signature.asc
Description: OpenPGP digital signature


Re: GIT get corrupted on lustre

2013-01-17 Thread Eric Chamberland

On 01/17/2013 09:23 AM, Philippe Vaucher wrote:

Anyone has a new idea?


Did you try Jeff King's code to confirm his idea?

Philippe



Yes I did, but it was running without any problem

I find that my test case is simple (fresh git clone then git gc in a 
crontab), I bet anyone who has access to a Lustre filesystem can 
reproduce the problem...  The problem is to have such a filesystem to do 
the tests


But I am available to do it...

Thanks,

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


RE: GIT get corrupted on lustre

2013-01-17 Thread Pyeron, Jason J CTR (US)
 -Original Message-
 From: Eric Chamberland
 Sent: Thursday, January 17, 2013 11:31 AM
 
 On 01/17/2013 09:23 AM, Philippe Vaucher wrote:
  Anyone has a new idea?
 
  Did you try Jeff King's code to confirm his idea?
 
  Philippe
 
 
 Yes I did, but it was running without any problem
 
 I find that my test case is simple (fresh git clone then git gc in
 a
 crontab), I bet anyone who has access to a Lustre filesystem can
 reproduce the problem...  The problem is to have such a filesystem to
 do
 the tests

Stabbing in the dark, but can you log the details with ProcessMon?

http://technet.microsoft.com/en-us/sysinternals/bb896645

 
 But I am available to do it...

-Jason


smime.p7s
Description: S/MIME cryptographic signature


Re: GIT get corrupted on lustre

2013-01-17 Thread Maxime Boissonneault
I don't know of any lustre filesystem that is used on Windows. Barely 
anybody uses Windows in the HPC industry.

This is a Linux cluster.

Maxime Boissonneault

Le 2013-01-17 11:40, Pyeron, Jason J CTR (US) a écrit :

-Original Message-
From: Eric Chamberland
Sent: Thursday, January 17, 2013 11:31 AM

On 01/17/2013 09:23 AM, Philippe Vaucher wrote:

Anyone has a new idea?

Did you try Jeff King's code to confirm his idea?

Philippe


Yes I did, but it was running without any problem

I find that my test case is simple (fresh git clone then git gc in
a
crontab), I bet anyone who has access to a Lustre filesystem can
reproduce the problem...  The problem is to have such a filesystem to
do
the tests

Stabbing in the dark, but can you log the details with ProcessMon?

http://technet.microsoft.com/en-us/sysinternals/bb896645


But I am available to do it...

-Jason



--
-
Maxime Boissonneault
Analyste de calcul - Calcul Québec, Université Laval
Ph. D. en physique

--
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/2] fix clang -Wtautological-compare with unsigned enum

2013-01-17 Thread Linus Torvalds
On Thu, Jan 17, 2013 at 3:00 AM, John Keeping j...@keeping.me.uk wrote:

 There's also a warning that triggers with clang 3.2 but not clang trunk, which
 I think is a legitimate warning - perhaps someone who understands integer type
 promotion better than me can explain why the code is OK (patch-score is
 declared as 'int'):

 builtin/apply.c:1044:47: warning: comparison of constant 18446744073709551615
 with expression of type 'int' is always false
 [-Wtautological-constant-out-of-range-compare]
 if ((patch-score = strtoul(line, NULL, 10)) == ULONG_MAX)
  ^  ~

The warning seems to be very very wrong, and implies that clang has
some nasty bug in it.

Since patch-score is 'int', and UNLONG_MAX is 'unsigned long', the
conversion rules for the comparison is that the int result from the
assignment is cast to unsigned long. And if you cast (int)-1 to
unsigned long, you *do* get ULONG_MAX. That's true regardless of
whether long has the same number of bits as int or is bigger. The
implicit cast will be done as a sign-extension (unsigned long is not
signed, but the source type of 'int' *is* signed, and that is what
determines the sign extension on casting).

So the is always false is pure and utter crap. clang is wrong, and
it is wrong in a way that implies that it actually generates incorrect
code. It may well be worth making a clang bug report about this.

That said, clang is certainly understandably confused. The code
depends on subtle conversion rules and bit patterns, and is clearly
very confusingly written.

So it would probably be good to rewrite it as

unsigned long val = strtoul(line, NULL, 10);
if (val == ULONG_MAX) ..
patch-score = val;

instead. At which point you might as well make the comparison be =
INT_MAX instead, since anything bigger than that is going to be
bogus.

So the git code is probably worth cleaning up, but for git it would be
a cleanup. For clang, this implies a major bug and bad code
generation.

   Linus
 Linus
--
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/2] fix clang -Wtautological-compare with unsigned enum

2013-01-17 Thread Antoine Pelisse
BTW, I think it has been addressed [1] by clang already and that would
explain why you don't have the warning when using clang trunk version.

[1]: http://llvm-reviews.chandlerc.com/D113

Antoine,

On Thu, Jan 17, 2013 at 5:44 PM, Linus Torvalds
torva...@linux-foundation.org wrote:
 On Thu, Jan 17, 2013 at 3:00 AM, John Keeping j...@keeping.me.uk wrote:

 There's also a warning that triggers with clang 3.2 but not clang trunk, 
 which
 I think is a legitimate warning - perhaps someone who understands integer 
 type
 promotion better than me can explain why the code is OK (patch-score is
 declared as 'int'):

 builtin/apply.c:1044:47: warning: comparison of constant 18446744073709551615
 with expression of type 'int' is always false
 [-Wtautological-constant-out-of-range-compare]
 if ((patch-score = strtoul(line, NULL, 10)) == ULONG_MAX)
  ^  ~

 The warning seems to be very very wrong, and implies that clang has
 some nasty bug in it.

 Since patch-score is 'int', and UNLONG_MAX is 'unsigned long', the
 conversion rules for the comparison is that the int result from the
 assignment is cast to unsigned long. And if you cast (int)-1 to
 unsigned long, you *do* get ULONG_MAX. That's true regardless of
 whether long has the same number of bits as int or is bigger. The
 implicit cast will be done as a sign-extension (unsigned long is not
 signed, but the source type of 'int' *is* signed, and that is what
 determines the sign extension on casting).

 So the is always false is pure and utter crap. clang is wrong, and
 it is wrong in a way that implies that it actually generates incorrect
 code. It may well be worth making a clang bug report about this.

 That said, clang is certainly understandably confused. The code
 depends on subtle conversion rules and bit patterns, and is clearly
 very confusingly written.

 So it would probably be good to rewrite it as

 unsigned long val = strtoul(line, NULL, 10);
 if (val == ULONG_MAX) ..
 patch-score = val;

 instead. At which point you might as well make the comparison be =
 INT_MAX instead, since anything bigger than that is going to be
 bogus.

 So the git code is probably worth cleaning up, but for git it would be
 a cleanup. For clang, this implies a major bug and bad code
 generation.

Linus
  Linus
--
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/2] fix clang -Wtautological-compare with unsigned enum

2013-01-17 Thread John Keeping
On Thu, Jan 17, 2013 at 08:44:20AM -0800, Linus Torvalds wrote:
 On Thu, Jan 17, 2013 at 3:00 AM, John Keeping j...@keeping.me.uk wrote:

 There's also a warning that triggers with clang 3.2 but not clang trunk, 
 which
 I think is a legitimate warning - perhaps someone who understands integer 
 type
 promotion better than me can explain why the code is OK (patch-score is
 declared as 'int'):

 builtin/apply.c:1044:47: warning: comparison of constant 18446744073709551615
 with expression of type 'int' is always false
 [-Wtautological-constant-out-of-range-compare]
 if ((patch-score = strtoul(line, NULL, 10)) == ULONG_MAX)
  ^  ~
 
 The warning seems to be very very wrong, and implies that clang has
 some nasty bug in it.
 
 Since patch-score is 'int', and UNLONG_MAX is 'unsigned long', the
 conversion rules for the comparison is that the int result from the
 assignment is cast to unsigned long. And if you cast (int)-1 to
 unsigned long, you *do* get ULONG_MAX. That's true regardless of
 whether long has the same number of bits as int or is bigger. The
 implicit cast will be done as a sign-extension (unsigned long is not
 signed, but the source type of 'int' *is* signed, and that is what
 determines the sign extension on casting).
 
 So the is always false is pure and utter crap. clang is wrong, and
 it is wrong in a way that implies that it actually generates incorrect
 code. It may well be worth making a clang bug report about this.

The warning doesn't occur with a build from their trunk so it looks like
it's already fixed - it just won't make into into a release for about 5
months going by their timeline.

Thanks for the clear explanation.
--
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-17 Thread Pyeron, Jason J CTR (US)
Sorry, I am in cygwin mode, and I had crossed wires in my head. 
s/ProcessMon/strace/

 -Original Message-
 From: git-ow...@vger.kernel.org [mailto:git-ow...@vger.kernel.org] On
 Behalf Of Maxime Boissonneault
 Sent: Thursday, January 17, 2013 11:41 AM
 To: Pyeron, Jason J CTR (US)
 Cc: Eric Chamberland; Philippe Vaucher; git@vger.kernel.org; Sébastien
 Boisvert
 Subject: Re: GIT get corrupted on lustre
 
 I don't know of any lustre filesystem that is used on Windows. Barely
 anybody uses Windows in the HPC industry.
 This is a Linux cluster.
 
 Maxime Boissonneault
 
 Le 2013-01-17 11:40, Pyeron, Jason J CTR (US) a écrit :
  -Original Message-
  From: Eric Chamberland
  Sent: Thursday, January 17, 2013 11:31 AM
 
  On 01/17/2013 09:23 AM, Philippe Vaucher wrote:
  Anyone has a new idea?
  Did you try Jeff King's code to confirm his idea?
 
  Philippe
 
  Yes I did, but it was running without any problem
 
  I find that my test case is simple (fresh git clone then git gc
 in
  a
  crontab), I bet anyone who has access to a Lustre filesystem can
  reproduce the problem...  The problem is to have such a filesystem
 to
  do
  the tests
  Stabbing in the dark, but can you log the details with ProcessMon?
 
  http://technet.microsoft.com/en-us/sysinternals/bb896645
 
  But I am available to do it...
  -Jason
 
 
 --
 -
 Maxime Boissonneault
 Analyste de calcul - Calcul Québec, Université Laval
 Ph. D. en physique
 
 --
 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


smime.p7s
Description: S/MIME cryptographic signature


[PATCH v2 0/8] Initial Python 3 support

2013-01-17 Thread John Keeping
This series does enough so that everything except git-p4 runs under
Python 3.

As discussed with Pete, it may not make sense to change git-p4 to
support Python 3 until Perforce's Python output mode is changed.  So
does it make sense to merge this now and say use Python 2 if you want
git-p4?

Changes since v1:

* rebased on master after fc/remote-testgit-feature-done was merged,
  leading to an extra change in patch 8 (git-remote-testpy: call print
  as a function)
* changed patch 2 (git_remote_helpers: fix input when running under
  Python 3) to treat ref names as byte strings

John Keeping (8):
  git_remote_helpers: Allow building with Python 3
  git_remote_helpers: fix input when running under Python 3
  git_remote_helpers: Force rebuild if python version changes
  git_remote_helpers: Use 2to3 if building with Python 3
  svn-fe: allow svnrdump_sim.py to run with Python 3
  git-remote-testpy: hash bytes explicitly
  git-remote-testpy: don't do unbuffered text I/O
  git-remote-testpy: call print as a function

 contrib/svn-fe/svnrdump_sim.py |  4 ++--
 git-remote-testpy.py   | 42 +++---
 git_remote_helpers/.gitignore  |  1 +
 git_remote_helpers/Makefile| 10 +++--
 git_remote_helpers/git/importer.py |  9 +---
 git_remote_helpers/setup.py| 10 +
 6 files changed, 48 insertions(+), 28 deletions(-)

-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 1/8] git_remote_helpers: allow building with Python 3

2013-01-17 Thread John Keeping
Change inline Python to call print as a function not a statement.

This is harmless because Python 2 will see the parentheses as redundant
grouping but they are necessary to run this code with Python 3.

Signed-off-by: John Keeping j...@keeping.me.uk
---
 git_remote_helpers/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git_remote_helpers/Makefile b/git_remote_helpers/Makefile
index 74b05dc..f65f064 100644
--- a/git_remote_helpers/Makefile
+++ b/git_remote_helpers/Makefile
@@ -23,7 +23,7 @@ endif
 
 PYLIBDIR=$(shell $(PYTHON_PATH) -c \
 import sys; \
-print 'lib/python%i.%i/site-packages' % sys.version_info[:2])
+print('lib/python%i.%i/site-packages' % sys.version_info[:2]))
 
 all: $(pysetupfile)
$(QUIET)$(PYTHON_PATH) $(pysetupfile) $(QUIETSETUP) build
-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 3/8] git_remote_helpers: force rebuild if python version changes

2013-01-17 Thread John Keeping
When different version of python are used to build via distutils, the
behaviour can change.  Detect changes in version and pass --force in
this case.

Signed-off-by: John Keeping j...@keeping.me.uk
---
 git_remote_helpers/.gitignore | 1 +
 git_remote_helpers/Makefile   | 8 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/git_remote_helpers/.gitignore b/git_remote_helpers/.gitignore
index 2247d5f..06c664f 100644
--- a/git_remote_helpers/.gitignore
+++ b/git_remote_helpers/.gitignore
@@ -1,2 +1,3 @@
+/GIT-PYTHON_VERSION
 /build
 /dist
diff --git a/git_remote_helpers/Makefile b/git_remote_helpers/Makefile
index f65f064..91f458f 100644
--- a/git_remote_helpers/Makefile
+++ b/git_remote_helpers/Makefile
@@ -25,8 +25,14 @@ PYLIBDIR=$(shell $(PYTHON_PATH) -c \
 import sys; \
 print('lib/python%i.%i/site-packages' % sys.version_info[:2]))
 
+py_version=$(shell $(PYTHON_PATH) -c \
+   'import sys; print(%i.%i % sys.version_info[:2])')
+
 all: $(pysetupfile)
-   $(QUIET)$(PYTHON_PATH) $(pysetupfile) $(QUIETSETUP) build
+   $(QUIET)test $$(cat GIT-PYTHON_VERSION 2/dev/null) = $(py_version) 
|| \
+   flags=--force; \
+   $(PYTHON_PATH) $(pysetupfile) $(QUIETSETUP) build $$flags
+   $(QUIET)echo $(py_version) GIT-PYTHON_VERSION
 
 install: $(pysetupfile)
$(PYTHON_PATH) $(pysetupfile) install --prefix $(DESTDIR_SQ)$(prefix)
-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 4/8] git_remote_helpers: use 2to3 if building with Python 3

2013-01-17 Thread John Keeping
Using the approach detailed on the Python wiki[1], run 2to3 on the code
as part of the build if building with Python 3.

The code itself requires no changes to convert cleanly.

[1] http://wiki.python.org/moin/PortingPythonToPy3k

Signed-off-by: John Keeping j...@keeping.me.uk
---
 git_remote_helpers/setup.py | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/git_remote_helpers/setup.py b/git_remote_helpers/setup.py
index 4d434b6..6de41de 100644
--- a/git_remote_helpers/setup.py
+++ b/git_remote_helpers/setup.py
@@ -4,6 +4,15 @@
 
 from distutils.core import setup
 
+# If building under Python3 we need to run 2to3 on the code, do this by
+# trying to import distutils' 2to3 builder, which is only available in
+# Python3.
+try:
+from distutils.command.build_py import build_py_2to3 as build_py
+except ImportError:
+# 2.x
+from distutils.command.build_py import build_py
+
 setup(
 name = 'git_remote_helpers',
 version = '0.1.0',
@@ -14,4 +23,5 @@ setup(
 url = 'http://www.git-scm.com/',
 package_dir = {'git_remote_helpers': ''},
 packages = ['git_remote_helpers', 'git_remote_helpers.git'],
+cmdclass = {'build_py': build_py},
 )
-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 5/8] svn-fe: allow svnrdump_sim.py to run with Python 3

2013-01-17 Thread John Keeping
The changes to allow this script to run with Python 3 are minimal and do
not affect its functionality on the versions of Python 2 that are
already supported (2.4 onwards).

Signed-off-by: John Keeping j...@keeping.me.uk
---
 contrib/svn-fe/svnrdump_sim.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/contrib/svn-fe/svnrdump_sim.py b/contrib/svn-fe/svnrdump_sim.py
index 17cf6f9..4e78a1c 100755
--- a/contrib/svn-fe/svnrdump_sim.py
+++ b/contrib/svn-fe/svnrdump_sim.py
@@ -14,7 +14,7 @@ if sys.hexversion  0x0204:
 
 def getrevlimit():
 var = 'SVNRMAX'
-if os.environ.has_key(var):
+if var in os.environ:
 return os.environ[var]
 return None
 
@@ -44,7 +44,7 @@ def writedump(url, lower, upper):
 
 if __name__ == __main__:
 if not (len(sys.argv) in (3, 4, 5)):
-print usage: %s dump URL -rLOWER:UPPER
+print(usage: %s dump URL -rLOWER:UPPER)
 sys.exit(1)
 if not sys.argv[1] == 'dump': raise NotImplementedError('only dump 
is suppported.')
 url = sys.argv[2]
-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread John Keeping
Under Python 3 'hasher.update(...)' must take a byte string and not a
unicode string.  Explicitly encode the argument to this method as UTF-8
so that this code works under Python 3.

This moves the required Python version forward to 2.0.

Signed-off-by: John Keeping j...@keeping.me.uk
---
 git-remote-testpy.py | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/git-remote-testpy.py b/git-remote-testpy.py
index d94a66a..f8dc196 100644
--- a/git-remote-testpy.py
+++ b/git-remote-testpy.py
@@ -31,9 +31,9 @@ from git_remote_helpers.git.exporter import GitExporter
 from git_remote_helpers.git.importer import GitImporter
 from git_remote_helpers.git.non_local import NonLocalGit
 
-if sys.hexversion  0x01050200:
-# os.makedirs() is the limiter
-sys.stderr.write(git-remote-testgit: requires Python 1.5.2 or later.\n)
+if sys.hexversion  0x0200:
+# string.encode() is the limiter
+sys.stderr.write(git-remote-testgit: requires Python 2.0 or later.\n)
 sys.exit(1)
 
 def get_repo(alias, url):
@@ -45,7 +45,7 @@ def get_repo(alias, url):
 repo.get_head()
 
 hasher = _digest()
-hasher.update(repo.path)
+hasher.update(repo.path.encode('utf-8'))
 repo.hash = hasher.hexdigest()
 
 repo.get_base_path = lambda base: os.path.join(
-- 
1.8.1.1.260.g99b33f4.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


[PATCH v2 8/8] git-remote-testpy: call print as a function

2013-01-17 Thread John Keeping
This is harmless in Python 2, which sees the parentheses as redundant
grouping, but is required for Python 3.  Since this is the only change
required to make this script just run under Python 3 without needing
2to3 it seems worthwhile.

The case of an empty print must be handled specially because in that
case Python 2 will interpret '()' as an empty tuple and print it as
'()'; inserting an empty string fixes this.

Signed-off-by: John Keeping j...@keeping.me.uk
---
 git-remote-testpy.py | 28 ++--
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/git-remote-testpy.py b/git-remote-testpy.py
index bc5e3cf..ccdb2dc 100644
--- a/git-remote-testpy.py
+++ b/git-remote-testpy.py
@@ -87,9 +87,9 @@ def do_capabilities(repo, args):
 Prints the supported capabilities.
 
 
-print import
-print export
-print refspec refs/heads/*:%s* % repo.prefix
+print(import)
+print(export)
+print(refspec refs/heads/*:%s* % repo.prefix)
 
 dirname = repo.get_base_path(repo.gitdir)
 
@@ -98,11 +98,11 @@ def do_capabilities(repo, args):
 
 path = os.path.join(dirname, 'git.marks')
 
-print *export-marks %s % path
+print(*export-marks %s % path)
 if os.path.exists(path):
-print *import-marks %s % path
+print(*import-marks %s % path)
 
-print # end capabilities
+print('') # end capabilities
 
 
 def do_list(repo, args):
@@ -115,16 +115,16 @@ def do_list(repo, args):
 
 for ref in repo.revs:
 debug(? refs/heads/%s, ref)
-print ? refs/heads/%s % ref
+print(? refs/heads/%s % ref)
 
 if repo.head:
 debug(@refs/heads/%s HEAD % repo.head)
-print @refs/heads/%s HEAD % repo.head
+print(@refs/heads/%s HEAD % repo.head)
 else:
 debug(@refs/heads/master HEAD)
-print @refs/heads/master HEAD
+print(@refs/heads/master HEAD)
 
-print # end list
+print('') # end list
 
 
 def update_local_repo(repo):
@@ -164,7 +164,7 @@ def do_import(repo, args):
 ref = line[7:].strip()
 refs.append(ref)
 
-print feature done
+print(feature done)
 
 if os.environ.get(GIT_REMOTE_TESTGIT_FAILURE):
 die('Told to fail')
@@ -172,7 +172,7 @@ def do_import(repo, args):
 repo = update_local_repo(repo)
 repo.exporter.export_repo(repo.gitdir, refs)
 
-print done
+print(done)
 
 
 def do_export(repo, args):
@@ -192,8 +192,8 @@ def do_export(repo, args):
 repo.non_local.push(repo.gitdir)
 
 for ref in changed:
-print ok %s % ref
-print
+print(ok %s % ref)
+print('')
 
 
 COMMANDS = {
-- 
1.8.1.1.260.g99b33f4.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] Allow Git::get_tz_offset to properly handle DST boundary times

2013-01-17 Thread Junio C Hamano
Ben Walton bdwal...@gmail.com writes:

 The Git::get_tz_offset is meant to provide a workalike replacement for
 the GNU strftime %z format specifier.  The algorithm used failed to
 properly handle DST boundary cases.

 For example, the unix time 1162105199 in CST6CDT saw set_tz_offset
 improperly return -0600 instead of -0500.

 TZ=CST6CDT date -d @1162105199 +%c %z
 Sun 29 Oct 2006 01:59:59 AM CDT -0500

 $ zdump -v /usr/share/zoneinfo/CST6CDT | grep 2006
 /usr/share/zoneinfo/CST6CDT  Sun Apr  2 07:59:59 2006 UTC = Sun Apr  2
 01:59:59 2006 CST isdst=0 gmtoff=-21600
 /usr/share/zoneinfo/CST6CDT  Sun Apr  2 08:00:00 2006 UTC = Sun Apr  2
 03:00:00 2006 CDT isdst=1 gmtoff=-18000
 /usr/share/zoneinfo/CST6CDT  Sun Oct 29 06:59:59 2006 UTC = Sun Oct 29
 01:59:59 2006 CDT isdst=1 gmtoff=-18000
 /usr/share/zoneinfo/CST6CDT  Sun Oct 29 07:00:00 2006 UTC = Sun Oct 29
 01:00:00 2006 CST isdst=0 gmtoff=-21600

 To determine how many hours/minutes away from GMT a particular time
 was, we calculated the gmtime() of the requested time value and then
 used Time::Local's timelocal() function to turn the GMT-based time
 back into a scalar value representing seconds from the epoch.  Because
 GMT has no daylight savings time, timelocal() cannot handle the
 ambiguous times that occur at DST boundaries since there are two
 possible correct results.

 To work around the ambiguity at these boundaries, we must take into
 account the pre and post conversion values for is_dst as provided by
 both the original time value and the value that has been run through
 timelocal().  If the is_dst field of the two times disagree then we
 must modify the value returned from timelocal() by an hour in the
 correct direction.

It seems to me that it is a very roundabout way.  It may be correct,
but it is unclear why the magic +/-3600 shift is the right solution
and I suspect even you wouldn't notice if I sent you back your patch
with a slight change to swap $gm += 3600 and $gm -= 3600 lines ;-).

For that timestamp in question, the human-readable representation of
gmtime($t) and localtime($t) look like these two strings:

my $t = 1162105199;
print gmtime($t), \n;# Sun Oct 29 06:59:59 2006
print localtime($t), \n; # Sun Oct 29 01:59:59 2006

As a human, you can easily see that these two stringified timestamps
look 5 hours apart.  Think how you managed to do so.

If we convert these back to the seconds-since-epoch, as if these
broken-down times were both in a single timezone that does not have
any DST issues, you can get the offset (in seconds) by subtraction,
and that is essentially the same as the way in which your eyes saw
they are 5 hours apart, no?  In other words, why do you need to run
timelocal() at all?

my $t = 1162105199;
my $lct = timegm(localtime($t)); 
# of course, timegm(gmtime($t)) == $t

my $minutes = int(($lct - $t)/60);
my $sign +;
if ($minutes  0) {
$sign = -;
$minutes = -$minutes;
}
my $hours = int($minutes/60);
$minutes -= $hours * 60;
sprintf(%s%02d%02d, $sign, $hours, $minutes);

Confused...


 Signed-off-by: Ben Walton bdwal...@gmail.com
 ---
  perl/Git.pm |   20 
  1 file changed, 20 insertions(+)

 diff --git a/perl/Git.pm b/perl/Git.pm
 index 5649bcc..788b9b4 100644
 --- a/perl/Git.pm
 +++ b/perl/Git.pm
 @@ -528,7 +528,27 @@ If TIME is not supplied, the current local time is used.
  sub get_tz_offset {
   # some systmes don't handle or mishandle %z, so be creative.
   my $t = shift || time;
 + # timelocal() has a problem when it comes to DST ambiguity so
 + # times that are on a DST boundary cannot be properly converted
 + # using it.  we will possibly adjust its result depending on whehter
 + # pre and post conversions agree on DST
   my $gm = timelocal(gmtime($t));
 +
 + # we need to know whether we were originally in DST or not
 + my $orig_dst = (localtime($t))[8];
 + # and also whether timelocal thinks we're in DST
 + my $conv_dst = (localtime($gm))[8];
 +
 + # re-adjust $gm based on the DST value for the two times we're
 + # handling.
 + if ($orig_dst != $conv_dst) {
 + if ($orig_dst == 1) {
 + $gm -= 3600;
 + } else {
 + $gm += 3600;
 + }
 + }
 +
   my $sign = qw( + + - )[ $t = $gm ];
   return sprintf(%s%02d%02d, $sign, (gmtime(abs($t - $gm)))[2,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


Changing Spell checker under GIT

2013-01-17 Thread Mike Hall
As my organization has change from RedHat 5 to RedHat 6 Linux,
it appears that RedHat is trying to replace (deprecate) ispell/aspell
with a different tool (hunspell).

It appears that GIT GUI current supports changing the dictionary used
to support spell checks.   Is there currently a way to change the
spell check program to be used(can't find in documentation or version
of code that I'm currently installing), or would someone consider this
as a future program change?

Thanks for your time.
Mike Hall--
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


git pull - reporting that I modified files, but I did not

2013-01-17 Thread Jay Vee
When I do a git pull, I am getting a messages that changes to local
files would be overwritten by a merge, but  I have not changed these
files locally at all, I have not opened them in my IDE.
This happens every now and then.

1) Why does this happen?

2) How do I prevent this from happening in the future?

3) How do I get out of this state so that I can do a git pull and
rebuild my code?

---
In other instances, when I do a git pull (not getting the message
above,  I will see something like:
M  src/MyClass.java  = a file that I did not touch or modify
D   src/AnotherClass.java   = a file that I did not delete or touch
M src/MyModifiedClass.java   = a file that I indeed modified for
which in the pull there are no merge conflicts.

and the pull is successful, (then I want to push my changes), but I
did not change either of the above two files

If I see the above, am I OK to push?  My thinking is that git thinks I
changed 'src/MyClass.java' and if I do a diff there are differences,
but I do not want to push because I NEVER TOUCHED THAT FILE IN ANY
WAY.

What is going on here?  Maybe this is normal and I simply do not
understand correctly.

What is happening?  I would expect to see only line items 'M' and 'D'
for files that I personally have modified and deleted.
If I push at this point, will I overwrite changes in the repo pushed
by others and muck things up?

thanks


J.V.
--
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: Changing Spell checker under GIT

2013-01-17 Thread Jonathan Nieder
Hi Mike,

Mike Hall wrote:

 As my organization has change from RedHat 5 to RedHat 6 Linux,
 it appears that RedHat is trying to replace (deprecate) ispell/aspell
 with a different tool (hunspell).

 It appears that GIT GUI current supports changing the dictionary used
 to support spell checks.   Is there currently a way to change the
 spell check program to be used(can't find in documentation or version
 of code that I'm currently installing), or would someone consider this
 as a future program change?

git-gui uses the aspell command as a spellchecker.  A patch to add
hunspell support sounds like it would be a nice addition.  If you'd
like to work on it, then lib/spellcheck.tcl in

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

might be a good place to start.

Hope that helps,
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


Re: [PATCH v2 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 Under Python 3 'hasher.update(...)' must take a byte string and not a
 unicode string.  Explicitly encode the argument to this method as UTF-8
 so that this code works under Python 3.

 This moves the required Python version forward to 2.0.

 Signed-off-by: John Keeping j...@keeping.me.uk
 ---

Hmph.  So what happens when the path is _not_ encoded in UTF-8?

Is the repo.hash (and local.hash that gets a copy of it) something
that needs to stay the same across multiple invocations of this
remote helper, and between the currently shipped Git and the version
of Git after applying this patch?  If that is not the case, and if
this is used only to get a randomly-looking 40-byte hexadecimal
string, then a lossy attempt to .encode('utf-8') and falling back to
replace or ignore bytes in the original that couldn't be interpreted
as part of a UTF-8 string would be OK, but doesn't .encode('utf-8')
throw an exception if not told to 'ignore' or something?

  git-remote-testpy.py | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

 diff --git a/git-remote-testpy.py b/git-remote-testpy.py
 index d94a66a..f8dc196 100644
 --- a/git-remote-testpy.py
 +++ b/git-remote-testpy.py
 @@ -31,9 +31,9 @@ from git_remote_helpers.git.exporter import GitExporter
  from git_remote_helpers.git.importer import GitImporter
  from git_remote_helpers.git.non_local import NonLocalGit
  
 -if sys.hexversion  0x01050200:
 -# os.makedirs() is the limiter
 -sys.stderr.write(git-remote-testgit: requires Python 1.5.2 or later.\n)
 +if sys.hexversion  0x0200:
 +# string.encode() is the limiter
 +sys.stderr.write(git-remote-testgit: requires Python 2.0 or later.\n)
  sys.exit(1)
  
  def get_repo(alias, url):
 @@ -45,7 +45,7 @@ def get_repo(alias, url):
  repo.get_head()
  
  hasher = _digest()
 -hasher.update(repo.path)
 +hasher.update(repo.path.encode('utf-8'))
  repo.hash = hasher.hexdigest()
  
  repo.get_base_path = lambda base: os.path.join(
--
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 6/8] git-remote-testpy: hash bytes explicitly

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

 John Keeping j...@keeping.me.uk writes:

 Under Python 3 'hasher.update(...)' must take a byte string and not a
 unicode string.  Explicitly encode the argument to this method as UTF-8
 so that this code works under Python 3.

 This moves the required Python version forward to 2.0.

 Signed-off-by: John Keeping j...@keeping.me.uk
 ---

 Hmph.  So what happens when the path is _not_ encoded in UTF-8?

Oh, my brain was not working. Forget this part, and sorry for the
noise.  We are not decoding a bytestring to an array of unicode
characters, but going the other way around here.


--
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] Add --unannotate option to git-subtree

2013-01-17 Thread James Nylen
On Mon, Dec 31, 2012 at 8:15 PM,  gree...@obbligato.org wrote:
 James Nylen jny...@gmail.com writes:

 Rather than adding a marker to each commit when splitting out the
 commits back to the subproject, --unannotate removes the specified
 string (or bash glob pattern) from the beginning of the first line of
 the commit message.  This enables the following workflow:

 I applied the patch to my working copy but it doesn't seem to do
 what I'd expect.  The test script does something like this:

 - create project A
 - add file to project A with message subproj: add F1
 - add file to project A with message subproj: add F2
 - add project A as a subtree of project B under directory subdir
 - add a file to subdir with message subproj: add F3
 - do a split --unannotate=subproj:

 I expected to see a log with no mention of subproj anywhere.  Instead
 I get:

 add F3
 subproj: add F2
 subproj: add F1

 Is this as you intend?  Is --unannotate only supposed to strip the
 string for commits added when A was a subtree of B?

 I guess this behavior makes sense in that the user would want to
 see the same commits that existed before A became a subproject.

-David

Wow, I missed a bunch of emails on this.  Thanks for applying and for
writing tests!

This is as intended.  You wouldn't want subtree to modify commits that
occurred in the full repository for project A.  Furthermore, you
wouldn't have a subproj: commit in project A's standalone repo since
it wasn't a subproject at that time.

The --annotate option confused me because it was the reverse of what I
wanted.  As in your example, a typical use would be 'add a file to
subdir with message subproj: add F3 ' to make it clear that you were
committing to the subproj part of a larger repository.  Then, when
splitting back out to subproj's main repository, you'd want to remove
the prefix.
--
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 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread John Keeping
On Thu, Jan 17, 2013 at 09:00:48PM +, John Keeping wrote:
 On Thu, Jan 17, 2013 at 12:36:33PM -0800, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
 Under Python 3 'hasher.update(...)' must take a byte string and not a
 unicode string.  Explicitly encode the argument to this method as UTF-8
 so that this code works under Python 3.

 This moves the required Python version forward to 2.0.

 Signed-off-by: John Keeping j...@keeping.me.uk
 ---
 
 Hmph.  So what happens when the path is _not_ encoded in UTF-8?
 
 Do you mean encodable?  As you say below it will currently throw an
 exception.

Now my brain's not working - we shouldn't get an error converting from a
Unicode string to UTF-8, so I think this patch is OK as it is.

  Is the repo.hash (and local.hash that gets a copy of it) something
  that needs to stay the same across multiple invocations of this
  remote helper, and between the currently shipped Git and the version
  of Git after applying this patch?
 
 It's used to specify the path of the repository for importing or
 exporting, so it should stay consistent across invocations.  However,
 this is only an example remote helper so I don't think we should worry
 if it changes from one Git release to the next.
--
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/8] Add --unannotate

2013-01-17 Thread James Nylen
On Tue, Jan 1, 2013 at 5:31 PM,  gree...@obbligato.org wrote:
 Junio C Hamano gits...@pobox.com writes:

 David A. Greene gree...@obbligato.org writes:

 From: James Nylen jny...@gmail.com

 Teach git-subtree about --unannotate.  This option strips a prefix
 from a commit message when doing a subtree split.

 Hrm.  This looks like a workaround for a short-sighted misdesign of
 the annotate option that only allowed prefixing a fixed string.  I
 have to wonder if it is better to deprecate --annotate and replace
 it with a more general commit log rewriting facility that can
 cover both use cases?

 That's not a bad idea.  I'd have to think a bit about a sensible design.
 Do you have any ideas, James?

I just now saw these emails.  I'm having a hard time thinking of any
good use case other than:

 - add fancylib as a subtree of myprog
 - commit to myprog repo: fancylib: don't crash as much
 - split these commits back out to fancylib's main repo, and remove
the fancylib:  prefix

You could potentially have something like Don't crash as much
(fancylib) but that's awkward.  What might you want to do with a
pattern-based rewrite that doesn't involve removing a prefix when
splitting commits?

In fact, I don't see the use of the original --annotate option at all,
since it causes more detailed commit messages in the smaller of the
two repositories.
--
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-svn: do not escape certain characters in paths

2013-01-17 Thread Peter Wu
Subversion 1.7 and newer implement HTTPv2, an extension that should make HTTP
more efficient. Servers with support for this protocol will make the subversion
client library take an alternative code path that checks (with assertions)
whether the URL is canonical or not.

This patch fixes an issue I encountered while trying to `git svn dcommit` a
rename action for a file containing a single quote character (User's Manual
to UserMan.tex). It does not happen for older subversion 1.6 servers nor
non-HTTP(S) protocols such as the native svn protocol, only on an Apache server
shipping SVN 1.7. Trying to `git svn dcommit` under the aforementioned
conditions yields the following error which aborts the commit process:

Committing to http://example.com/svn ...
perl: subversion/libsvn_subr/dirent_uri.c:1520: uri_skip_ancestor:
Assertion `svn_uri_is_canonical(child_uri, ((void *)0))' failed.
error: git-svn died of signal 6

An analysis of the subversion source for the cause:

- The assertion originates from uri_skip_ancestor which calls
  svn_uri_is_canonical, which fails when the URL contains percent-encoded values
  that do not necessarily have to be encoded (not canonical enough). This is
  done by a table lookup in libsvn_subr/path.c. Putting some debugging prints
  revealed that the character ' is indeed encoded to %27 which is not
  considered canonical.
- url_skip_ancestor is called by svn_ra_neon__get_baseline_info with the root
  repository URL and path as parameters;
- which is called by copy_resource (libsvn_ra_neon/commit.c) for a copy action
  (or in my case, renaming which is actually copy + delete old);
- which is called by commit_add_dir;
- which is assigned as a structure method add_file in
  svn_ra_neon__get_commit_editor.

In the whole path, the path argument is not modified.

Through some more uninteresting wrapper functions, the Perl bindings gives you
access to the add_file method which will pass the path argument without
modifications to svn.

git-svn calls the R(ename) subroutine in Git::SVN::Editor which contains:
326 my $fbat = $self-add_file($self-repo_path($m-{file_b}), $pbat,
327 $self-url_path($m-{file_a}), $self-{r});
repo_path basically returns the path as-is, unless the svn.pathnameencoding
configuration property is set. url_path tries to escape some special
characters, but does not take all special characters into account, thereby
causing the path to contain some escaped characters which do not have to be
escaped.

The list of characters not to be escaped are taken from the
subversion/libsvn_subr/path.c file to fully account for all characters. Tested
with a filename containing all characters in the range 0x20 to 0x78 (inclusive).

Signed-off-by: Peter Wu lekenst...@gmail.com
---
 perl/Git/SVN/Editor.pm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/perl/Git/SVN/Editor.pm b/perl/Git/SVN/Editor.pm
index 3bbc20a..30f92cb 100644
--- a/perl/Git/SVN/Editor.pm
+++ b/perl/Git/SVN/Editor.pm
@@ -145,7 +145,8 @@ sub repo_path {
 sub url_path {
my ($self, $path) = @_;
if ($self-{url} =~ m#^https?://#) {
-   $path =~ s!([^~a-zA-Z0-9_./-])!uc sprintf(%%%02x,ord($1))!eg;
+   # characters are taken from subversion/libsvn_subr/path.c
+   $path =~ s#([^~a-zA-Z0-9_./!$'()*+,-])#uc 
sprintf(%%%02x,ord($1))#eg;
}
$self-{url} . '/' . $self-repo_path($path);
 }
-- 
1.8.1.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: Question re. git remote repository

2013-01-17 Thread Lang, David
Hi David,

Ok, now I'm really lost! This is definitely due to my newbie git status but 
I'll ask anyway. I'm confused by your statement ... if you try to have one 
filesystem, with multiple people running git on their machines against that 
shared filesystem, I would expect you to have all sorts of problems.

Isn't that the whole point of git, or any versioning system? I thought the idea 
was that each developer installed git locally on their machines and (as needed) 
committed their changes to the master repository which resides externally to 
any of the local machines, such as on a network server (and which I'm assuming 
has git installed locally as well).

What am I missing?

The 'other' David Lang   ;-)

-Original Message-
From: David Lang [mailto:da...@lang.hm] 
Sent: Wednesday, January 16, 2013 6:01 PM
To: Stephen Smith
Cc: Konstantin Khomoutov; Jeff King; git@vger.kernel.org; Lang, David
Subject: Re: Question re. git remote repository

On Wed, 16 Jan 2013, Stephen Smith wrote:

 Ideally we'd prefer to simply create our remote repository on a 
 drive of one of our local network servers. Is this possible?

 Yes, this is possible, but it's not advised to keep such a 
 reference repository on an exported networked drive for a number 
 of reasons (both performance and bug-free operation).

 I agree that performance is not ideal (although if you are on a fast 
 LAN, it probably would not matter much), but I do not recall any 
 specific bugs in that area. Can you elaborate?

 This one [1] for instance.  I also recall seing people having other 
 mystical problems with setups like this so I somehow developed an 
 idea than having a repository on a networked drive is asking for troubles.
 Of course, if there are happy users of such setups, I would be glad 
 to hear as my precautions might well be unfounded for the recent 
 versions of Git.

 1. http://code.google.com/p/msysgit/issues/detail?id=130

 A group I was with used a master repository on a windows share for quite some 
 time without a database corruption being seen.   --

I think the risk is that if you have multiple people doing actions on the 
shared filesystem you can run into trouble.

As long as only one copy of git is ever running against the repository, I don't 
see any reason for there to be a problem.

But if you try to have one filesystem, with multiple people running git on 
their machines against that shared filesystem, I would expect you to have all 
sorts of problems.

David Lang

This e-mail may contain confidential and/or privileged information for the sole 
use of the intended recipient. 
Any review or distribution by anyone other than the person for whom it was 
originally intended is strictly prohibited. 
If you have received this e-mail in error, please contact the sender and delete 
all copies. 
Opinions, conclusions or other information contained in this e-mail may not be 
that of the organization.

--
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] simplify-merges: drop merge from irrelevant side branch

2013-01-17 Thread Junio C Hamano
The merge simplification rule stated in 6546b59 (revision traversal:
show full history with merge simplification, 2008-07-31) still
treated merge commits too specially.  Namely, in a history with this
shape:

---o---o---M
  /
 x---x---x

where three 'x' were on a history completely unrelated to the main
history 'o' and do not touch any of the paths we are following, we
still said that after simplifying all of the parents of M, 'x'
(which is the leftmost 'x' that rightmost 'x simplifies down to) and
'o' (which would be the last commit on the main history that touches
the paths we are following) are independent from each other, and
both need to be kept.

That is incorrect; when the side branch 'x' never touches the paths,
it should be removed to allow M to simplify down to the last commit
on the main history that touches the paths.

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

 * The old test vector had a history ending at I; the updates to it
   adds an unrelated side branch rooted at J, merge of I and J which
   is K, and then an extra commit L on top.

A---(some merge mess)---I---K---L
   /
  J

 revision.c   | 19 +++
 t/t6012-rev-list-simplify.sh | 26 +-
 2 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/revision.c b/revision.c
index 33cb207..532611b 100644
--- a/revision.c
+++ b/revision.c
@@ -1424,6 +1424,22 @@ static struct merge_simplify_state 
*locate_simplify_state(struct rev_info *revs,
return st;
 }
 
+static void remove_treesame_parents(struct commit *commit)
+{
+   struct commit_list **pp, *p;
+
+   pp = commit-parents;
+   while ((p = *pp) != NULL) {
+   struct commit *parent = p-item;
+   if (parent-object.flags  TREESAME) {
+   *pp = p-next;
+   free(p);
+   continue;
+   }
+   pp = p-next;
+   }
+}
+
 static struct commit_list **simplify_one(struct rev_info *revs, struct commit 
*commit, struct commit_list **tail)
 {
struct commit_list *p;
@@ -1469,6 +1485,9 @@ static struct commit_list **simplify_one(struct rev_info 
*revs, struct commit *c
pst = locate_simplify_state(revs, p-item);
p-item = pst-simplified;
}
+
+   remove_treesame_parents(commit);
+
cnt = remove_duplicate_parents(commit);
 
/*
diff --git a/t/t6012-rev-list-simplify.sh b/t/t6012-rev-list-simplify.sh
index 510bb96..d6d79c4 100755
--- a/t/t6012-rev-list-simplify.sh
+++ b/t/t6012-rev-list-simplify.sh
@@ -59,7 +59,23 @@ test_expect_success setup '
 
echo Final change file 
test_tick  git commit -a -m Final change 
-   note I
+   note I 
+
+   git symbolic-ref HEAD refs/heads/unrelated 
+   git rm -f * 
+   echo Unrelated branch side 
+   git add side 
+   test_tick  git commit -m Side root 
+   note J 
+
+   git checkout master 
+   test_tick  git merge -m Coolest unrelated 
+   note K 
+
+   echo Immaterial elif 
+   git add elif 
+   test_tick  git commit -m Last 
+   note L
 '
 
 FMT='tformat:%P%H | %s'
@@ -82,10 +98,10 @@ check_result () {
'
 }
 
-check_result 'I H G F E D C B A' --full-history
-check_result 'I H E C B A' --full-history -- file
-check_result 'I H E C B A' --full-history --topo-order -- file
-check_result 'I H E C B A' --full-history --date-order -- file
+check_result 'L K J I H G F E D C B A' --full-history
+check_result 'K I H E C B A' --full-history -- file
+check_result 'K I H E C B A' --full-history --topo-order -- file
+check_result 'K I H E C B A' --full-history --date-order -- file
 check_result 'I E C B A' --simplify-merges -- file
 check_result 'I B A' -- file
 check_result 'I B A' --topo-order -- file
-- 
1.8.1.1.431.g469ab37

--
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 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 You're right - I think we need to add , errors='replace' to the call
 to encode.

Of if it is used just as a opaque token, you can .encode('hex') or
something to punt on the whole issue, no?


   git-remote-testpy.py | 8 
   1 file changed, 4 insertions(+), 4 deletions(-)
 
  diff --git a/git-remote-testpy.py b/git-remote-testpy.py
  index d94a66a..f8dc196 100644
  --- a/git-remote-testpy.py
  +++ b/git-remote-testpy.py
  @@ -31,9 +31,9 @@ from git_remote_helpers.git.exporter import GitExporter
   from git_remote_helpers.git.importer import GitImporter
   from git_remote_helpers.git.non_local import NonLocalGit
   
  -if sys.hexversion  0x01050200:
  -# os.makedirs() is the limiter
  -sys.stderr.write(git-remote-testgit: requires Python 1.5.2 or 
  later.\n)
  +if sys.hexversion  0x0200:
  +# string.encode() is the limiter
  +sys.stderr.write(git-remote-testgit: requires Python 2.0 or 
  later.\n)
   sys.exit(1)
   
   def get_repo(alias, url):
  @@ -45,7 +45,7 @@ def get_repo(alias, url):
   repo.get_head()
   
   hasher = _digest()
  -hasher.update(repo.path)
  +hasher.update(repo.path.encode('utf-8'))
   repo.hash = hasher.hexdigest()
   
   repo.get_base_path = lambda base: os.path.join(
--
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 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread John Keeping
On Thu, Jan 17, 2013 at 02:24:37PM -0800, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
 You're right - I think we need to add , errors='replace' to the call
 to encode.
 
 Of if it is used just as a opaque token, you can .encode('hex') or
 something to punt on the whole issue, no?

Even better.  Are you happy to squash that in (assuming nothing else
comes up) or shall I resend?

  git-remote-testpy.py | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

 diff --git a/git-remote-testpy.py b/git-remote-testpy.py
 index d94a66a..f8dc196 100644
 --- a/git-remote-testpy.py
 +++ b/git-remote-testpy.py
 @@ -31,9 +31,9 @@ from git_remote_helpers.git.exporter import GitExporter
  from git_remote_helpers.git.importer import GitImporter
  from git_remote_helpers.git.non_local import NonLocalGit
  
 -if sys.hexversion  0x01050200:
 -# os.makedirs() is the limiter
 -sys.stderr.write(git-remote-testgit: requires Python 1.5.2 or 
 later.\n)
 +if sys.hexversion  0x0200:
 +# string.encode() is the limiter
 +sys.stderr.write(git-remote-testgit: requires Python 2.0 or 
 later.\n)
  sys.exit(1)
  
  def get_repo(alias, url):
 @@ -45,7 +45,7 @@ def get_repo(alias, url):
  repo.get_head()
  
  hasher = _digest()
 -hasher.update(repo.path)
 +hasher.update(repo.path.encode('utf-8'))
  repo.hash = hasher.hexdigest()
  
  repo.get_base_path = lambda base: os.path.join(
--
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 6/8] git-remote-testpy: hash bytes explicitly

2013-01-17 Thread Junio C Hamano
John Keeping j...@keeping.me.uk writes:

 On Thu, Jan 17, 2013 at 02:24:37PM -0800, Junio C Hamano wrote:
 John Keeping j...@keeping.me.uk writes:
 
 You're right - I think we need to add , errors='replace' to the call
 to encode.
 
 Of if it is used just as a opaque token, you can .encode('hex') or
 something to punt on the whole issue, no?

 Even better.  Are you happy to squash that in (assuming nothing else
 comes up) or shall I resend?

If you go the .encode('hex') route, the log message needs to explain
why the hashed values are now different from the old implementation
and justify why it is safe to do so.  I do not think I want to do
that myself ;-).

Thanks.



  git-remote-testpy.py | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

 diff --git a/git-remote-testpy.py b/git-remote-testpy.py
 index d94a66a..f8dc196 100644
 --- a/git-remote-testpy.py
 +++ b/git-remote-testpy.py
 @@ -31,9 +31,9 @@ from git_remote_helpers.git.exporter import GitExporter
  from git_remote_helpers.git.importer import GitImporter
  from git_remote_helpers.git.non_local import NonLocalGit
  
 -if sys.hexversion  0x01050200:
 -# os.makedirs() is the limiter
 -sys.stderr.write(git-remote-testgit: requires Python 1.5.2 or 
 later.\n)
 +if sys.hexversion  0x0200:
 +# string.encode() is the limiter
 +sys.stderr.write(git-remote-testgit: requires Python 2.0 or 
 later.\n)
  sys.exit(1)
  
  def get_repo(alias, url):
 @@ -45,7 +45,7 @@ def get_repo(alias, url):
  repo.get_head()
  
  hasher = _digest()
 -hasher.update(repo.path)
 +hasher.update(repo.path.encode('utf-8'))
  repo.hash = hasher.hexdigest()
  
  repo.get_base_path = lambda base: os.path.join(
--
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 pull - reporting that I modified files, but I did not

2013-01-17 Thread Max Horn

On 17.01.2013, at 20:29, Jay Vee wrote:

 When I do a git pull, I am getting a messages that changes to local
 files would be overwritten by a merge, but  I have not changed these
 files locally at all, I have not opened them in my IDE.
 This happens every now and then.
 
 1) Why does this happen?

This is hard to tell given the little information you provide. But clearly 
*something* modified those files, whether consciously triggered by you or not. 
But files don't magically change themselves :-). I recommend that you run git 
diff on those files to figure out in what way they changed -- this will likely 
provide a clue to the cause for this.

All I can say is that it is extremely unlikely that git did this, unless it 
happens to be something you (or somebody who has access to your git config 
resp. the repository config) explicitly activated and thus requested from git 
(e.g. via clean or smudge filters in gitattributes).



 2) How do I prevent this from happening in the future?

As this largely depends on the cause, it can't be answered before 1) is 
answered...

 
 3) How do I get out of this state so that I can do a git pull and
 rebuild my code?

At least over here, when I do a git status, it actually prints a nice message 
that explains how to do this. For example, I see something like this:

# On branch next
# Changes to be committed:
#   (use git reset HEAD file... to unstage)
#
#   modified:   src/MyClass.java
#   deleted:src/AnotherClass.java
#
# 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:   src/MyModifiedClass.java
#   deleted:src/YetAnotherClass.java
...


But I would strongly urge you to first review those changes, to make sure that 
they are really OK to discard. For example, you wouldn't want to throw away a 
change you did make on purpose but forgot to commit.


 
 ---
 In other instances, when I do a git pull (not getting the message
 above,  I will see something like:
 M  src/MyClass.java  = a file that I did not touch or modify
 D   src/AnotherClass.java   = a file that I did not delete or touch
 M src/MyModifiedClass.java   = a file that I indeed modified for
 which in the pull there are no merge conflicts.

Hmm, where is this output from?

 
 and the pull is successful, (then I want to push my changes), but I
 did not change either of the above two files

Did you try to find out what the change in them is? E.g. using git diff ? My 
guess would be that the nature of the changes would give a big clue as to their 
cause. E.g. did indention change? Line breaks? Where RCS keywords expanded / 
contracted? Was a random piece of code inserted somewhere?


 
 If I see the above, am I OK to push?  My thinking is that git thinks I
 changed 'src/MyClass.java' and if I do a diff there are differences,
 but I do not want to push because I NEVER TOUCHED THAT FILE IN ANY
 WAY.

Shouting doesn't help :-). Something on your computer *did* touch the file. Git 
does not magically change your stuff -- unless in very special cases, but then 
only when *explicitly* configured to do so by somebody.

 
 What is going on here?  Maybe this is normal and I simply do not
 understand correctly.

It doesn't sound normal, but it doesn't sound like an issue with git either, 
more like one with your particular setup. It is hard to say more since you give 
us very little concrete information. E.g. what kind of changes are in those 
files? Which git version, and what OS are you on? Do you use git via the 
command line exclusively, or do you use a frontend(s) for it? etc.


 
 What is happening?  I would expect to see only line items 'M' and 'D'
 for files that I personally have modified and deleted.

What do you mean by personally? Is a cron job you setup and forgot counting 
towards this, too? What about automatic changes caused by an IDE or a Git 
frontend? What about automatic changes caused by a git config setting you or a 
friendly co-worker setup in your gitconfig but you forgot about? 


 If I push at this point, will I overwrite changes in the repo pushed
 by others and muck things up?

A push will only push any commits you made. And a commit will only include 
changes you explicitly staged via git add, or told git commit to include by 
listing files when doing the commit... So if you worry that what you are about 
to push is broken, I'd recommend to a) review all local commits and their 
contents before pushing them, and b) testing your work before pushing it.


Cheers,
Max--
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: Question re. git remote repository

2013-01-17 Thread David Lang
distributed version control systems let each developer have a full repository 
locally on their machine, they then can send updates to other people who have a 
repository (or a pull request which asks the other person to pull from the 
developers repository to the other persons repository)


Most projects have one repository that they designate as being the 'main' 
repository for the project, and developers push updates to it (or send pull 
requests to the people who own that repository)


The communication between developers is typically via e-mail and the repository 
updates are sent via the git-daemon and the git network protocol.




This sort of thing is very different from the model where there is one 
repository on a shared disk somewhere and everyone accesses that shared disk to 
do their work or apply updates via NFS/CIFS protocols.


Does this clarify the difference?

David Lang

On Thu, 17 Jan 2013, Lang, David wrote:


Hi David,

Ok, now I'm really lost! This is definitely due to my newbie git status but 
I'll ask anyway. I'm confused by your statement ... if you try to have one 
filesystem, with multiple people running git on their machines against that 
shared filesystem, I would expect you to have all sorts of problems.


Isn't that the whole point of git, or any versioning system? I thought the 
idea was that each developer installed git locally on their machines and (as 
needed) committed their changes to the master repository which resides 
externally to any of the local machines, such as on a network server (and 
which I'm assuming has git installed locally as well).


What am I missing?

The 'other' David Lang   ;-)

-Original Message-
From: David Lang [mailto:da...@lang.hm]
Sent: Wednesday, January 16, 2013 6:01 PM
To: Stephen Smith
Cc: Konstantin Khomoutov; Jeff King; git@vger.kernel.org; Lang, David
Subject: Re: Question re. git remote repository

On Wed, 16 Jan 2013, Stephen Smith wrote:


Ideally we'd prefer to simply create our remote repository on a
drive of one of our local network servers. Is this possible?


Yes, this is possible, but it's not advised to keep such a
reference repository on an exported networked drive for a number
of reasons (both performance and bug-free operation).


I agree that performance is not ideal (although if you are on a fast
LAN, it probably would not matter much), but I do not recall any
specific bugs in that area. Can you elaborate?


This one [1] for instance.  I also recall seing people having other
mystical problems with setups like this so I somehow developed an
idea than having a repository on a networked drive is asking for troubles.
Of course, if there are happy users of such setups, I would be glad
to hear as my precautions might well be unfounded for the recent
versions of Git.

1. http://code.google.com/p/msysgit/issues/detail?id=130


A group I was with used a master repository on a windows share for quite some 
time without a database corruption being seen.   --


I think the risk is that if you have multiple people doing actions on the 
shared filesystem you can run into trouble.

As long as only one copy of git is ever running against the repository, I don't 
see any reason for there to be a problem.

But if you try to have one filesystem, with multiple people running git on 
their machines against that shared filesystem, I would expect you to have all 
sorts of problems.

David Lang

This e-mail may contain confidential and/or privileged information for the sole 
use of the intended recipient.
Any review or distribution by anyone other than the person for whom it was 
originally intended is strictly prohibited.
If you have received this e-mail in error, please contact the sender and delete 
all copies.
Opinions, conclusions or other information contained in this e-mail may not be 
that of the organization.



--
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: Question re. git remote repository

2013-01-17 Thread Jeff King
On Wed, Jan 16, 2013 at 03:00:41PM -0800, David Lang wrote:

 This one [1] for instance.  I also recall seing people having other
 mystical problems with setups like this so I somehow developed an idea
 than having a repository on a networked drive is asking for troubles.
 Of course, if there are happy users of such setups, I would be glad to
 hear as my precautions might well be unfounded for the recent versions
 of Git.
 
 1. http://code.google.com/p/msysgit/issues/detail?id=130
 
 A group I was with used a master repository on a windows share for quite 
 some time without a database corruption being seen.   --
 
 I think the risk is that if you have multiple people doing actions on
 the shared filesystem you can run into trouble.
 
 As long as only one copy of git is ever running against the
 repository, I don't see any reason for there to be a problem.

That should not be an issue. Git on a server has to deal with multiple
independent receive-pack's running to accept several simultaneous
pushes. They coordinate through the use of file locks. Having multiple
machines pushing over a shared filesystem should work the same, as long
as the filesystem support atomic creation of files with O_EXCL.

There may be other subtle issues lurking (e.g., the Windows issue that
Konstantin mentioned), but as far as I know, it _should_ work in
general.

-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: t9902 fails (Was: [PATCH] attr: fix off-by-one directory component length calculation)

2013-01-17 Thread Jonathan Nieder
Jean-Noël AVILA wrote:

 OK. I have installed practically everything related to git from the package 
 manager and there is a git-checkout-branches utility available.

 That result defeats the purpose of the test. This needs a tighter environment 
 to work whatever the configuration of the user may be.

Presumably 'git checkout-branches' is from git-stuff.

Here's a patch to make the tested command a little less likely to
conflict with commands from the user's $PATH.  I'm not thrilled with
it because the contents of $PATH are still not tightly controlled, and
this does nothing to avoid problems due to existence of, for example,
a git cherry-pick-branches command.

Thoughts?  Maybe it would be enough to check that the intended get
commands are present in the completion list and other git commands are
not, ignoring binaries that might live elsewhere on the $PATH?

Signed-off-by: Jonathan Nieder jrnie...@gmail.com
---
 t/t9902-completion.sh | 26 +-
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 3cd53f8..06dcfb2 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -192,19 +192,19 @@ test_expect_success 'general options' '
 '
 
 test_expect_success 'general options plus command' '
-   test_completion git --version check checkout  
-   test_completion git --paginate check checkout  
-   test_completion git --git-dir=foo check checkout  
-   test_completion git --bare check checkout  
-   test_completion git --help des describe  
-   test_completion git --exec-path=foo check checkout  
-   test_completion git --html-path check checkout  
-   test_completion git --no-pager check checkout  
-   test_completion git --work-tree=foo check checkout  
-   test_completion git --namespace=foo check checkout  
-   test_completion git --paginate check checkout  
-   test_completion git --info-path check checkout  
-   test_completion git --no-replace-objects check checkout 
+   test_completion git --version cherry-p cherry-pick  
+   test_completion git --paginate cherry-p cherry-pick  
+   test_completion git --git-dir=foo cherry-p cherry-pick  
+   test_completion git --bare cherry-p cherry-pick  
+   test_completion git --help cherry-p cherry-pick  
+   test_completion git --exec-path=foo cherry-p cherry-pick  
+   test_completion git --html-path cherry-p cherry-pick  
+   test_completion git --no-pager cherry-p cherry-pick  
+   test_completion git --work-tree=foo cherry-p cherry-pick  
+   test_completion git --namespace=foo cherry-p cherry-pick  
+   test_completion git --paginate cherry-p cherry-pick  
+   test_completion git --info-path cherry-p cherry-pick  
+   test_completion git --no-replace-objects cherry-p cherry-pick 
 '
 
 test_expect_success 'setup for ref completion' '
-- 
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: t9902 fails

2013-01-17 Thread Junio C Hamano
Jonathan Nieder jrnie...@gmail.com writes:

 Thoughts?  Maybe it would be enough to check that the intended get
 commands are present in the completion list and other git commands are
 not, ignoring binaries that might live elsewhere on the $PATH?

Yeah, it would be a robust alternative approach to verify that (1)
output is a superset of what we expect, and (2) they all share the
string we fed to the machinery as the common prefix, I would think.

--
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


What's cooking in git.git (Jan 2013, #07; Thu, 17)

2013-01-17 Thread Junio C Hamano
Here are the topics that have been cooking.  Commits prefixed with
'-' are only in 'pu' (proposed updates) while commits prefixed with
'+' are in 'next'.

As usual, this cycle is expected to last for 8 to 10 weeks, with a
preview -rc0 sometime in the middle of next month.

You can find the changes described here in the integration branches of the
repositories listed at

http://git-blame.blogspot.com/p/git-public-repositories.html

--
[New Topics]

* fc/remote-hg-fixup-url (2013-01-15) 1 commit
  (merged to 'next' on 2013-01-15 at d2acb2d)
 + remote-hg: store converted URL

 Update to the Hg remote helper (in contrib/).

 Will merge to 'master'.


* mh/remote-hg-mode-bits-fix (2013-01-15) 1 commit
  (merged to 'next' on 2013-01-15 at ad57d9f)
 + remote-hg: fix handling of file perms when pushing

 Update to the Hg remote helper (in contrib/).

 Will merge to 'master'.


* jc/valgrind-memcmp-bsearch (2013-01-14) 1 commit
 - ignore memcmp() overreading in bsearch() callback

 Squelch false positive in valgrind tests

 Will discard.


* mh/imap-send-shrinkage (2013-01-15) 14 commits
 - imap-send.c: simplify logic in lf_to_crlf()
 - imap-send.c: fold struct store into struct imap_store
 - imap-send.c: remove unused field imap_store::uidvalidity
 - imap-send.c: use struct imap_store instead of struct store
 - imap-send.c: remove unused field imap_store::trashnc
 - imap-send.c: remove namespace fields from struct imap
 - imap-send.c: remove struct imap argument to parse_imap_list_l()
 - imap-send.c: inline parse_imap_list() in parse_list()
 - imap-send.c: remove some unused fields from struct store
 - imap-send.c: remove struct message
 - imap-send.c: remove struct store_conf
 - iamp-send.c: remove unused struct imap_store_conf
 - imap-send.c: remove struct msg_data
 - imap-send.c: remove msg_data::flags, which was always zero

 Remove a lot of unused code from git imap-send.

 With a further comment fixup in patch #6, this seems ready for
 'next'.
 Expecting a reroll.


* nd/attr-debug-fix (2013-01-15) 1 commit
  (merged to 'next' on 2013-01-15 at 8460acf)
 + attr: make it build with DEBUG_ATTR again

 Fix debugging support that was broken in earlier change.

 Will merge to 'master'.


* nd/fix-directory-attrs-off-by-one (2013-01-16) 2 commits
  (merged to 'next' on 2013-01-16 at bd63e61)
 + attr: avoid calling find_basename() twice per path
  (merged to 'next' on 2013-01-15 at e0a0129)
 + attr: fix off-by-one directory component length calculation

 Fix performance regression introduced by an earlier change to let
 attributes apply to directories.

 Will merge to 'master'.


* nd/fix-perf-parameters-in-tests (2013-01-15) 1 commit
  (merged to 'next' on 2013-01-15 at fedbdb9)
 + test-lib.sh: unfilter GIT_PERF_*

 Allow GIT_PERF_* environment variables to be passed through the
 test framework.

 Will merge to 'master'.


* pw/p4-branch-fixes (2013-01-15) 14 commits
  (merged to 'next' on 2013-01-15 at 1ee379e)
 + git p4: fix submit when no master branch
 + git p4 test: keep P4CLIENT changes inside subshells
 + git p4: fix sync --branch when no master branch
 + git p4: fail gracefully on sync with no master branch
 + git p4: rearrange self.initialParent use
 + git p4: allow short ref names to --branch
 + git p4 doc: fix branch detection example
 + git p4: clone --branch should checkout master
 + git p4: verify expected refs in clone --bare test
 + git p4: create p4/HEAD on initial clone
 + git p4: inline listExistingP4GitBranches
 + git p4: add comments to p4BranchesInGit
 + git p4: rearrange and simplify hasOrigin handling
 + git p4: test sync/clone --branch behavior

 Fix git p4 around branch handling.

 Will merge to 'master'.


* ss/help-htmlpath-config-doc (2013-01-15) 1 commit
  (merged to 'next' on 2013-01-17 at 99bfae2)
 + config.txt: Document help.htmlpath config parameter

 Add missing doc.

 Will merge to 'master'.


* cr/push-force-tag-update (2013-01-16) 1 commit
 - push: fix refs/tags/ hierarchy cannot be updated without --force

 Regression fix.

 Will merge to 'next' and then to 'master' soonish.


* jk/suppress-clang-warning (2013-01-16) 1 commit
 - fix clang -Wunused-value warnings for error functions

 Will merge to 'next'.


* rs/clarify-entry-cmp-sslice (2013-01-16) 1 commit
 - refs: use strncmp() instead of strlen() and memcmp()

 Will merge to 'next'.


* ch/add-auto-submitted-in-sample-post-receive-email (2013-01-17) 1 commit
 - Add Auto-Submitted header to post-receive-email

 Will merge to 'next'.


* jc/remove-treesame-parent-in-simplify-merges (2013-01-17) 1 commit
 - simplify-merges: drop merge from irrelevant side branch

 The --simplify-merges logic did not cull irrelevant parents from a
 merge that is otherwise not interesting with respect to the paths
 we are following.

 As this touches a fairly core part of the revision traversal
 infrastructure, it is appreciated to have an extra set of eyes for
 sanity check.

 Waiting for 

Re: [PATCH] git-svn: teach find-rev to find near matches

2013-01-17 Thread Eric Wong
John Keeping j...@keeping.me.uk wrote:
 When a single SVN repository is split into multiple Git repositories
 many SVN revisions will exist in only one of the Git repositories
 created.  For some projects the only way to build a working artifact is
 to check out corresponding versions of various repositories, with no
 indication of what those are in the Git world - in the SVN world the
 revision numbers are sufficient.
 
 By adding --before to git-svn find-rev we can say tell me what this
 repository looked like when that other repository looked like this:
 
 git svn find-rev --before \
 r$(git --git-dir=/over/there.git svn find-rev HEAD)
 
 Signed-off-by: John Keeping j...@keeping.me.uk

Thanks.
Signed-off-by: Eric Wong normalper...@yhbt.net

I've pushed this out to git://bogomips.org/git-svn along with a few
other things I seem to have forgotten about :x

John Keeping (1):
  git-svn: teach find-rev to find near matches

Jonathan Nieder (2):
  Git::SVN::Editor::T: pass $deletions to -A and -D
  git svn: do not overescape URLs (fallback 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: [PATCH v6 0/8] push: update remote tags only with force

2013-01-17 Thread Jeff King
On Thu, Jan 17, 2013 at 07:09:16AM -0600, Chris Rorvick wrote:

 I was referring to your concern about rejecting based on type.  A push
 causing a reference to move (for example) from a commit to a blob is
 rejected as already exists with this patch.  You emphatically state
 this is not OK and your solution is to revert back to behavior that
 advises a merge.
 
 Clearly the bug regarding an 'old' unknown to the client should be
 fixed.  This is a obvious test case I should have covered and it's
 unfortunate it made it into master.  But I don't understand why
 is_forwardable() was misguided (maybe poorly named) nor why
 ref_newer() is a better place to solve the issues it was addressing.

I think that a type-based rule that relies on knowing the type of the
other side will always have to guess in some cases, because we do not
necessarily have that information. 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. 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).

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

2013-01-17 Thread Chris Rorvick
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.

 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.)

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


Re: [PATCH v2 8/8] git-remote-testpy: call print as a function

2013-01-17 Thread Sverre Rabbelier
Looks harmless enough.

Acked-by: Sverre Rabbelier srabbel...@gmail.com

On Thu, Jan 17, 2013 at 10:54 AM, John Keeping j...@keeping.me.uk wrote:
 This is harmless in Python 2, which sees the parentheses as redundant
 grouping, but is required for Python 3.  Since this is the only change
 required to make this script just run under Python 3 without needing
 2to3 it seems worthwhile.

 The case of an empty print must be handled specially because in that
 case Python 2 will interpret '()' as an empty tuple and print it as
 '()'; inserting an empty string fixes this.

 Signed-off-by: John Keeping j...@keeping.me.uk
 ---
  git-remote-testpy.py | 28 ++--
  1 file changed, 14 insertions(+), 14 deletions(-)

 diff --git a/git-remote-testpy.py b/git-remote-testpy.py
 index bc5e3cf..ccdb2dc 100644
 --- a/git-remote-testpy.py
 +++ b/git-remote-testpy.py
 @@ -87,9 +87,9 @@ def do_capabilities(repo, args):
  Prints the supported capabilities.
  

 -print import
 -print export
 -print refspec refs/heads/*:%s* % repo.prefix
 +print(import)
 +print(export)
 +print(refspec refs/heads/*:%s* % repo.prefix)

  dirname = repo.get_base_path(repo.gitdir)

 @@ -98,11 +98,11 @@ def do_capabilities(repo, args):

  path = os.path.join(dirname, 'git.marks')

 -print *export-marks %s % path
 +print(*export-marks %s % path)
  if os.path.exists(path):
 -print *import-marks %s % path
 +print(*import-marks %s % path)

 -print # end capabilities
 +print('') # end capabilities


  def do_list(repo, args):
 @@ -115,16 +115,16 @@ def do_list(repo, args):

  for ref in repo.revs:
  debug(? refs/heads/%s, ref)
 -print ? refs/heads/%s % ref
 +print(? refs/heads/%s % ref)

  if repo.head:
  debug(@refs/heads/%s HEAD % repo.head)
 -print @refs/heads/%s HEAD % repo.head
 +print(@refs/heads/%s HEAD % repo.head)
  else:
  debug(@refs/heads/master HEAD)
 -print @refs/heads/master HEAD
 +print(@refs/heads/master HEAD)

 -print # end list
 +print('') # end list


  def update_local_repo(repo):
 @@ -164,7 +164,7 @@ def do_import(repo, args):
  ref = line[7:].strip()
  refs.append(ref)

 -print feature done
 +print(feature done)

  if os.environ.get(GIT_REMOTE_TESTGIT_FAILURE):
  die('Told to fail')
 @@ -172,7 +172,7 @@ def do_import(repo, args):
  repo = update_local_repo(repo)
  repo.exporter.export_repo(repo.gitdir, refs)

 -print done
 +print(done)


  def do_export(repo, args):
 @@ -192,8 +192,8 @@ def do_export(repo, args):
  repo.non_local.push(repo.gitdir)

  for ref in changed:
 -print ok %s % ref
 -print
 +print(ok %s % ref)
 +print('')


  COMMANDS = {
 --
 1.8.1.1.260.g99b33f4.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



-- 
Cheers,

Sverre Rabbelier
--
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 7/8] git-remote-testpy: don't do unbuffered text I/O

2013-01-17 Thread Sverre Rabbelier
On Thu, Jan 17, 2013 at 10:54 AM, John Keeping j...@keeping.me.uk wrote:
 -sys.stdin = os.fdopen(sys.stdin.fileno(), 'r', 0)
 +sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0)

It is not immediately obvious why you would open stdin in rb mode,
please add a comment.

--
Cheers,

Sverre Rabbelier
--
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


bug: git-svn seg fault during 'git svn fetch' due to perl 5.10

2013-01-17 Thread Durham Goode
In git 1.8.1, when we do 'git svn fetch' on a large repo, we're seeing a
seg fault.  It's caused by git-svn trying to parse a large yaml file
(introduced in 
https://github.com/git/git/commit/68f532f4ba888f277637a94b4a49136054df0540
) which encounters a perl regex stack overflow bug that was present in
perl  5.10 (https://bugzilla.redhat.com/show_bug.cgi?id=192400).

We'll find a work around, but it'd be nice if there was a config setting
to let us choose not to use the yaml format.

Let me know if there's a better place to report this.

-Durham

--
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-17 Thread Junio C Hamano
Jeff King p...@peff.net writes:

 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.  And that
 is logically an extension of the fast-forward rule,...

It may be an extension of the fast-forward, but only in the graph
reachability sense.  I can buy that it is mathmatically consistent
with the mode that has proven to be useful for commits at the branch
tips, which we know why fast-forward rule is an appropriate
default for.  You haven't shown if that mathmatical consistency is
useful for non-commit case.


The primary reason fast-forward is a good default for branches is
not that we do not want to lose objects to gc (you have reflog for
that).  The reason is non fast-forward is a sign of unintended
rewind, and later will cause duplicated history with merge
conflicts.

That comes from the way objects pointed by refs/heads aka branches
are used.  It is not just commit (as object type), but how these
objects are used.  Think why we decided it was a good idea to do one
thing in the topic that introduced the regression under discussion:
Even if the new commit is a descendant of the old commit, we do not
want to fast-forward a ref if it is under refs/tags/.  Type of object
may be one factor, but how it is used is more important factor in
deciding what kind of policy is appropriate.

If users have workflows that want to have a ref hierarchy that point
at a blob, there will not be any update to such a ref that will
satisfy your definition of extended fast-forward requirement, and
that requirement came solely from mathematical purity (i.e. graph
reachability), not from any workflow consideration.  That is very
disturbing to me.

A workflow that employes such a blob at a ref may perfectly be
happy with replacing the blob as last-one-wins basis. I do not think
the client side should enforce a policy to forbid such a push.

I personally think the current client side that insists that updates
to any ref has to have the current object and must fast-forward and
requires --force otherwise was a mistake (this predates the change
by Chris).  The receiving end does not implement such an arbitrary
restriction outside refs/heads/, and does so only for refs/heads/
only when deny-non-fast-forwards is set.
--
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 4/8] git_remote_helpers: use 2to3 if building with Python 3

2013-01-17 Thread Sverre Rabbelier
On Thu, Jan 17, 2013 at 10:53 AM, John Keeping j...@keeping.me.uk wrote:
 [1] http://wiki.python.org/moin/PortingPythonToPy3k

This link seems dead.

--
Cheers,

Sverre Rabbelier
--
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: t9902 fails (Was: [PATCH] attr: fix off-by-one directory component length calculation)

2013-01-17 Thread Torsten Bögershausen
On 18.01.13 01:04, Jonathan Nieder wrote:
 Jean-Noël AVILA wrote:

 OK. I have installed practically everything related to git from the package 
 manager and there is a git-checkout-branches utility available.

 That result defeats the purpose of the test. This needs a tighter 
 environment 
 to work whatever the configuration of the user may be.
 Presumably 'git checkout-branches' is from git-stuff.

 Here's a patch to make the tested command a little less likely to
 conflict with commands from the user's $PATH.  I'm not thrilled with
 it because the contents of $PATH are still not tightly controlled, and
 this does nothing to avoid problems due to existence of, for example,
 a git cherry-pick-branches command.

 Thoughts?  Maybe it would be enough to check that the intended get
 commands are present in the completion list and other git commands are
 not, ignoring binaries that might live elsewhere on the $PATH?

 Signed-off-by: Jonathan Nieder jrnie...@gmail.com
 ---
  t/t9902-completion.sh | 26 +-
  1 file changed, 13 insertions(+), 13 deletions(-)

 diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
 index 3cd53f8..06dcfb2 100755
 --- a/t/t9902-completion.sh
 +++ b/t/t9902-completion.sh
 @@ -192,19 +192,19 @@ test_expect_success 'general options' '
  '
  
  test_expect_success 'general options plus command' '
 - test_completion git --version check checkout  
 - test_completion git --paginate check checkout  
 - test_completion git --git-dir=foo check checkout  
 - test_completion git --bare check checkout  
 - test_completion git --help des describe  
 - test_completion git --exec-path=foo check checkout  
 - test_completion git --html-path check checkout  
 - test_completion git --no-pager check checkout  
 - test_completion git --work-tree=foo check checkout  
 - test_completion git --namespace=foo check checkout  
 - test_completion git --paginate check checkout  
 - test_completion git --info-path check checkout  
 - test_completion git --no-replace-objects check checkout 
 + test_completion git --version cherry-p cherry-pick  
 + test_completion git --paginate cherry-p cherry-pick  
 + test_completion git --git-dir=foo cherry-p cherry-pick  
 + test_completion git --bare cherry-p cherry-pick  
 + test_completion git --help cherry-p cherry-pick  
 + test_completion git --exec-path=foo cherry-p cherry-pick  
 + test_completion git --html-path cherry-p cherry-pick  
 + test_completion git --no-pager cherry-p cherry-pick  
 + test_completion git --work-tree=foo cherry-p cherry-pick  
 + test_completion git --namespace=foo cherry-p cherry-pick  
 + test_completion git --paginate cherry-p cherry-pick  
 + test_completion git --info-path cherry-p cherry-pick  
 + test_completion git --no-replace-objects cherry-p cherry-pick 
  '
  
  test_expect_success 'setup for ref completion' '
That looks good to me, 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: Question re. git remote repository

2013-01-17 Thread Matt Seitz
From: git-ow...@vger.kernel.org [git-ow...@vger.kernel.org] on behalf of Lang, 
David [david.l...@uhn.ca]

 I thought the idea was that each developer installed git locally on their 
 machines 

Yes.

 and (as needed) committed their changes to the master repository which 
 resides externally to any of the local machines, such as on a network 
 server 

Yes, but committing their changes to the master repository is a two step 
process:

1.  Each developer first commits their changes to their personal repository 
using the git commit command.
2.  Each developer pushes their changes from their personal repository to the 
master repository with the git push command

 (and which I'm assuming has git installed locally as well).

Maybe.

If the machine with the master repository has git installed locally, then each 
developer can push their changes to the master repository using either the git 
protocol or the ssh protocol.

If the machine with the master repository does not have git installed locally, 
then each developer can push their changes to the master repository using NFS 
or CIFS/SMB.  The git documentation refers to this method as the file 
protocol.

The other David Lang (da...@lang.hm) believes that using git push using NFS 
or CIFS/SMB may not be safe and reliable.  Based on the following article by 
the creator of git, I believe using git push over NFS or CIFS/SMB is safe and 
reliable:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

The GitFaq wiki also says that using git push over NFS or CIFS/SMB is safe 
and reliable:

https://git.wiki.kernel.org/index.php/GitFaq#What_can_I_use_to_set_up_a_public_repository.3F
--
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: Question re. git remote repository

2013-01-17 Thread David Lang

On Fri, 18 Jan 2013, Matt Seitz wrote:


From: git-ow...@vger.kernel.org [git-ow...@vger.kernel.org] on behalf of Lang, 
David [david.l...@uhn.ca]

The other David Lang (da...@lang.hm) believes that using git push using NFS or CIFS/SMB 
may not be safe and reliable.  Based on the following article by the creator of git, I believe 
using git push over NFS or CIFS/SMB is safe and reliable:

http://permalink.gmane.org/gmane.comp.version-control.git/122670

The GitFaq wiki also says that using git push over NFS or CIFS/SMB is safe 
and reliable:

https://git.wiki.kernel.org/index.php/GitFaq#What_can_I_use_to_set_up_a_public_repository.3F


I'm glad to learn that git is more robust than I feared.

David Lang
--
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