Re: [PATCHv2] commit: reword --author error message

2015-01-27 Thread Ramsay Jones
On 26/01/15 19:07, Jeff King wrote:
 On Mon, Jan 26, 2015 at 04:48:33PM +0100, Michael J Gruber wrote:
 
 -die(_(No existing author found with '%s'), name);
 +die(_(--author '%s': neither 'Name email' nor a match for an 
 existing author), name);
 
 I had to add to the bikeshed, but I had to read this several times to
 make sense of it. It is grammatically:
 
   X [is] neither Y nor Z
 
 except that by eliding the verb (is), I somehow had trouble making
 sense of Z (a match...) as a noun.
 
 I came up with:
 
   --author '%s': neither 'Name email' nor matches an existing author
 
 only to see that it was suggested earlier in the thread as a predecessor
 to this. ;)
 
 I wonder if adding back in the missing verb, rather than a colon, would
 also make more sense:
 
   --author '%s' is neither 'Name email' nor a match for an existing author
 

I usually don't like to add anything to the bikeshed, but ...

This sounds odd to me, so maybe:

  --author '%s' is neither in the form of 'Name email' nor a match for an 
existing author

although that is getting a bit long! :-D

ATB,
Ramsay Jones


--
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: [PATCHv2] commit: reword --author error message

2015-01-27 Thread Philip Oakley

From: Jeff King p...@peff.net

On Mon, Jan 26, 2015 at 06:43:46PM -0800, Junio C Hamano wrote:


Jeff King p...@peff.net writes:

 ... I somehow had trouble making
 sense of Z (a match...) as a noun.

 I wonder if adding back in the missing verb, rather than a colon, 
 would

 also make more sense:

   --author '%s' is neither 'Name email' nor a match for an 
 existing author


Then

   --author '%s' is not 'Name email' and matches no existing 
 author


would be the shortest, sweetest and hopefully grammatical, perhaps?


Yes, that one make perfect sense to me.


Agreed.
Philip

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


Re: [PATCH] Add failing test for fetching from multiple packs over dumb httpd

2015-01-27 Thread Charles Bailey
On Tue, Jan 27, 2015 at 01:12:21PM -0500, Jeff King wrote:
 On Tue, Jan 27, 2015 at 03:20:41PM +, Charles Bailey wrote:
 
  From: Charles Bailey cbaile...@bloomberg.net
  
  When objects are spread across multiple packs, if an initial fetch does
  require all pack files, a subsequent fetch for objects in packs not
  retrieved in the initial fetch will fail.
 
 s/does/does not/, I think?

Yes, that's definitely what I meant to write.

[...]
 It looks like the culprit is 7b64469 (Allow parse_pack_index on
 temporary files, 2010-04-19). It added a new idx_path parameter to
 parse_pack_index, which we pass as NULL.  That causes its call to
 check_packed_git_idx to fail (because it has no idea what file we are
 talking about!).

That change looks like it went into 1.7.1.1. I cannot confirm this
working before then but we've definitely seen the bug in 1.7.12.3 and
more recent versions.

 This seems to fix it:
 
 diff --git a/sha1_file.c b/sha1_file.c
 index 30995e6..eda4d90 100644
 --- a/sha1_file.c
 +++ b/sha1_file.c
 @@ -1149,6 +1149,9 @@ struct packed_git *parse_pack_index(unsigned char 
 *sha1, const char *idx_path)
   const char *path = sha1_pack_name(sha1);
   struct packed_git *p = alloc_packed_git(strlen(path) + 1);
  
 + if (!idx_path)
 + idx_path = sha1_pack_index_name(sha1);
 +
   strcpy(p-pack_name, path);
   hashcpy(p-sha1, sha1);
   if (check_packed_git_idx(idx_path, p)) {

It certainly fixes my test script and I can give this patch a test in
the 'real' world.
--
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] Documentation/git-add.txt: add `add.ginore-errors` configuration variable

2015-01-27 Thread Junio C Hamano
Eric Sunshine sunsh...@sunshineco.com writes:

 On Mon, Jan 26, 2015 at 11:55 AM, Alexander Kuleshov
 kuleshovm...@gmail.com wrote:
 'git add' supports not only `add.ignoreErrors`, but also `add.ignore-errors`
 configuration variable.

 See 6b3020a2 (add: introduce add.ignoreerrors synonym for
 add.ignore-errors,  2010-12-01) for why this patch is undesirable.

We might want to do this instead, as the correction to the
misspelled configuration variable name was from the 1.7.0-era that
is sufficiently old (v1.7.0.8 was done in December 2010).

-- 8 --
Subject: doc: clarify naming rules for configuration variables

Also mark deprecated variables in the documentation more clearly.

The text for the rules are partly taken from the log message of
Jonathan's 6b3020a2 (add: introduce add.ignoreerrors synonym for
add.ignore-errors, 2010-12-01).

Signed-off-by: Junio C Hamano gits...@pobox.com
---
 Documentation/CodingGuidelines | 25 +
 Documentation/config.txt   | 15 +++
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index 894546d..8fbac15 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -413,6 +413,31 @@ Error Messages
  - Say what the error is first (cannot open %s, not %s: cannot open)
 
 
+Externally Visible Names
+
+ - For configuration variable names, follow the existing convention:
+
+   . The section name indicates the affected subsystem.
+
+   . The subsection name, if any, indicates which of an unbounded set
+ of things to set the value for.
+
+   . The variable name describes the effect of tweaking this knob.
+
+   The section and variable names that consist of multiple words are
+   formed by concatenating the words without punctuations (e.g. `-`),
+   and are broken using bumpyCaps in documentation as a hint to the
+   reader.
+
+   When choosing the variable namespace, do not use variable name for
+   specifying possibly unbounded set of things, most notably anything
+   an end user can freely come up with (e.g. branch names), but also
+   large fixed set defined by the system that can grow over time
+   (e.g. what kind of common whitespace problems to notice).  Use
+   subsection names or variable values, like existing variables
+   branch.name.description and core.whitespace do, instead.
+
+
 Writing Documentation:
 
  Most (if not all) of the documentation pages are written in the
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 0a4d22a..8a76d1d 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -664,14 +664,13 @@ core.abbrev::
for abbreviated object names to stay unique for sufficiently long
time.
 
-add.ignore-errors::
 add.ignoreErrors::
+add.ignore-errors (deprecated)::
Tells 'git add' to continue adding files when some files cannot be
added due to indexing errors. Equivalent to the '--ignore-errors'
-   option of linkgit:git-add[1].  Older versions of Git accept only
-   `add.ignore-errors`, which does not follow the usual naming
-   convention for configuration variables.  Newer versions of Git
-   honor `add.ignoreErrors` as well.
+   option of linkgit:git-add[1].  `add.ignore-errors` is deprecated,
+   as it does not follow the usual naming convention for configuration
+   variables.
 
 alias.*::
Command aliases for the linkgit:git[1] command wrapper - e.g.
@@ -1924,7 +1923,7 @@ pack.useBitmaps::
true. You should not generally need to turn this off unless
you are debugging pack bitmaps.
 
-pack.writebitmaps::
+pack.writebitmaps (deprecated)::
This is a deprecated synonym for `repack.writeBitmaps`.
 
 pack.writeBitmapHashCache::
@@ -2235,7 +2234,7 @@ sendemail.smtpencryption::
See linkgit:git-send-email[1] for description.  Note that this
setting is not subject to the 'identity' mechanism.
 
-sendemail.smtpssl::
+sendemail.smtpssl (deprecated)::
Deprecated alias for 'sendemail.smtpencryption = ssl'.
 
 sendemail.smtpsslcertpath::
@@ -2273,7 +2272,7 @@ sendemail.thread::
 sendemail.validate::
See linkgit:git-send-email[1] for description.
 
-sendemail.signedoffcc::
+sendemail.signedoffcc (deprecated)::
Deprecated alias for 'sendemail.signedoffbycc'.
 
 showbranch.default::

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


Re: [PATCH] git-push.txt: document the behavior of --repo

2015-01-27 Thread Junio C Hamano
Michael J Gruber g...@drmicha.warpmail.net writes:

 As per the code, the --repo repo option is equivalent to the repo
 argument to 'git push'. [It exists for historical reasons, back from the time
 when options had to come before arguments.]

 Say so. [But not that.]

 Signed-off-by: Michael J Gruber g...@drmicha.warpmail.net
 ---
 Thanks for digging up the thread, Junio. I never would have thought that
 I had been with the Git community for that long already...

;-)

I think this update will do for now, but in the medium term (read:
by the end of this year, or earlier if somebody is motivated
enough), we might want to:

 * deprecate --repo=repository as it is very much no-op these
   days (that is, strike But not that part above);

 * dig deeper what Prem wanted out of their imagined semantics of
   the --repo=repository option.  I suspect that it has something
   to do with support of triangular workflow, and

   - it might turn out that there is a better way to do what Prem
 wanted to do without that option but using other existing
 mechanisms [*1*], in which case we can stop there on the code
 side, and clarify how to use those other existing mechanisms in
 the tutorial.

   - or it may be that we do not have a good way to achieve what
 Prem wanted to do, and that a *new* option to specify the
 target URL from the command line, like Prem used the --repo
 option may turn out to be the best way forward [*2*], in which
 case a code update may become necessary.

Thanks.



[Footnotes]

 *1* For example, in 1.8.3 we saw some changes around triangular
 pull from one place, push to another place workflow with
 remote.pushdefault configuration, and branch.*.pushremote lets
 the users control this even at a branch level.

 *2* I say may turn out to be because we cannot tell if that is
 the best solution until we know what was really what Prem
 wanted to do---we may be looking at an XY problem after all.
--
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 failing test for fetching from multiple packs over dumb httpd

2015-01-27 Thread Jeff King
On Tue, Jan 27, 2015 at 03:20:41PM +, Charles Bailey wrote:

 From: Charles Bailey cbaile...@bloomberg.net
 
 When objects are spread across multiple packs, if an initial fetch does
 require all pack files, a subsequent fetch for objects in packs not
 retrieved in the initial fetch will fail.

s/does/does not/, I think?

 I'm not very familiar with the http client code so this analysis is based
 purely on observed behaviour.

Debugging the http code is a royal pain because all the work happens in
a separate helper. I use a git-remote-debug script like this:

  #!/bin/sh
  host=localhost:5001
  proto=$(echo ${2:-$1} | sed 's/:.*//')
  prog=git-remote-$proto
  echo 2 gdb -ex 'target remote $host' $prog
  gdbserver localhost:5001 $prog $@

and then you can use:

  git fetch debug::http://...

in the test script, cut-and-paste the gdb command printed to stderr, and
you're dropped into the appropriate debugger without worrying about all
of the stdio mess.

 When fetching only some refs from a repository served over dumb httpd Git
 appears to download all of the index files for the available packs but then
 only chooses the pack files that help it resolve the objects which we need.

Right. And it looks like we have special code in sha1_file.c to make
sure we do not trust an index which does not have a matching packfile.
So that's good.

The http-walker code does its own check, in fetch_and_setup_pack_index,
that checks for an existing valid copy of the index. If we don't have
it, we download the index and proceed. If we do, we skip straight to
grabbing the pack. But if we have it and it doesn't appear valid, we
return an error. And there seems to be a bug with checking the validity.

It looks like the culprit is 7b64469 (Allow parse_pack_index on
temporary files, 2010-04-19). It added a new idx_path parameter to
parse_pack_index, which we pass as NULL.  That causes its call to
check_packed_git_idx to fail (because it has no idea what file we are
talking about!).

This seems to fix it:

diff --git a/sha1_file.c b/sha1_file.c
index 30995e6..eda4d90 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1149,6 +1149,9 @@ struct packed_git *parse_pack_index(unsigned char *sha1, 
const char *idx_path)
const char *path = sha1_pack_name(sha1);
struct packed_git *p = alloc_packed_git(strlen(path) + 1);
 
+   if (!idx_path)
+   idx_path = sha1_pack_index_name(sha1);
+
strcpy(p-pack_name, path);
hashcpy(p-sha1, sha1);
if (check_packed_git_idx(idx_path, p)) {

(Alternatively, we could pass in sha1_pack_index_name instead of NULL in
the first place, but I think it is reasonable for parse_pack_index to
take care of this).

I think it may also make sense for fetch_and_setup_pack_index to delete
and re-download a broken .idx file (rather than aborting), but I don't
think that's a big deal. It should only happen in the face of on-disk
data corruption, and the user can remove the broken .idx themselves.

-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] Makefile: do not compile git with debugging symbols by default

2015-01-27 Thread David Aguilar
On Fri, Jan 23, 2015 at 07:55:17AM +0900, Mike Hommey wrote:
 On Thu, Jan 22, 2015 at 01:35:38PM -0500, Jeff King wrote:
  On Thu, Jan 22, 2015 at 06:36:41PM +0100, Matthieu Moy wrote:
  
Yes, main point is size of executable.
   
   The Git executable is a few megabytes, i.e. 0.001% the size of a really
   small hard disk. The benefit seems really negligible to me.
  
  I don't know the layout of the symbols with respect to the code, or
  whether the stripped version might reduce memory pressure. So in theory
  it could have a performance impact.
 
 It doesn't. Debugging info is in a part of the file that is not mapped
 in memory, and in a part that can be removed without affecting the rest
 of the file, so it's more or less at the end.

It goes even further.  These days Fedora systems strip debug
info out into separate files and packages while creating rpms
debuginfo packages are created automatically and provide
debuginfo files under /usr/lib/debug, where gdb knows to look by
default.

Alexander, one nice thing about the Makefile is that it supports
you creating a file in your Git worktree called config.mak
with the following content:

CFLAGS = -O2 -Wall

If you do that then git will build without debug info and you
won't have to specify CFLAGS when invoking make.
Hopefully that's easy and convenient enough.

cheers,
-- 
David
--
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 17/21] list-files: show directories as well as files

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

 @@ -194,16 +225,31 @@ static void write_ce_name(struct strbuf *sb, const 
 struct cache_entry *ce)
  static void show_ce_entry(const char *tag, const struct cache_entry *ce)
  {
   static struct strbuf sb = STRBUF_INIT;
 - int len = max_prefix_len;
 + int len = max_prefix_len, saved_max_depth;
  
   if (len = ce_namelen(ce))
   die(git ls-files: internal error - cache entry not superset of 
 prefix);
  
 + if (show_dirs) {
 + /* ignore depth to catch dirs that contain matched entries */
 + saved_max_depth = pathspec.max_depth;
 + pathspec.max_depth = -1;
 + }
 +
   if (!match_pathspec(pathspec, ce-name, ce_namelen(ce),
   len, ps_matched,
   S_ISDIR(ce-ce_mode) || S_ISGITLINK(ce-ce_mode)))
   return;
  
 + if (show_dirs) {
 + pathspec.max_depth = saved_max_depth;
 + if (strchr(ce-name, '/') 
 + !match_pathspec(pathspec, ce-name, ce_namelen(ce),
 + prefix_len, NULL, 1) 
 + show_as_directory(ce))
 + return;
 + }
 +

My compiler seems to be too stupid to notice that saved_max_depth is
always set before it is used, if it gets used and complains.  Sigh.

For now I am tempted to squash this in.  Note that the original does
not seem to restore saved_max_depath when the pathspec does not match
and function returns in the call to match_pathspec() we have in the
code before your patch, which smells like a bug, and the attached
would fix it.

 builtin/ls-files.c | 33 ++---
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 29b5c2e..f28b7e9 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -222,27 +222,38 @@ static void write_ce_name(struct strbuf *sb, const struct 
cache_entry *ce)
strbuf_release(quoted);
 }
 
+static int match_pathspec_with_depth(struct pathspec *ps,
+const char *name, int namelen,
+int prefix, char *seen, int is_dir,
+const int *custom_depth)
+{
+   int saved_depth = ps-max_depth;
+   int result;
+
+   if (custom_depth)
+   ps-max_depth = *custom_depth;
+   result = match_pathspec(ps, name, namelen, prefix, seen, is_dir);
+   if (custom_depth)
+   ps-max_depth = saved_depth;
+   return result;
+}
+
 static void show_ce_entry(const char *tag, const struct cache_entry *ce)
 {
static struct strbuf sb = STRBUF_INIT;
-   int len = max_prefix_len, saved_max_depth;
+   int len = max_prefix_len;
+   static const int infinite_depth = -1;
 
if (len = ce_namelen(ce))
die(git ls-files: internal error - cache entry not superset of 
prefix);
 
-   if (show_dirs) {
-   /* ignore depth to catch dirs that contain matched entries */
-   saved_max_depth = pathspec.max_depth;
-   pathspec.max_depth = -1;
-   }
-
-   if (!match_pathspec(pathspec, ce-name, ce_namelen(ce),
-   len, ps_matched,
-   S_ISDIR(ce-ce_mode) || S_ISGITLINK(ce-ce_mode)))
+   if (!match_pathspec_with_depth(pathspec, ce-name, ce_namelen(ce),
+  len, ps_matched,
+  S_ISDIR(ce-ce_mode) || 
S_ISGITLINK(ce-ce_mode),
+  show_dirs ? infinite_depth : NULL))
return;
 
if (show_dirs) {
-   pathspec.max_depth = saved_max_depth;
if (strchr(ce-name, '/') 
!match_pathspec(pathspec, ce-name, ce_namelen(ce),
prefix_len, NULL, 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: [PATCH 09/21] list-files: a user friendly version of ls-files and more

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

 +color.list-files::
 + A boolean to enable/disable color in the output of
 + linkgit:git-list-files[1]. May be set to `always`, `false` (or
 + `never`) or `auto` (or `true`), in which case colors are used
 + only when the output is to a terminal. Defaults to false.

This violates the configuration variable naming rules; perhaps
rename it to color.listFiles or something?
--
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.7.3 no longer applies relative symbolic link patches

2015-01-27 Thread Junio C Hamano
Junio C Hamano gits...@pobox.com writes:

 Linus Torvalds torva...@linux-foundation.org writes:

 Ugh. I don't see anything we can do about this on the git side, and I
 do kind of understand why 'patch' would be worried about '..' files.
 In a perfect world, patch would parse the filename and see that it
 stays within the directory structure of the project, but that is a
 rather harder thing to do than just say no dot-dot files.

 It is unclear to me why limit to the current directory and below
 is such a big deal in the first place.

 If the user wants to apply a patch that touches ../etc/shadow, is
 the tool in the place to complain?

Let me take this part back.

I think git apply should behave closely to git apply --index
(which is used by git am unless there is a very good reason not to
(and 'git apply --index' behaves differently from GNU patch, and we
should match what the latter does is not a very good reason).  When
the index guards the working tree, we do not follow any symlink,
whether the destination is inside the current directory or not.

I however do not think the current git apply notices that it will
overwrite a path beyond a symlink---we may need to fix that if that
is the case.  I'll see what I can find (but I'll be doing 2.3-rc2
today so it may be later this week).

Thanks.



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


Re: [PATCH] dumb-http: do not pass NULL path to parse_pack_index

2015-01-27 Thread Charles Bailey
On Tue, Jan 27, 2015 at 03:02:27PM -0500, Jeff King wrote:
 Discovery and tests by Charles Bailey char...@hashpling.org.
 
 Signed-off-by: Jeff King p...@peff.net
 ---
 I'm happy to flip the authorship on this. You have more lines in it than
 I do. :)

No, I'm happy with you taking the blame/praise for this, it's definitely
your fix.
--
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] dumb-http: do not pass NULL path to parse_pack_index

2015-01-27 Thread Junio C Hamano
Charles Bailey char...@hashpling.org writes:

 On Tue, Jan 27, 2015 at 03:02:27PM -0500, Jeff King wrote:
 Discovery and tests by Charles Bailey char...@hashpling.org.
 
 Signed-off-by: Jeff King p...@peff.net
 ---
 I'm happy to flip the authorship on this. You have more lines in it than
 I do. :)

 No, I'm happy with you taking the blame/praise for this, it's definitely
 your fix.

Looks good (rather, makes the original look obviously broken and
makes me wonder why our review process did not catch that bogus NULL
in the first place).

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


Re: [PATCH] git-push.txt: document the behavior of --repo

2015-01-27 Thread Eric Sunshine
On Tue, Jan 27, 2015 at 7:35 AM, Michael J Gruber
g...@drmicha.warpmail.net wrote:
 As per the code, the --repo repo option is equivalent to the repo
 argument to 'git push'. [It exists for historical reasons, back from the time
 when options had to come before arguments.]

 Say so. [But not that.]

 Signed-off-by: Michael J Gruber g...@drmicha.warpmail.net
 ---
 diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
 index ea97576..0ad31c4 100644
 --- a/Documentation/git-push.txt
 +++ b/Documentation/git-push.txt
 @@ -219,22 +219,8 @@ origin +master` to force a push to the `master` branch). 
 See the
  `refspec...` section above for details.

  --repo=repository::
 -   This option is only relevant if no repository argument is
 -   passed in the invocation. In this case, 'git push' derives the
 -   remote name from the current branch: If it tracks a remote
 -   branch, then that remote repository is pushed to. Otherwise,
 -   the name origin is used. For this latter case, this option
 -   can be used to override the name origin. In other words,
 -   the difference between these two commands
 -+
 ---
 -git push public #1
 -git push --repo=public  #2
 ---
 -+
 -is that #1 always pushes to public whereas #2 pushes to public
 -only if the current branch does not track a remote branch. This is
 -useful if you write an alias or script around 'git push'.
 +   This option is equivalent to the repository argument; the latter
 +   wins if both are specified.

To what does latter refer in this case? (I presume it means the
standalone repository argument, though the text feels ambiguous.)

Also, both the standalone argument and the right-hand-side of --repo=
are spelled repository, so there may be potential for confusion
when talking about repository (despite the subsequent argument).
Perhaps qualifying it as _standalone_ repository argument might
help.

  -u::
  --set-upstream::
 --
 2.3.0.rc1.222.gae238f2
--
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 report

2015-01-27 Thread Albert Akhriev

Hi All,

My system:  RedHat 6.5/64-bit (gcc 4.4.7)
My configuration options:  ./configure --prefix=/home/albert/soft

Compilation of git 2.2.2 itself was fine, but some tests failed.
I presume, there might be some network communication restrictions here in
the lab
(gitweb had failed as can be seen in the listing below):

1..14
*** t9400-git-cvsserver-server.sh ***
1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
*** t9401-git-cvsserver-crlf.sh ***
1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
*** t9402-git-cvsserver-refs.sh ***
1..0 # SKIP skipping git-cvsserver tests, Perl SQLite interface unavailable
*** t9500-gitweb-standalone-no-errors.sh ***
not ok 1 - no commits: projects_list (implicit)
#   gitweb_run
not ok 2 - no commits: projects_index
#   gitweb_run a=project_index
not ok 3 - no commits: .git summary (implicit)
#   gitweb_run p=.git
not ok 4 - no commits: .git commit (implicit HEAD)
#   gitweb_run p=.git;a=commit
not ok 5 - no commits: .git commitdiff (implicit HEAD)
#   gitweb_run p=.git;a=commitdiff
not ok 6 - no commits: .git tree (implicit HEAD)
#   gitweb_run p=.git;a=tree
not ok 7 - no commits: .git heads
#   gitweb_run p=.git;a=heads
not ok 8 - no commits: .git tags
#   gitweb_run p=.git;a=tags
ok 9 - Make initial commit
not ok 10 - projects_list (implicit)
#   gitweb_run
not ok 11 - projects_index
#   gitweb_run a=project_index
not ok 12 - .git summary (implicit)
#   gitweb_run p=.git
not ok 13 - .git commit (implicit HEAD)
#   gitweb_run p=.git;a=commit
not ok 14 - .git commitdiff (implicit HEAD, root commit)
#   gitweb_run p=.git;a=commitdiff
not ok 15 - .git commitdiff_plain (implicit HEAD, root commit)
#   gitweb_run p=.git;a=commitdiff_plain
not ok 16 - .git commit (HEAD)
#   gitweb_run p=.git;a=commit;h=HEAD
not ok 17 - .git tree (implicit HEAD)
#   gitweb_run p=.git;a=tree
not ok 18 - .git blob (file)
#   gitweb_run p=.git;a=blob;f=file
not ok 19 - .git blob_plain (file)
#   gitweb_run p=.git;a=blob_plain;f=file
not ok 20 - .git commit (non-existent)
#   gitweb_run p=.git;a=commit;h=non-existent
not ok 21 - .git commitdiff (non-existent)
#   gitweb_run p=.git;a=commitdiff;h=non-existent
not ok 22 - .git commitdiff (non-existent vs HEAD)
#   gitweb_run p=.git;a=commitdiff;hp=non-existent;h=HEAD
not ok 23 - .git tree ()
#   gitweb_run p=.git;a=tree;h=
not ok 24 - .git tag ()
#   gitweb_run p=.git;a=tag;h=
not ok 25 - .git blob (non-existent)
#   gitweb_run p=.git;a=blob;f=non-existent
not ok 26 - .git blob_plain (non-existent)
#   gitweb_run p=.git;a=blob_plain;f=non-existent
not ok 27 - commitdiff(0): root
#   gitweb_run p=.git;a=commitdiff
not ok 28 - commitdiff(0): file added
#   echo New file  new_file 
#git add new_file 
#git commit -a -m File added. 
#gitweb_run p=.git;a=commitdiff
not ok 29 - commitdiff(0): mode change
#   test_chmod +x new_file 
#git commit -a -m Mode changed. 
#gitweb_run p=.git;a=commitdiff
not ok 30 - commitdiff(0): file renamed
#   git mv new_file renamed_file 
#git commit -a -m File renamed. 
#gitweb_run p=.git;a=commitdiff
not ok 31 - commitdiff(0): file to symlink
#   rm renamed_file 
#test_ln_s_add file renamed_file 
#git commit -a -m File to symlink. 
#gitweb_run p=.git;a=commitdiff
not ok 32 - commitdiff(0): file deleted
#   git rm renamed_file 
#rm -f renamed_file 
#git commit -a -m File removed. 
#gitweb_run p=.git;a=commitdiff
not ok 33 - commitdiff(0): file copied / new file
#   cp file file2 
#git add file2 
#git commit -a -m File copied. 
#gitweb_run p=.git;a=commitdiff
not ok 34 - commitdiff(0): mode change and modified
#   echo New line  file2 
#test_chmod +x file2 
#git commit -a -m Mode change and modification. 
#gitweb_run p=.git;a=commitdiff
not ok 35 - commitdiff(0): renamed and modified
#   cat file2EOF 
#   Dominus regit me,
#   et nihil mihi deerit.
#   In loco pascuae ibi me collocavit,
#   super aquam refectionis educavit me;
#   animam meam convertit,
#   deduxit me super semitas jusitiae,
#   propter nomen suum.
#   EOF
#git commit -a -m File added. 
#git mv file2 file3 
#echo Propter nomen suum.  file3 
#git commit -a -m File rename and modification. 
#gitweb_run p=.git;a=commitdiff
not ok 36 - commitdiff(0): renamed, mode change and modified
#   

Re: bug report

2015-01-27 Thread Jeff King
On Tue, Jan 27, 2015 at 02:43:31PM +, Albert Akhriev wrote:

 My system:  RedHat 6.5/64-bit (gcc 4.4.7)
 My configuration options:  ./configure --prefix=/home/albert/soft
 
 Compilation of git 2.2.2 itself was fine, but some tests failed.
 I presume, there might be some network communication restrictions here in
 the lab
 (gitweb had failed as can be seen in the listing below):

The gitweb tests should run locally and not need to touch the network.
It looks like gitweb cannot run at all. Are you sure you have a working
perl (with CGI and other base modules)?

Try running:

  cd t
  ./t9500-gitweb-standaloneno-errors.sh -v -i

which should give more output. Also check the contents of gitweb.log in
t/trash directory/t9500-

-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: implement a stable 'Last updated' in Documentation

2015-01-27 Thread Junio C Hamano
Olaf Hering o...@aepfle.de writes:

 Several files in Documentation have an unstable 'Last updated' timestamp. The
 reason is that their mtime changes every time, which prevents reproducible
 builds.

 341 technical/api-index.txt: technical/api-index-skel.txt \
 342 technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
 343 $(QUIET_GEN)cd technical  '$(SHELL_PATH_SQ)' ./api-index.sh

 388 howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
 389 $(QUIET_GEN)$(RM) $@+ $@  \
 390 '$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard 
 howto/*.txt)) $@+  \
 391 mv $@+ $@

 399 $(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
 400 $(QUIET_ASCIIDOC)$(RM) $@+ $@  \
 401 sed -e '1,/^$$/d' $ | \
 402 $(TXT_TO_HTML) - $@+  \
 403 mv $@+ $@

All of them seem to have dependencies so it seems to me that two
builds back to back without actually changing their input would not
re-build anything.  What am I missing???

 What file timestamp should be used for them? Likely ../version?

I tend to think the Last updated timestamp taken from the
filesystem timestamp is a bad practice inherited by these tools from
the days back when nobody used any revision control systems.

If I check out v1.8.5 and build documentation now, it does not
matter if the generated documentation had the timestamp of the
checkout of individual files or that of a single file generated
during the build process, i.e. ../version.  Neither has much
relevance to the time the actual contents of the documentation was
prepared or what vintage of the software the documentation is for.

I am fine with branding generated documentation with the version
number (i.e. You are reading the documentation for Git version
2.2.0).  Replacing that statement with You are reading the
documentation for a version of Git that was committed on such and
such time is also fine.  But using file timestamp would not help
either.

And that practice of using file timestamp is doubly bad by leading
misguided people to want to set timestamps of all the files by
copying commit timestamp.  That is backwards, 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


Re: [PATCH] http: Add Accept-Language header if possible

2015-01-27 Thread Junio C Hamano
Yi EungJun semtlen...@gmail.com writes:

 +static void write_accept_language(struct strbuf *buf)
 +{
 + /*
 +  * MAX_DECIMAL_PLACES must not be larger than 3. If it is larger than
 +  * that, q-value will be smaller than 0.001, the minimum q-value the
 +  * HTTP specification allows. See
 +  * http://tools.ietf.org/html/rfc7231#section-5.3.1 for q-value.
 +  */
 + const int MAX_DECIMAL_PLACES = 3;
 + const int MAX_LANGUAGE_TAGS = 1000;
 + const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000;
 + struct strbuf *language_tags = NULL;
 + int num_langs = 0;
 + const char *s = get_preferred_languages();
 + int i;
 + struct strbuf tag = STRBUF_INIT;
 +
 + /* Don't add Accept-Language header if no language is preferred. */
 + if (!s)
 + return;
 +
 + /*
 +  * Split the colon-separated string of preferred languages into
 +  * language_tags array.
 +  */
 + do {
 + /* collect language tag */
 + for (; *s  (isalnum(*s) || *s == '_'); s++)
 + strbuf_addch(tag, *s == '_' ? '-' : *s);
 +
 + /* skip .codeset, @modifier and any other unnecessary parts */
 + while (*s  *s != ':')
 + s++;
 +
 + if (tag.len) {
 + num_langs++;
 + REALLOC_ARRAY(language_tags, num_langs);
 + strbuf_init(language_tags[num_langs - 1], 0);
 + strbuf_swap(tag, language_tags[num_langs - 1]);
 +
 + if (num_langs = MAX_LANGUAGE_TAGS - 1) /* -1 for '*' */
 + break;
 + }
 + } while (*s++);

The structure of this function is much easier to understand than any
of the previous rounds.  You collect up to the max you are going to
support, and then you format up to the max you are going to send.

Very straight-forward and simple.

 + /* write Accept-Language header into buf */
 + if (num_langs = 1) {

micronit: should be OK to just say if (num_langs).

 + int last_buf_len = 0;
 + int max_q;
 + int decimal_places;
 + char q_format[32];
 +
 + /* add '*' */
 + REALLOC_ARRAY(language_tags, num_langs + 1);
 + strbuf_init(language_tags[num_langs], 0);
 + strbuf_addstr(language_tags[num_langs++], *);
 +
 + /* compute decimal_places */
 + for (max_q = 1, decimal_places = 0;
 + max_q  num_langs  decimal_places = 
 MAX_DECIMAL_PLACES;
 + decimal_places++, max_q *= 10)
 + ;

micronit: the second and the third line are indented too deeply and
made me wonder if this has an overlong first line (i.e. the set-up
part to enter the for-loop) split into multiple lines.

 +
 + sprintf(q_format, ;q=0.%%0%dd, decimal_places);
 +
 + strbuf_addstr(buf, Accept-Language: );
 +
 + for(i = 0; i  num_langs; i++) {
 + if (i  0)
 + strbuf_addstr(buf, , );
 +
 + strbuf_addstr(buf, strbuf_detach(language_tags[i], 
 NULL));

This is not wrong per-se, but it looks somewhat convoluted to me.

You can just peek language_tags[i].buf here without detaching, as
you will free the strbufs after you exit the loop anyway.  Your
version is not wrong and it does not result in double-freeing,
because detach clears the strbuf, but at the same time, makes the
responsibility to free language_tags[] strbuf split into here (for
elements up to the ones that are used to fill buf) and the cleanup
loop (for elements that are not used in this loop).

 + if (i  0)
 + strbuf_addf(buf, q_format, max_q - i);
 +
 + if (buf-len  MAX_ACCEPT_LANGUAGE_HEADER_SIZE) {
 + strbuf_remove(buf, last_buf_len, buf-len - 
 last_buf_len);
 + break;
 + }
 +
 + last_buf_len = buf-len;
 + }
 + }
 +
 + /* free language tags */
 + for(i = 0; i  num_langs; i++) {
 + strbuf_release(language_tags[i]);
 + }
 + free(language_tags);
 +}

I am wondering if using strbuf for each of the language_tags[] is
even necessary.  How about doing it this way instead?

 http.c | 22 +-
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/http.c b/http.c
index 6111c6a..db591b3 100644
--- a/http.c
+++ b/http.c
@@ -1027,7 +1027,7 @@ static void write_accept_language(struct strbuf *buf)
const int MAX_DECIMAL_PLACES = 3;
const int MAX_LANGUAGE_TAGS = 1000;
const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000;
-   struct strbuf *language_tags = NULL;
+   char **language_tags = NULL;
int num_langs = 0;
const char *s = get_preferred_languages();
int 

[ANNOUNCE] Git v2.3.0-rc2

2015-01-27 Thread Junio C Hamano
A release candidate Git v2.3.0-rc2 is now available for testing
at the usual places.

Hopefully this can become the final v2.3.0 next week, almost as-is.
There are no regression noticed and/or fixed since -rc1, and the
changes are mostly l10n and minor documentation updates.

The tarballs are found at:

https://www.kernel.org/pub/software/scm/git/testing/

The following public repositories all have a copy of the 'v2.3.0-rc2'
tag and the 'master' branch that the tag points at:

  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://code.google.com/p/git-core/
  url = git://git.sourceforge.jp/gitroot/git-core/git.git
  url = git://git-core.git.sourceforge.net/gitroot/git-core/git-core
  url = https://github.com/gitster/git

Git v2.3 Release Notes (draft)
==

Updates since v2.2
--

Ports

 * Recent gcc toolchain on Cygwin started throwing compilation warning,
   which has been squelched.

 * A few updates to build on platforms that lack tv_nsec,
   clock_gettime, CLOCK_MONOTONIC and HMAC_CTX_cleanup (e.g. older
   RHEL) have been added.


UI, Workflows  Features

 * It was cumbersome to use GIT_SSH mechanism when the user wanted
   to pass an extra set of arguments to the underlying ssh.  A new
   environment variable GIT_SSH_COMMAND can be used for this.

 * A request to store an empty note via git notes meant to remove
   note from the object but with --allow-empty we will store a
   (surprise!)  note that is empty.

 * git interpret-trailers learned to properly handle the
   Conflicts: block at the end.

 * git am learned --message-id option to copy the message ID of
   the incoming e-mail to the log message of resulting commit.

 * git clone --reference=over there learned the --dissociate
   option to go with it; it borrows objects from the reference object
   store while cloning only to reduce network traffic and then
   dissociates the resulting clone from the reference by performing
   local copies of borrowed objects.

 * git send-email learned --transfer-encoding option to force a
   non-fault Content-Transfer-Encoding header (e.g. base64).

 * git send-email normally identifies itself via X-Mailer: header in
   the message it sends out.  A new command line flag --no-xmailer
   allows the user to squelch the header.

 * git push into a repository with a working tree normally refuses
   to modify the branch that is checked out.  The command learned to
   optionally do an equivalent of git reset --hard only when there
   is no change to the working tree and the index instead, which would
   be useful to deploy by pushing into a repository.

 * git new-workdir (in contrib/) can be used to populate an empty
   and existing directory now.

 * Credential helpers are asked in turn until one of them give
   positive response, which is cumbersome to turn off when you need to
   run Git in an automated setting.  The credential helper interface
   learned to allow a helper to say stop, don't ask other helpers.
   Also GIT_TERMINAL_PROMPT environment can be set to false to disable
   our built-in prompt mechanism for passwords.

 * git branch -d (delete) and git branch -m (move) learned to
   honor -f (force) flag; unlike many other subcommands, the way to
   force these have been with separate -D/-M options, which was
   inconsistent.

 * diff-highlight filter (in contrib/) allows its color output to be
   customized via configuration variables.

 * git imap-send learned to take -v (verbose) and -q (quiet)
   command line options.

 * git remote add $name $URL is now allowed when url.$URL.insteadOf
   is already defined.

 * git imap-send now can be built to use cURL library to talk to
   IMAP servers (if the library is recent enough, of course).
   This allows you to use authenticate method other than CRAM-MD5,
   among other things.

 * git imap-send now allows GIT_CURL_VERBOSE environment variable to
   control the verbosity when talking via the cURL library.

 * The prompt script (in contrib/) learned to optionally hide prompt
   when in an ignored directory by setting GIT_PS1_HIDE_IF_PWD_IGNORED
   shell variable.


Performance, Internal Implementation, Development Support etc.

 * Earlier we made rev-list --object-edge more aggressively list the
   objects at the edge commits, in order to reduce number of objects 
   fetched into a shallow repository, but the change affected cases
   other than fetching into a shallow repository and made it
   unusably slow (e.g. fetching into a normal repository should not
   have to suffer the overhead from extra processing).  Limit it to a
   more specific case by introducing --objects-edge-aggressive, a new
   option to rev-list.

 * Squelched useless compiler warnings on Mac OS X regarding the
   crypto API.

 * The procedure to generate unicode table has been simplified.

 * Some filesystems assign filemodes in a strange way, fooling then
   automatic filemode 

Re: [PATCH 2/2] test-lib.sh: Dynamic test for the prerequisite SANITY

2015-01-27 Thread Chris Packham
Minor typo in a comment.

On Wed, Jan 28, 2015 at 4:39 AM, Torsten Bögershausen tbo...@web.de wrote:
 The SANITY precondition was not set when running as root,
 but this is not 100% reliable for CYGWIN:

 A file may be allowed to be deleted when the containing
 directory does not have write permissions.

 See
 https://technet.microsoft.com/en-us/library/bb463216.aspx
 ...In UNIX, the write permission bit on a directory permits both
 the creation and removal of new files or sub-directories in the directory.
 On Windows, the Write_Data access right controls the creation of new
 sub-files and the Delete_Child access right controls the deletion. 

 We may argue that the translation of the POSIX write permission bit
 into Windows access rights can be improved in CYGWIN.

 A dynamic test handles all cases: when the sequence
 $ mkdir SANETESTD 
 $ chmod +w SANETESTD 
 $ SANETESTD/x 
 $ ! rm SANETESTD/x
 succeeds the prerequisite SANITY is true.

 Helped-by: Junio C Hamano gits...@pobox.com
 Signed-off-by: Torsten Bögershausen tbo...@web.de
 ---
  t/test-lib.sh | 17 -
  1 file changed, 16 insertions(+), 1 deletion(-)

 diff --git a/t/test-lib.sh b/t/test-lib.sh
 index 93f7cad..887e986 100644
 --- a/t/test-lib.sh
 +++ b/t/test-lib.sh
 @@ -1038,8 +1038,23 @@ test_lazy_prereq NOT_ROOT '

  # When the tests are run as root, permission tests will report that
  # things are writable when they shouldn't be.
 +# Special check for CYGWIN (or Windows in general):
 +# A file can be deleted, even if the containing directory does'nt

s/does'nt/doesn't/

 +# have write permissions
  test_lazy_prereq SANITY '
 -   test_have_prereq POSIXPERM,NOT_ROOT
 +   mkdir SANETESTD 
 +   chmod +w SANETESTD 
 +   SANETESTD/x 
 +   chmod -w SANETESTD ||
 +   error bug in test sript: cannot prepare SANETESTD
 +
 +   ! rm SANETESTD/x
 +   status=$?
 +
 +   chmod +w SANETESTD 
 +   rm -rf SANETESTD ||
 +   error bug in test sript: cannot clean SANETESTD
 +   return $status
  '

  GIT_UNZIP=${GIT_UNZIP:-unzip}
 --
 2.2.0.rc1.26.g3e3a70d

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


[PATCH] dumb-http: do not pass NULL path to parse_pack_index

2015-01-27 Thread Jeff King
On Tue, Jan 27, 2015 at 01:12:20PM -0500, Jeff King wrote:

 It looks like the culprit is 7b64469 (Allow parse_pack_index on
 temporary files, 2010-04-19). It added a new idx_path parameter to
 parse_pack_index, which we pass as NULL.  That causes its call to
 check_packed_git_idx to fail (because it has no idea what file we are
 talking about!).

This is not quite right. That refactoring commit correctly passes the
result of sha1_pack_index_name() for the newly-added parameter. It's the
_next_ commit which then erroneously passes NULL. :)

Here's my fix with a proper commit message. I tweaked the title on your
test, as I didn't find the original very descriptive. I also bumped the
call to sha1_pack_index_name() into the caller, as that makes more sense
to me after reading the older commits (and there are literally no other
callers outside of this function).

-- 8 --
Once upon a time, dumb http always fetched .idx files
directly into their final location, and then checked their
validity with parse_pack_index. This was refactored in
commit 750ef42 (http-fetch: Use temporary files for
pack-*.idx until verified, 2010-04-19), which uses the
following logic:

  1. If we have the idx already in place, see if it's
 valid (using parse_pack_index). If so, use it.

  2. Otherwise, fetch the .idx to a tempfile, check
 that, and if so move it into place.

  3. Either way, fetch the pack itself if necessary.

However, it got step 1 wrong. We pass a NULL path parameter
to parse_pack_index, so an existing .idx file always looks
broken. Worse, we do not treat this broken .idx as an
opportunity to re-fetch, but instead return an error,
ignoring the pack entirely. This can lead to a dumb-http
fetch failing to retrieve the necessary objects.

This doesn't come up much in practice, because it must be a
packfile that we found out about (and whose .idx we stored)
during an earlier dumb-http fetch, but whose packfile we
_didn't_ fetch. I.e., we did a partial clone of a
repository, didn't need some packfiles, and now a followup
fetch needs them.

Discovery and tests by Charles Bailey char...@hashpling.org.

Signed-off-by: Jeff King p...@peff.net
---
I'm happy to flip the authorship on this. You have more lines in it than
I do. :)

As I mentioned before, I think we could treat a broken .idx file
differently (by deleting and refetching), but I doubt it matters in
practice. The only reason this came up at all is that our test for
broken was bogus, and it may be better to let a user diagnose and
deal with breakage.

 http.c |  2 +-
 t/t5550-http-fetch-dumb.sh | 18 ++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/http.c b/http.c
index 040f362..f2373c0 100644
--- a/http.c
+++ b/http.c
@@ -1240,7 +1240,7 @@ static int fetch_and_setup_pack_index(struct packed_git 
**packs_head,
int ret;
 
if (has_pack_index(sha1)) {
-   new_pack = parse_pack_index(sha1, NULL);
+   new_pack = parse_pack_index(sha1, sha1_pack_index_name(sha1));
if (!new_pack)
return -1; /* parse_pack_index() already issued error 
message */
goto add_pack;
diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
index ac71418..6da9422 100755
--- a/t/t5550-http-fetch-dumb.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -165,6 +165,24 @@ test_expect_success 'fetch notices corrupt idx' '
)
 '
 
+test_expect_success 'fetch can handle previously-fetched .idx files' '
+   git checkout --orphan branch1 
+   echo base file 
+   git add file 
+   git commit -m base 
+   git --bare init $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
+   git push $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git branch1 
+   git --git-dir=$HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
repack -d 
+   git checkout -b branch2 branch1 
+   echo b2 file 
+   git commit -a -m b2 
+   git push $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git branch2 
+   git --git-dir=$HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
repack -d 
+   git --bare init clone_packed_branches.git 
+   git --git-dir=clone_packed_branches.git fetch 
$HTTPD_URL/dumb/repo_packed_branches.git branch1:branch1 
+   git --git-dir=clone_packed_branches.git fetch 
$HTTPD_URL/dumb/repo_packed_branches.git branch2:branch2
+'
+
 test_expect_success 'did not use upload-pack service' '
grep '/git-upload-pack' $HTTPD_ROOT_PATH/access.log act
: exp
-- 
2.3.0.rc1.287.g761fd19

--
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] test-lib.sh: Dynamic test for the prerequisite SANITY

2015-01-27 Thread Junio C Hamano
Torsten Bögershausen tbo...@web.de writes:

  # When the tests are run as root, permission tests will report that
  # things are writable when they shouldn't be.

This no longer is relevant, I think.

 +# Special check for CYGWIN (or Windows in general):

Misleading comment in the end result, as your new test drops SANITY
correctly on POSIX for the root user, too.  In a commit log message
it is correct to say This adds special check for Cygwin, but the
resulting code is sensible with or without Cygwin, I would think,
with the justification to test by checking what we really want, not
by inferring from the result of indirectly testing something else.

 +# A file can be deleted, even if the containing directory does'nt
 +# have write permissions

We also rely on SANITY to make sure that chmod -rx directory makes
directory/file undiscoverable.

How about extending it like this (not tested)?

-- 8 --
From: Torsten Bögershausen tbo...@web.de
Date: Tue, 27 Jan 2015 16:39:01 +0100
Subject: [PATCH] test-lib.sh: set prerequisite SANITY by testing what we really 
need

What we wanted out of the SANITY precondition is that the filesystem
behaves sensibly with permission bits settings.

 - You should not be able to remove a file in a read-only directory,

 - You should not be able to tell if a file in a directory exists if
   the directory lacks read or execute permission bits.

We used to cheat by approximating that condition with is the /
writable? test and/or are we running as root? test.  Neither test
is sufficient or appropriate in more exotic environments like
Cygwin.

Signed-off-by: Torsten Bögershausen tbo...@web.de
Signed-off-by: Junio C Hamano gits...@pobox.com
---
 t/test-lib.sh | 25 ++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/t/test-lib.sh b/t/test-lib.sh
index b2b2ec7..446d8d5 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -997,9 +997,28 @@ test_lazy_prereq NOT_ROOT '
test $uid != 0
 '
 
-# When the tests are run as root, permission tests will report that
-# things are writable when they shouldn't be.
-test -w / || test_set_prereq SANITY
+# On a filesystem that lacks SANITY, a file can be deleted even if
+# the containing directory doesn't have write permissions, or a file
+# can be accessed even if the containing directory doesn't have read
+# or execute permissions, causing our tests that validate that Git
+# works sensibly in such situations.
+test_lazy_prereq SANITY '
+   mkdir SANETESTD.1 SANETESTD.2 
+
+   chmod +w SANETESTD.1 SANETESTD.2 
+   SANETESTD.1/x 2SANETESTD.2/x 
+   chmod -w SANETESTD.1 
+   chmod -rx SANETESTD.2 ||
+   error bug in test sript: cannot prepare SANETESTD
+
+   ! rm SANETESTD.1/x  ! test -f SANETESTD.2/x
+   status=$?
+
+   chmod +rwx SANETESTD.1 SANETESTD.2 
+   rm -rf SANETESTD.1 SANETESTD.2 ||
+   error bug in test sript: cannot clean SANETESTD
+   return $status
+'
 
 GIT_UNZIP=${GIT_UNZIP:-unzip}
 test_lazy_prereq UNZIP '
-- 
2.3.0-rc1-180-g1a69fe5

--
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 2015, #05; Tue, 27)

2015-01-27 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'.

Hopefully final release candidate 2.3-rc2 has been tagged.  Please
spend some time to find and fix regressions, instead of spending all
time having fun with new and shiny toys.  The final hopefully will
happen sometime next week.

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

--
[Graduated to master]

* ak/cat-file-clean-up (2015-01-13) 1 commit
  (merged to 'next' on 2015-01-15 at bb1a4b3)
 + cat-file: use type and size from outer scope


* js/t1050 (2015-01-14) 1 commit
  (merged to 'next' on 2015-01-15 at f010b00)
 + t1050-large: generate large files without dd

--
[New Topics]

* jc/apply-ws-fix-expands-report (2015-01-22) 1 commit
 - apply: detect and mark whitespace errors in context lines when fixing
 (this branch uses jc/apply-ws-fix-expands.)

 git apply --whitespace=fix fixed whitespace errors in the common
 context lines but did so without reporting.

 Will merge to 'next'.


* ks/rebase-i-abbrev (2015-01-22) 1 commit
 - rebase -i: use full object name internally throughout the script

 The insn sheet git rebase -i creates did not fully honor
 core.abbrev settings.

 Will merge to 'next'.


* mh/deref-symref-over-helper-transport (2015-01-21) 1 commit
 - transport-helper: do not request symbolic refs to remote helpers

 git fetch over a remote-helper that cannot respond to list
 command could not fetch from a symbolic reference e.g. HEAD.

 Will merge to 'next'.


* ak/add-i-empty-candidates (2015-01-22) 1 commit
 - add -i: return from list_and_choose if there is no candidate

 The interactive show a list and let the user choose from it
 interface add -i used showed and prompted to the user even when
 the candidate list was empty, against which the only choice the
 user could have made was to choose nothing.

 Will merge to 'next'.


* av/wincred-with-at-in-username-fix (2015-01-25) 1 commit
 - wincred: fix get credential if username has @

 Will merge to 'next'.


* jc/conf-var-doc (2015-01-27) 3 commits
 - CodingGuidelines: describe naming rules for configuration variables
 - config.txt: mark deprecated variables more prominently
 - config.txt: clarify that add.ignore-errors as deprecated

 Need to send this out for review before doing anything to it.


* jc/doc-log-rev-list-options (2015-01-23) 1 commit
 - Documentation: what does git log --indexed-objects even mean?

 Will merge to 'next'.


* jk/dumb-http-idx-fetch-fix (2015-01-27) 1 commit
 - dumb-http: do not pass NULL path to parse_pack_index

 Will merge to 'next'.


* ld/p4-submit-hint (2015-01-23) 1 commit
  (merged to 'next' on 2015-01-23 at ed972d3)
 + git-p4: correct --prepare-p4-only instructions

 Will merge to 'master' after 2.3 final.


* mg/commit-author-no-match-malformed-message (2015-01-26) 1 commit
 - commit: reword --author error message

 Will merge to 'next'.


* mg/push-repo-option-doc (2015-01-27) 1 commit
 - git-push.txt: document the behavior of --repo

 Will merge to 'next'.


--
[Stalled]

* jn/doc-api-errors (2014-12-04) 1 commit
 - doc: document error handling functions and conventions

 For discussion.


* pw/remote-set-url-fetch (2014-11-26) 1 commit
 - remote: add --fetch and --both options to set-url

 Expecting a reroll.


* ms/submodule-update-config-doc (2014-11-03) 1 commit
 - submodule: clarify documentation for update subcommand

 Needs a reroll ($gmane/259037).


* je/quiltimport-no-fuzz (2014-10-21) 2 commits
 - git-quiltimport: flip the default not to allow fuzz
 - git-quiltimport.sh: allow declining fuzz with --exact option

 quiltimport drove git apply always with -C1 option to reduce
 context of the patch in order to give more chance to somewhat stale
 patches to apply.  Add an --exact option to disable, and also
 -C$n option to customize this behaviour.  The top patch
 optionally flips the default to --exact.

 Tired of waiting for an Ack; will discard.


* tr/remerge-diff (2014-11-10) 9 commits
 - t4213: avoid | in sed regexp
 - log --remerge-diff: show what the conflict resolution changed
 - name-hash: allow dir hashing even when !ignore_case
 - merge-recursive: allow storing conflict hunks in index
 - merge_diff_mode: fold all merge diff variants into an enum
 - combine-diff: do not pass revs-dense_combined_merges redundantly
 - merge-recursive: -Xindex-only to leave worktree unchanged
 - merge-recursive: internal flag to avoid touching the worktree
 - merge-recursive: remove dead conditional in update_stages()

 log -p output learns a new way to let users inspect a merge
 commit by showing the differences between the automerged result
 with conflicts the person who recorded the 

Re: implement a stable 'Last updated' in Documentation

2015-01-27 Thread Olaf Hering
On Mon, Jan 26, Olaf Hering wrote:

 Several files in Documentation have an unstable 'Last updated' timestamp. The
 reason is that their mtime changes every time, which prevents reproducible
 builds.
 
 341 technical/api-index.txt: technical/api-index-skel.txt \
 342 technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
 343 $(QUIET_GEN)cd technical  '$(SHELL_PATH_SQ)' ./api-index.sh
 
 388 howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
 389 $(QUIET_GEN)$(RM) $@+ $@  \
 390 '$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard 
 howto/*.txt)) $@+  \
 391 mv $@+ $@
 
 399 $(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
 400 $(QUIET_ASCIIDOC)$(RM) $@+ $@  \
 401 sed -e '1,/^$$/d' $ | \
 402 $(TXT_TO_HTML) - $@+  \
 403 mv $@+ $@
 
 What file timestamp should be used for them? Likely ../version?
 The final file, before passing it to asciidoc, should get a fixed timestamp
 with 'touch -r $reference_file $file'.

I came up with this change. If anything happens to depend on
howto-index.txt and technical/api-index.txt then this part needs rework.

diff --git a/Documentation/Makefile b/Documentation/Makefile
index 3e39e28..25ad0bd 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -6,6 +6,7 @@ TECH_DOCS =
 ARTICLES =
 SP_ARTICLES =
 OBSOLETE_HTML =
+TIMESTAMP_FILE = ../version
 
 MAN1_TXT += $(filter-out \
$(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
@@ -341,6 +342,7 @@ user-manual.xml: user-manual.txt user-manual.conf
 technical/api-index.txt: technical/api-index-skel.txt \
technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
$(QUIET_GEN)cd technical  '$(SHELL_PATH_SQ)' ./api-index.sh
+   touch -r '$(TIMESTAMP_FILE)' $@
 
 technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
 $(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : 
%.txt asciidoc.conf
@@ -388,6 +390,7 @@ $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
 howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
$(QUIET_GEN)$(RM) $@+ $@  \
'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard howto/*.txt)) 
$@+  \
+   touch -r '$(TIMESTAMP_FILE)' $@+  \
mv $@+ $@
 
 $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt
@@ -397,9 +400,12 @@ WEBDOC_DEST = /pub/software/scm/git/docs
 
 howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
 $(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
-   $(QUIET_ASCIIDOC)$(RM) $@+ $@  \
-   sed -e '1,/^$$/d' $ | \
-   $(TXT_TO_HTML) - $@+  \
+   $(QUIET_ASCIIDOC)$(RM) $@++ $@+ $@  \
+   sed -e '1,/^$$/d' $ $@++  \
+   touch -r '$(TIMESTAMP_FILE)' $@++  \
+   $(TXT_TO_HTML) -o $@+ $@++  \
+   $(RM) $@++  \
+   touch $@+  \
mv $@+ $@
 
 install-webdoc : html

Olaf
--
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 21/21] t3080: tests for git-list-files

2015-01-27 Thread Michael Blume
Test 3 is failing on my mac:

expecting success:
test_config color.ls.file red 
test_config color.ls.directory green 
test_config color.ls.submodule yellow 
git list-files --color=always actual 
test_cmp $TEST_DIRECTORY/t3080/color_ls actual

--- /Users/michael.blume/workspace/git/t/t3080/color_ls 2015-01-28
04:40:23.0 +
+++ actual 2015-01-28 04:42:59.0 +
@@ -1,3 +1,3 @@
-dir
-file
-gitlink
+dir
+file
+gitlink
not ok 3 - color.ls.*
#
# test_config color.ls.file red 
# test_config color.ls.directory green 
# test_config color.ls.submodule yellow 
# git list-files --color=always actual 
# test_cmp $TEST_DIRECTORY/t3080/color_ls actual
#

On Sun, Jan 25, 2015 at 11:20 AM, Eric Sunshine sunsh...@sunshineco.com wrote:
 On Sun, Jan 25, 2015 at 7:37 AM, Nguyễn Thái Ngọc Duy pclo...@gmail.com 
 wrote:
 Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
 ---
 diff --git a/t/t3080-list-files.sh b/t/t3080-list-files.sh
 new file mode 100755
 index 000..6313dd9
 --- /dev/null
 +++ b/t/t3080-list-files.sh
 +test_expect_success 'no dups' '
 +   echo dirty file 

 To leave a clean slate for subsequent tests, would it make sense to
 restore 'file' to a clean state via test_when_finished()?

 +   git list-files -m file actual 
 +   echo file expected 
 +   test_cmp expected actual 
 +   git list-files -cm file actual 
 +   echo C file expected 
 +   test_cmp expected actual 
 +   git list-files -tcm file actual 
 +   test_cmp expected actual
 +'
 +
 +test_expect_success 'diff-cached' '
 +   echo dirty file 
 +   git add file 

 Ditto here?

 +   git list-files -M actual 
 +   echo file expected 
 +   test_cmp expected actual
 +'
 --
 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


[PATCH] git-p4: correct exclude change

2015-01-27 Thread Luke Diamand
The previous change for excluding paths in the sync
subcommand was incorrect, missing a comma, preventing
git-p4 from working.

Signed-off-by: Luke Diamand l...@diamand.org
---
 git-p4.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/git-p4.py b/git-p4.py
index 6ff0b76..549022e 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1915,7 +1915,7 @@ class P4Sync(Command, P4UserMap):
 optparse.make_option(--keep-path, dest=keepRepoPath, 
action='store_true',
  help=Keep entire BRANCH/DIR/SUBDIR 
prefix during import),
 optparse.make_option(--use-client-spec, 
dest=useClientSpec, action='store_true',
- help=Only sync files that are included 
in the Perforce Client Spec)
+ help=Only sync files that are included 
in the Perforce Client Spec),
 optparse.make_option(-/, dest=cloneExclude,
  action=append, type=string,
  help=exclude depot path),
-- 
2.3.0.rc2.188.g4b64765.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


Score in diff-format

2015-01-27 Thread Mike Hommey
Hi,

diff-format.txt says this:

  An output line is formatted this way:
  (snip)

  That is, from the left to the right:

  (snip)
  . status, followed by optional score number.

  (snip)
  Status letters C and R are always followed by a score (denoting the
  percentage of similarity between the source and target of the move or
  copy), and are the only ones to be so.

As I read this last paragraph, the following is not supposed to happen:
$ git diff-tree 926b1ec63ee045503f609e88ca445b94c06bd5d7 --abbrev -r -C -B
926b1ec63ee045503f609e88ca445b94c06bd5d7
:100644 100644 81ac702... 7ab0cf4... M087   contrib/subtree/INSTALL

It however makes sense that it happens, and it looks like a case of the
documentation being outdated or confusing. Or am I interpreting it wrong?

Cheers,

Mike
--
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] Correction to git-p4 exclude change

2015-01-27 Thread Luke Diamand
My previous change for adding support for exclude to git-p4 sync
was incorrect, missing out a comma, which stopped git-p4 from working.
This change fixes that.

I've also noticed that t9814-git-p4-rename.sh has stopped working; I'm
going to follow up with a fix for that once I've worked out what's
wrong with it. There's a small shell syntax problem (missing esac)
but after fixing that it still fails, so I'm not sure what's happening
yet. It was discussed a while back.

Luke Diamand (1):
  git-p4: correct exclude change

 git-p4.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.3.0.rc2.188.g4b64765.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] http: Add Accept-Language header if possible

2015-01-27 Thread Junio C Hamano
On Tue, Jan 27, 2015 at 3:34 PM, Junio C Hamano gits...@pobox.com wrote:
 Yi EungJun semtlen...@gmail.com writes:

 +
 + sprintf(q_format, ;q=0.%%0%dd, decimal_places);
 +
 + strbuf_addstr(buf, Accept-Language: );
 +
 + for(i = 0; i  num_langs; i++) {
 + if (i  0)
 + strbuf_addstr(buf, , );
 +
 + strbuf_addstr(buf, strbuf_detach(language_tags[i], 
 NULL));

 This is not wrong per-se, but it looks somewhat convoluted to me.
 ...

Actually, this is wrong, isn't it?

strbuf_detach() removes the language_tags[i].buf from the strbuf,
and the caller now owns that piece of memory. Then strbuf_addstr()
appends a copy of that string to buf, and the piece of memory
that was originally held by language_tags[i].buf is now lost forever.

This is leaking.

 + /* free language tags */
 + for(i = 0; i  num_langs; i++) {
 + strbuf_release(language_tags[i]);
 + }

... because this loop does not free memory for earlier parts of language_tags[].

 I am wondering if using strbuf for each of the language_tags[] is
 even necessary.  How about doing it this way instead?

And I think my counter-proposal does not leak (as it does not us strbuf for
language_tags[] anymore).


  http.c | 22 +-
  1 file changed, 9 insertions(+), 13 deletions(-)

 diff --git a/http.c b/http.c
 index 6111c6a..db591b3 100644
 --- a/http.c
 +++ b/http.c
 @@ -1027,7 +1027,7 @@ static void write_accept_language(struct strbuf *buf)
 const int MAX_DECIMAL_PLACES = 3;
 const int MAX_LANGUAGE_TAGS = 1000;
 const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000;
 -   struct strbuf *language_tags = NULL;
 +   char **language_tags = NULL;
 int num_langs = 0;
 const char *s = get_preferred_languages();
 int i;
 @@ -1053,9 +1053,7 @@ static void write_accept_language(struct strbuf *buf)
 if (tag.len) {
 num_langs++;
 REALLOC_ARRAY(language_tags, num_langs);
 -   strbuf_init(language_tags[num_langs - 1], 0);
 -   strbuf_swap(tag, language_tags[num_langs - 1]);
 -
 +   language_tags[num_langs - 1] = strbuf_detach(tag, 
 NULL);
 if (num_langs = MAX_LANGUAGE_TAGS - 1) /* -1 for '*' 
 */
 break;
 }
 @@ -1070,13 +1068,12 @@ static void write_accept_language(struct strbuf *buf)

 /* add '*' */
 REALLOC_ARRAY(language_tags, num_langs + 1);
 -   strbuf_init(language_tags[num_langs], 0);
 -   strbuf_addstr(language_tags[num_langs++], *);
 +   language_tags[num_langs++] = *; /* it's OK; this won't be 
 freed */

 /* compute decimal_places */
 for (max_q = 1, decimal_places = 0;
 -   max_q  num_langs  decimal_places = 
 MAX_DECIMAL_PLACES;
 -   decimal_places++, max_q *= 10)
 +max_q  num_langs  decimal_places = 
 MAX_DECIMAL_PLACES;
 +decimal_places++, max_q *= 10)
 ;

 sprintf(q_format, ;q=0.%%0%dd, decimal_places);
 @@ -1087,7 +1084,7 @@ static void write_accept_language(struct strbuf *buf)
 if (i  0)
 strbuf_addstr(buf, , );

 -   strbuf_addstr(buf, strbuf_detach(language_tags[i], 
 NULL));
 +   strbuf_addstr(buf, language_tags[i]);

 if (i  0)
 strbuf_addf(buf, q_format, max_q - i);
 @@ -1101,10 +1098,9 @@ static void write_accept_language(struct strbuf *buf)
 }
 }

 -   /* free language tags */
 -   for(i = 0; i  num_langs; i++) {
 -   strbuf_release(language_tags[i]);
 -   }
 +   /* free language tags -- last one is a static '*' */
 +   for(i = 0; i  num_langs - 1; i++)
 +   free(language_tags[i]);
 free(language_tags);
  }

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


[PATCH 2/2] test-lib.sh: Dynamic test for the prerequisite SANITY

2015-01-27 Thread Torsten Bögershausen
The SANITY precondition was not set when running as root,
but this is not 100% reliable for CYGWIN:

A file may be allowed to be deleted when the containing
directory does not have write permissions.

See
https://technet.microsoft.com/en-us/library/bb463216.aspx
...In UNIX, the write permission bit on a directory permits both
the creation and removal of new files or sub-directories in the directory.
On Windows, the Write_Data access right controls the creation of new
sub-files and the Delete_Child access right controls the deletion. 

We may argue that the translation of the POSIX write permission bit
into Windows access rights can be improved in CYGWIN.

A dynamic test handles all cases: when the sequence
$ mkdir SANETESTD 
$ chmod +w SANETESTD 
$ SANETESTD/x 
$ ! rm SANETESTD/x
succeeds the prerequisite SANITY is true.

Helped-by: Junio C Hamano gits...@pobox.com
Signed-off-by: Torsten Bögershausen tbo...@web.de
---
 t/test-lib.sh | 17 -
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/t/test-lib.sh b/t/test-lib.sh
index 93f7cad..887e986 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1038,8 +1038,23 @@ test_lazy_prereq NOT_ROOT '
 
 # When the tests are run as root, permission tests will report that
 # things are writable when they shouldn't be.
+# Special check for CYGWIN (or Windows in general):
+# A file can be deleted, even if the containing directory does'nt
+# have write permissions
 test_lazy_prereq SANITY '
-   test_have_prereq POSIXPERM,NOT_ROOT
+   mkdir SANETESTD 
+   chmod +w SANETESTD 
+   SANETESTD/x 
+   chmod -w SANETESTD ||
+   error bug in test sript: cannot prepare SANETESTD
+
+   ! rm SANETESTD/x
+   status=$?
+
+   chmod +w SANETESTD 
+   rm -rf SANETESTD ||
+   error bug in test sript: cannot clean SANETESTD
+   return $status
 '
 
 GIT_UNZIP=${GIT_UNZIP:-unzip}
-- 
2.2.0.rc1.26.g3e3a70d

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


[PATCH 1/2] t2026 needs procondition SANITY

2015-01-27 Thread Torsten Bögershausen
When running t0026 as root 'prune directories with unreadable gitdir' fails.
Skip this test if SANITY is not set (the use of POSIXPERM is wrong here)

Signed-off-by: Torsten Bögershausen tbo...@web.de
---

Here is the promised patch, on top of pu:

The fix of t0026 is unrelated to all other patches, I think.

The advantage of the series is that it has been tested
on CYGWIN/MINGW/Mac/Linux/root@Mac, root@Linux,
the disadvantage may be that the commit message may need
improvements.


 t/t2026-prune-linked-checkouts.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/t/t2026-prune-linked-checkouts.sh 
b/t/t2026-prune-linked-checkouts.sh
index 170aefe..2936d52 100755
--- a/t/t2026-prune-linked-checkouts.sh
+++ b/t/t2026-prune-linked-checkouts.sh
@@ -33,7 +33,7 @@ EOF
! test -d .git/worktrees
 '
 
-test_expect_success POSIXPERM 'prune directories with unreadable gitdir' '
+test_expect_success SANITY 'prune directories with unreadable gitdir' '
mkdir -p .git/worktrees/def/abc 
: .git/worktrees/def/def 
: .git/worktrees/def/gitdir 
-- 
2.2.0.rc1.26.g3e3a70d


--
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-push.txt: document the behavior of --repo

2015-01-27 Thread Michael J Gruber
As per the code, the --repo repo option is equivalent to the repo
argument to 'git push'. [It exists for historical reasons, back from the time
when options had to come before arguments.]

Say so. [But not that.]

Signed-off-by: Michael J Gruber g...@drmicha.warpmail.net
---
Thanks for digging up the thread, Junio. I never would have thought that
I had been with the Git community for that long already...

 Documentation/git-push.txt | 18 ++
 1 file changed, 2 insertions(+), 16 deletions(-)

diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index ea97576..0ad31c4 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -219,22 +219,8 @@ origin +master` to force a push to the `master` branch). 
See the
 `refspec...` section above for details.
 
 --repo=repository::
-   This option is only relevant if no repository argument is
-   passed in the invocation. In this case, 'git push' derives the
-   remote name from the current branch: If it tracks a remote
-   branch, then that remote repository is pushed to. Otherwise,
-   the name origin is used. For this latter case, this option
-   can be used to override the name origin. In other words,
-   the difference between these two commands
-+
---
-git push public #1
-git push --repo=public  #2
---
-+
-is that #1 always pushes to public whereas #2 pushes to public
-only if the current branch does not track a remote branch. This is
-useful if you write an alias or script around 'git push'.
+   This option is equivalent to the repository argument; the latter
+   wins if both are specified.
 
 -u::
 --set-upstream::
-- 
2.3.0.rc1.222.gae238f2

--
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] Add failing test for fetching from multiple packs over dumb httpd

2015-01-27 Thread Charles Bailey
From: Charles Bailey cbaile...@bloomberg.net

When objects are spread across multiple packs, if an initial fetch does
require all pack files, a subsequent fetch for objects in packs not
retrieved in the initial fetch will fail.
---

I'm not very familiar with the http client code so this analysis is based
purely on observed behaviour.

When fetching only some refs from a repository served over dumb httpd Git
appears to download all of the index files for the available packs but then
only chooses the pack files that help it resolve the objects which we need.

If we then later try to fetch an object which is in a pack file for
which Git has previously downloaded an index file, it seems to trip because it
believes it already has the object locally due to the presence of the index
file but doesn't actually have it because it never retrieved the corresponding
pack file. It reports an error of the form Cannot obtain needed object 

Manually deleting index files which have no corresponding local pack
file will allow a repeat of the failed fetch to succeed.

 t/t5550-http-fetch-dumb.sh | 18 ++
 1 file changed, 18 insertions(+)

diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
index ac71418..cf2362a 100755
--- a/t/t5550-http-fetch-dumb.sh
+++ b/t/t5550-http-fetch-dumb.sh
@@ -165,6 +165,24 @@ test_expect_success 'fetch notices corrupt idx' '
)
 '
 
+test_expect_failure 'fetch packed branches' '
+   git checkout --orphan branch1 
+   echo base file 
+   git add file 
+   git commit -m base 
+   git --bare init $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
+   git push $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git branch1 
+   git --git-dir=$HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
repack -d 
+   git checkout -b branch2 branch1 
+   echo b2 file 
+   git commit -a -m b2 
+   git push $HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git branch2 
+   git --git-dir=$HTTPD_DOCUMENT_ROOT_PATH/repo_packed_branches.git 
repack -d 
+   git --bare init clone_packed_branches.git 
+   git --git-dir=clone_packed_branches.git fetch 
$HTTPD_URL/dumb/repo_packed_branches.git branch1:branch1 
+   git --git-dir=clone_packed_branches.git fetch 
$HTTPD_URL/dumb/repo_packed_branches.git branch2:branch2
+'
+
 test_expect_success 'did not use upload-pack service' '
grep '/git-upload-pack' $HTTPD_ROOT_PATH/access.log act
: exp
-- 
2.0.2.611.g8c85416

--
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.7.3 no longer applies relative symbolic link patches

2015-01-27 Thread Andreas Gruenbacher
On Mon, 26 Jan 2015 12:44:33 -0800, Linus Torvalds wrote:
 I've considered that for a while already, because patch _does_ kind of
 understand them these days, although I think it gets the cross-rename
 case wrong because it fundamentally works on a file-by-file basis.

Patch handles cross-renames correctly nowadays; if not, it's a bug.

That's not enough to solve the symlink problem unfortunately.

Andreas

--
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] INSTALL: minor typo fix

2015-01-27 Thread Alexander Kuleshov
Signed-off-by: Alexander Kuleshov kuleshovm...@gmail.com
---
 INSTALL | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/INSTALL b/INSTALL
index ffb071e..6f1c3d5 100644
--- a/INSTALL
+++ b/INSTALL
@@ -53,7 +53,7 @@ or
 
 As a caveat: a profile-optimized build takes a *lot* longer since the
 git tree must be built twice, and in order for the profiling
-measurements to work properly, ccache must be disabled and the test
+measurements to work properly, cache must be disabled and the test
 suite has to be run using only a single CPU.  In addition, the profile
 feedback build stage currently generates a lot of additional compiler
 warnings.
-- 
2.3.0-rc1

--
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 v8 0/1] http: Add Accept-Language header if possible

2015-01-27 Thread Yi EungJun
From: Yi EungJun eungjun...@navercorp.com

Change since v7

From Torsten Bögershausen's review:

* remove unnecessary if-statement

From Eric Sunshine's review:

* fix memory leaks and uninitialized variables
* remove unnecessary if-statement

From Junio C Hamano's review:

* fix uninitialized variables

Yi EungJun (1):
  http: Add Accept-Language header if possible

 http.c | 151 +
 remote-curl.c  |   2 +
 t/t5550-http-fetch-dumb.sh |  42 +
 3 files changed, 195 insertions(+)

-- 
2.3.0.rc1.32.ga3df1c7

--
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] http: Add Accept-Language header if possible

2015-01-27 Thread Yi EungJun
From: Yi EungJun eungjun...@navercorp.com

Add an Accept-Language header which indicates the user's preferred
languages defined by $LANGUAGE, $LC_ALL, $LC_MESSAGES and $LANG.

Examples:
  LANGUAGE= - 
  LANGUAGE=ko:en - Accept-Language: ko, en;q=0.9, *;q=0.1
  LANGUAGE=ko LANG=en_US.UTF-8 - Accept-Language: ko, *;q=0.1
  LANGUAGE= LANG=en_US.UTF-8 - Accept-Language: en-US, *;q=0.1

This gives git servers a chance to display remote error messages in
the user's preferred language.

Limit the number of languages to 1,000 because q-value must not be
smaller than 0.001, and limit the length of Accept-Language header to
4,000 bytes for some HTTP servers which cannot accept such long header.

Signed-off-by: Yi EungJun eungjun...@navercorp.com
---
 http.c | 151 +
 remote-curl.c  |   2 +
 t/t5550-http-fetch-dumb.sh |  42 +
 3 files changed, 195 insertions(+)

diff --git a/http.c b/http.c
index 040f362..6111c6a 100644
--- a/http.c
+++ b/http.c
@@ -68,6 +68,8 @@ static struct curl_slist *no_pragma_header;
 
 static struct active_request_slot *active_queue_head;
 
+static char *cached_accept_language;
+
 size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
 {
size_t size = eltsize * nmemb;
@@ -515,6 +517,9 @@ void http_cleanup(void)
cert_auth.password = NULL;
}
ssl_cert_password_required = 0;
+
+   free(cached_accept_language);
+   cached_accept_language = NULL;
 }
 
 struct active_request_slot *get_active_slot(void)
@@ -986,6 +991,146 @@ static void extract_content_type(struct strbuf *raw, 
struct strbuf *type,
strbuf_addstr(charset, ISO-8859-1);
 }
 
+/*
+ * Guess the user's preferred languages from the value in LANGUAGE environment
+ * variable and LC_MESSAGES locale category if NO_GETTEXT is not defined.
+ *
+ * The result can be a colon-separated list like ko:ja:en.
+ */
+static const char *get_preferred_languages(void)
+{
+   const char *retval;
+
+   retval = getenv(LANGUAGE);
+   if (retval  *retval)
+   return retval;
+
+#ifndef NO_GETTEXT
+   retval = setlocale(LC_MESSAGES, NULL);
+   if (retval  *retval 
+   strcmp(retval, C) 
+   strcmp(retval, POSIX))
+   return retval;
+#endif
+
+   return NULL;
+}
+
+static void write_accept_language(struct strbuf *buf)
+{
+   /*
+* MAX_DECIMAL_PLACES must not be larger than 3. If it is larger than
+* that, q-value will be smaller than 0.001, the minimum q-value the
+* HTTP specification allows. See
+* http://tools.ietf.org/html/rfc7231#section-5.3.1 for q-value.
+*/
+   const int MAX_DECIMAL_PLACES = 3;
+   const int MAX_LANGUAGE_TAGS = 1000;
+   const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000;
+   struct strbuf *language_tags = NULL;
+   int num_langs = 0;
+   const char *s = get_preferred_languages();
+   int i;
+   struct strbuf tag = STRBUF_INIT;
+
+   /* Don't add Accept-Language header if no language is preferred. */
+   if (!s)
+   return;
+
+   /*
+* Split the colon-separated string of preferred languages into
+* language_tags array.
+*/
+   do {
+   /* collect language tag */
+   for (; *s  (isalnum(*s) || *s == '_'); s++)
+   strbuf_addch(tag, *s == '_' ? '-' : *s);
+
+   /* skip .codeset, @modifier and any other unnecessary parts */
+   while (*s  *s != ':')
+   s++;
+
+   if (tag.len) {
+   num_langs++;
+   REALLOC_ARRAY(language_tags, num_langs);
+   strbuf_init(language_tags[num_langs - 1], 0);
+   strbuf_swap(tag, language_tags[num_langs - 1]);
+
+   if (num_langs = MAX_LANGUAGE_TAGS - 1) /* -1 for '*' */
+   break;
+   }
+   } while (*s++);
+
+   /* write Accept-Language header into buf */
+   if (num_langs = 1) {
+   int last_buf_len = 0;
+   int max_q;
+   int decimal_places;
+   char q_format[32];
+
+   /* add '*' */
+   REALLOC_ARRAY(language_tags, num_langs + 1);
+   strbuf_init(language_tags[num_langs], 0);
+   strbuf_addstr(language_tags[num_langs++], *);
+
+   /* compute decimal_places */
+   for (max_q = 1, decimal_places = 0;
+   max_q  num_langs  decimal_places = 
MAX_DECIMAL_PLACES;
+   decimal_places++, max_q *= 10)
+   ;
+
+   sprintf(q_format, ;q=0.%%0%dd, decimal_places);
+
+   strbuf_addstr(buf, Accept-Language: );
+
+   for(i = 0; i  num_langs; i++) {
+   if (i  0)
+  

Re: [PATCH] INSTALL: minor typo fix

2015-01-27 Thread Chris Packham
On Wed, Jan 28, 2015 at 6:09 AM, Chris Packham judge.pack...@gmail.com wrote:
 Hi Alexander

 On Wed, Jan 28, 2015 at 5:15 AM, Alexander Kuleshov
 kuleshovm...@gmail.com wrote:
 Signed-off-by: Alexander Kuleshov kuleshovm...@gmail.com
 ---
  INSTALL | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/INSTALL b/INSTALL
 index ffb071e..6f1c3d5 100644
 --- a/INSTALL
 +++ b/INSTALL
 @@ -53,7 +53,7 @@ or

  As a caveat: a profile-optimized build takes a *lot* longer since the
  git tree must be built twice, and in order for the profiling
 -measurements to work properly, ccache must be disabled and the test
 +measurements to work properly, cache must be disabled and the test
  suite has to be run using only a single CPU.  In addition, the profile
  feedback build stage currently generates a lot of additional compiler
  warnings.
 --

 That's not a typo ccache[1] is a compiler cache tool that can be used
 to speed up rebuilding object files. I don't know anything about the
 profile enabled builds but I imagine it has something to do with
 needing the 2nd build to produce difference object files from the

s/difference/different/

 first (with ccache enabled I imagine the 2nd build would result in
 identical output since on source files are changed between builds).

 --
 [1] - https://ccache.samba.org/

The commit that added that note f2d713fc[1] has a bit more of an
explanation of why profile enabled builds and ccache are incompatible.

[1] - https://github.com/git/git/commit/f2d713fc3e8e0b7be89584f04b421808aa99c403
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] git-new-workdir: support submodules

2015-01-27 Thread Jens Lehmann

Am 26.01.2015 um 06:39 schrieb Junio C Hamano:

Craig Silverstein csilv...@khanacademy.org writes:


This patch, in adding submodule support, I expect would be
similarly useful to people even though it, also, imposes those
same constraints to the submodule's config files.


I would expect that you would see exactly the same issue with Duy's
multiple work tree series.  This is not limited to new-workdir.

The right way to look at this is to fix what git submodule does;
its use of config that is shared across branches is the root cause
of the trouble.  No other part of Git keeps data that needs to be
per-branch (or more specifically tied to the working tree state)
in .git/config in such a way that leaving it stale when the working
tree state changes breaks the system.


I'm not sure what submodule config shared across branches you are
referring to here, the only two things that submodules by default
store in .git/config are the url (to mark the submodule initialized)
and the update setting (which I believe should be copied there in
the first place, but changing that in a correct and backwards
compatible would take some effort). This means you'll init (or
deinit) a submodule in all multiple worktrees at the same time, but
having the url setting in .git/config is a feature, not a bug.

And if you are talking about the core.worktree setting in
.git/modules/submodule_name/config, I proposed way to get rid of
that when we moved the submodule .git directory there (but that
wasn't accepted):

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

Additionally I suspect submodules are just the first to suffer,
other worktree specific config (like e.g. EOL settings) affecting
all multiple worktrees at the same time when changed in a single
worktree might easily confuse other users too.


One way to do so might be to move the bits it stores in the config
file to somewhere else that is more closely tied to the checkout
state and handle that similar to .git/index and .git/HEAD when it
comes to multiple work-trees.


Yup, the idea of separating config entries into worktree and repo
specific files sounds like the solution for these problems.
--
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: t5539 broken under Mac OS X

2015-01-27 Thread Erik Faye-Lund
On Tue, Jan 27, 2015 at 3:51 AM, Junio C Hamano gits...@pobox.com wrote:
 Erik Faye-Lund kusmab...@gmail.com writes:

 On Fri, Jan 16, 2015 at 1:04 AM, Junio C Hamano gits...@pobox.com wrote:
 Jeff King p...@peff.net writes:

 Exactly. I am happy to submit a patch, but I cannot think of any
 mechanisms besides:

   1. Calling `id`, which I suspect is very not portable.

   2. Writing a C program to check getuid(). That's portable for most
  Unixes. It looks like we already have a hacky wrapper on mingw that
  will always return 1.

 Is (2) too gross?

 Not overly gross compared to some existing test-*.c files, I would
 say.

 I wondered what 'perl -e 'print $' would say in mingw, and if that
 is portable enough, though.

 $ perl -e 'print $'
 500

 Thanks for a follow-up.

 Is id -u not useful over there?  I ask because that is what is
 used in the version tentatively queued on 'pu' for NOT_ROOT
 prerequisite (the jk/sanity topic).

It's pretty much the same thing:

$ id -u
500

 The SANITY prerequisite in that topic needs to be replaced with the
 one from Torsten that attempts to check what we want to know in a
 more direct way; i.e. after making a directory or a file read-only,
 does the filesystem really honours that, or lets us clobber? is
 what we need to know to skip some tests, and we should check that,
 instead of is / writable by us? or are we root?.

$ test -w /  echo yes
yes

$ mkdir foo  chmod a= foo
$ test -w w  echo yes
$ rm -r foo
rm: directory `foo' is write protected; descend into it anyway? n
$ rm -r foo  /dev/null
$ ls -la foo
ls: foo: No such file or directory
$

So, Windows does only kind-of respect read-only flags. Dunno if this
tells you something useful, though.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] INSTALL: minor typo fix

2015-01-27 Thread Chris Packham
Hi Alexander

On Wed, Jan 28, 2015 at 5:15 AM, Alexander Kuleshov
kuleshovm...@gmail.com wrote:
 Signed-off-by: Alexander Kuleshov kuleshovm...@gmail.com
 ---
  INSTALL | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/INSTALL b/INSTALL
 index ffb071e..6f1c3d5 100644
 --- a/INSTALL
 +++ b/INSTALL
 @@ -53,7 +53,7 @@ or

  As a caveat: a profile-optimized build takes a *lot* longer since the
  git tree must be built twice, and in order for the profiling
 -measurements to work properly, ccache must be disabled and the test
 +measurements to work properly, cache must be disabled and the test
  suite has to be run using only a single CPU.  In addition, the profile
  feedback build stage currently generates a lot of additional compiler
  warnings.
 --

That's not a typo ccache[1] is a compiler cache tool that can be used
to speed up rebuilding object files. I don't know anything about the
profile enabled builds but I imagine it has something to do with
needing the 2nd build to produce difference object files from the
first (with ccache enabled I imagine the 2nd build would result in
identical output since on source files are changed between builds).

--
[1] - https://ccache.samba.org/
--
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] INSTALL: minor typo fix

2015-01-27 Thread Jeff King
On Wed, Jan 28, 2015 at 06:09:52AM +1300, Chris Packham wrote:

 On Wed, Jan 28, 2015 at 5:15 AM, Alexander Kuleshov
 kuleshovm...@gmail.com wrote:
  Signed-off-by: Alexander Kuleshov kuleshovm...@gmail.com
  ---
   INSTALL | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)
 
  diff --git a/INSTALL b/INSTALL
  index ffb071e..6f1c3d5 100644
  --- a/INSTALL
  +++ b/INSTALL
  @@ -53,7 +53,7 @@ or
 
   As a caveat: a profile-optimized build takes a *lot* longer since the
   git tree must be built twice, and in order for the profiling
  -measurements to work properly, ccache must be disabled and the test
  +measurements to work properly, cache must be disabled and the test
   suite has to be run using only a single CPU.  In addition, the profile
   feedback build stage currently generates a lot of additional compiler
   warnings.
  --
 
 That's not a typo ccache[1] is a compiler cache tool that can be used
 to speed up rebuilding object files. I don't know anything about the
 profile enabled builds but I imagine it has something to do with
 needing the 2nd build to produce difference object files from the
 first (with ccache enabled I imagine the 2nd build would result in
 identical output since on source files are changed between builds).

Yes, ccache creates a cache key for each file based on the command line
flags to the compiler, and the output of the pre-processor when run on
the file. The profiling data generated by the first run is outside of
what ccache knows about, so it can't include that information in its
cache key (and consequently, we get false cache hits).

So yeah. Not a typo.

-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