bug report, v1.7.12.1 -- user-manual.xml:3739: parser error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

user-manual.xml:3739: parser error : Opening and ending tag mismatch: emphasis 
line 3739 and literal
  char emphasis role=strong/literal, but is actually expected to be a poin
 ^
user-manual.xml:3741: parser error : Opening and ending tag mismatch: literal 
line 3741 and emphasis
mit.  Note that whenever a SHA-1 is passed as literalunsigned char /emphasis
   ^
unable to parse user-manual.xml
make[1]: *** [user-manual.html] Error 6
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }



--
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, v1.7.12.1 -- user-manual.xml:3739: parser error

2012-09-30 Thread Hugh Esco
Apologies for duplicates.  
Perhaps the patch below will earn me a small bit of leeway.

-- Hugh Esco

doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

user-manual.xml:3739: parser error : Opening and ending tag mismatch: emphasis 
line 3739 and literal
  char emphasis role=strong/literal, but is actually expected to be a poin
 ^
user-manual.xml:3741: parser error : Opening and ending tag mismatch: literal 
line 3741 and emphasis
mit.  Note that whenever a SHA-1 is passed as literalunsigned char /emphasis
   ^
unable to parse user-manual.xml
make[1]: *** [user-manual.html] Error 6
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

--
and the patch which permitted me to proceed
although it removes a malformed emphasis tag
--

3739c3739
   char /literal, but is actually expected to be a pointer to 
literalunsigned
---
   char emphasis role=strong/literal, but is actually expected to be a 
 pointer to literalunsigned

3741c3741
   commit.  Note that whenever a SHA-1 is passed as literalunsigned char 
/literal, it
---
   commit.  Note that whenever a SHA-1 is passed as literalunsigned char 
 /emphasis/literal, it

--

I've encountered another issue with:
Documentation/git-bundle.xml

I will post the details in a distinct message, 
perhaps even with another patch if I can sort this out.

-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }

--
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: bug report, v1.7.12.1 -- user-manual.xml:3739: parser error

2012-09-30 Thread Junio C Hamano
Hugh Esco he...@campaignfoundations.com writes:

 doing a source install of git v1.7.12.1, 
 on the `make all doc` step, I get:

 user-manual.xml:3739: parser error : Opening and ending tag mismatch: 
 emphasis line 3739 and literal
   char emphasis role=strong/literal, but is actually expected to be a 
 poin
  ^
 user-manual.xml:3741: parser error : Opening and ending tag mismatch: literal 
 line 3741 and emphasis
 mit.  Note that whenever a SHA-1 is passed as literalunsigned char 
 /emphasis
   
  ^
 unable to parse user-manual.xml
 make[1]: *** [user-manual.html] Error 6
 make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
 make: *** [doc] Error 2

Thanks for a report.

I and other regulars on the list who run make doc are not getting
that error (otherwise the source wouldn't have tagged as a release),
so there must be some difference between the environments that are
supported and your setting.

As described in the INSTALL document at the top-level of the source
tree, our documentation toolchain has external dependencies on
asciidoc, xmlto, and docbook-xsl among other things.  My quick check
seems indicate that I am using asciidoc 8.5.2-1, xmlto 0.0.23-2, and
docbook-xsl 1.75.2.

What version are you using?  It could be you are using a newer
version of something that is backward incompatible we haven't
encountered (or you could be using a version that is too stale).



--
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, v1.7.12.1 -- Documentation/git-check-ref-format.xml:162: parser error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

xmlto: input does not validate (status 1)
/usr/local/git-git-51993a4/Documentation/git-check-ref-format.xml:162: parser 
error : Opening and ending tag mismatch: emphasis line 162 and literal
megt; is allowed to contain a single literalemphasis role=strong/literal
   ^
/usr/local/git-git-51993a4/Documentation/git-check-ref-format.xml:164: parser 
error : Opening and ending tag mismatch: literal line 164 and emphasis
literalfoo//emphasis/bar/literal but not literalfoo/bar*/litera
^
make[1]: *** [git-check-ref-format.1] Error 1
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

162c162
 enabled, lt;refnamegt; is allowed to contain a single 
literal/literal
---
 enabled, lt;refnamegt; is allowed to contain a single 
 literalemphasis role=strong/literal

164c164
 literalfoo/bar/literal but not literalfoo/bar*/literal).
---
 literalfoo//emphasis/bar/literal but not 
 literalfoo/bar*/literal).

---
Next issue shows up in:
Documentation/git-config.xml
details coming under separate cover.

-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }



--
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, v1.7.12.1 -- Documentation/git-config.xml:643: parser error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

xmlto: input does not validate (status 1)
/usr/local/git-git-51993a4/Documentation/git-config.xml:643: parser error : 
Opening and ending tag mismatch: subscript line 643 and literal
ude.path/literal is subject to tilde expansion: literalsubscript//literal
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:644: parser error : 
Opening and ending tag mismatch: literal line 644 and subscript
is expanded to the value of literal$HOME/literal, and literal/subscriptu
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:1354: parser error : 
Opening and ending tag mismatch: subscript line 1354 and literal
   of files which are not meant to be tracked.  literalsubscript//literal
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:1355: parser error : 
Opening and ending tag mismatch: literal line 1355 and subscript
to the value of literal$HOME/literal and literal/subscriptuser/
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:2304: parser error : 
Opening and ending tag mismatch: subscript line 2304 and literal
literalsubscript//literal is expanded to the value of literal$
^
/usr/local/git-git-51993a4/Documentation/git-config.xml:2304: parser error : 
Opening and ending tag mismatch: literal line 2304 and subscript
 is expanded to the value of literal$HOME/literal and literal/subscript
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4609: parser error : 
Opening and ending tag mismatch: emphasis line 4609 and literal
oes not understand the version 2 literalemphasis role=strong.idx/literal
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4611: parser error : 
Opening and ending tag mismatch: literal line 4611 and emphasis
that will copy both literal/emphasis.pack/literal file and corresponding 
^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4611: parser error : 
Opening and ending tag mismatch: emphasis line 4611 and literal
/literal file and corresponding literalemphasis role=strong.idx/literal
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4613: parser error : 
Opening and ending tag mismatch: literal line 4613 and emphasis
older version of git. If the literal/emphasis.pack/literal file is smaller
 ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4617: parser error : 
Opening and ending tag mismatch: literal line 4617 and emphasis
the literal/emphasis.idx/literal file./simpara
^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4617: parser error : 
Opening and ending tag mismatch: emphasis line 4616 and literal
the literal/emphasis.idx/literal file./simpara
  ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4666: parser error : 
Opening and ending tag mismatch: emphasis line 4666 and literal
ralgit config pretty.changelog format:emphasis role=strong %H %s/literal
   ^
/usr/local/git-git-51993a4/Documentation/git-config.xml:4668: parser error : 
Opening and ending tag mismatch: literal line 4668 and emphasis
   to be equivalent to running literalgit log --pretty=format:/emphasis
   ^
make[1]: *** [git-config.1] Error 1
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

643,644c643,644
 found. The value of literalinclude.path/literal is subject to tilde 
expansion: literal//literal
 is expanded to the value of literal$HOME/literal, and 
literaluser//literal to the specified
---
 found. The value of literalinclude.path/literal is subject to tilde 
 expansion: literalsubscript//literal
 is expanded to the value of literal$HOME/literal, and 
 literal/subscriptuser//literal to the specified
1354,1355c1354,1355
 of files which are not meant to be tracked.  literal//literal 
is expanded
 to the value of literal$HOME/literal and 
literaluser//literal to the specified user's
---
 of files which are not meant to be tracked.  
 literalsubscript//literal is expanded
   

Re: bug report, v1.7.12.1 -- Documentation/git-bundle.xml:130: parser error

2012-09-30 Thread Junio C Hamano
Hugh Esco he...@yourmessagedelivered.com writes:

 doing a source install of git v1.7.12.1, 
 on the `make all doc` step, I get:

 xmlto: input does not validate (status 1)
 /usr/local/git-git-51993a4/Documentation/git-bundle.xml:130: parser error : 
 Opening and ending tag mismatch: subscript line 130 and literal
 such as literalmastersubscript1/literal cannot be packaged, but are 
 perfec
  ^
 /usr/local/git-git-51993a4/Documentation/git-bundle.xml:134: parser error : 
 Opening and ending tag mismatch: literal line 134 and subscript
 specified explicitly (e.g. literal^master/subscript10/literal), or 
 implici
^
 make[1]: *** [git-bundle.1] Error 1
 make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
 make: *** [doc] Error 2

 ---
 and the patch which permitted me to proceed
 ---

 130c130
 such as literalmaster/literalsubscript1/subscript cannot be 
 packaged, but are perfectly suitable for

PLEASE STOP.

git-anything.xml files are _not_ the source files we edit, so
patches to them are not useful for us.

I suspect that a tilde inside literal `` environment is mishandled
in your versions of the documentation toolchain.  Either you would
need to upgrade some tool in the toolchain, or we would need patches
to the source that would look like:

-such as `master~1` cannot be packaged,...
+such as `master{tilde}1` cannot be packaged,...

to work around this problem if the version of the problematic tool
you are using is widespread.
--
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, v1.7.12.1 -- Documentation/git-grep.xml:601: element literal: validity error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

   XMLTO git-grep.1
xmlto: input does not validate (status 3)
/usr/local/git-git-51993a4/Documentation/git-grep.xml:601: element literal: 
validity error : Element emphasis is not declared in literal list of possible 
children
/usr/local/git-git-51993a4/Documentation/git-grep.xml:601: element literal: 
validity error : Element emphasis is not declared in literal list of possible 
children
/usr/local/git-git-51993a4/Documentation/git-grep.xml:612: element literal: 
validity error : Element emphasis is not declared in literal list of possible 
children
Document /usr/local/git-git-51993a4/Documentation/git-grep.xml does not validate
make[1]: *** [git-grep.1] Error 3
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

601c601
 literalgit grep time_t #8212; *.[ch]/literal
---
 literalgit grep emphasistime_t/emphasis #8212; 
emphasis*.[ch]/emphasis/literal
612c612
 literalgit grep -e #define --and \( -e MAX_PATH -e PATH_MAX \)/literal
---
 literalgit grep -e emphasis#define/emphasis --and \( -e MAX_PATH -e 
 PATH_MAX \)/literal

-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }



--
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, v1.7.12.1 -- Documentation/git-remote-helpers.xml:135: element literal: validity error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

XMLTO git-remote-helpers.1
xmlto: input does not validate (status 3)
/usr/local/git-git-51993a4/Documentation/git-remote-helpers.xml:135: element 
literal: validity error : Element emphasis is not declared in literal list of 
possible children
/usr/local/git-git-51993a4/Documentation/git-remote-helpers.xml:144: element 
literal: validity error : Element emphasis is not declared in literal list of 
possible children
/usr/local/git-git-51993a4/Documentation/git-remote-helpers.xml:246: element 
literal: validity error : Element emphasis is not declared in literal list of 
possible children
/usr/local/git-git-51993a4/Documentation/git-remote-helpers.xml:255: element 
literal: validity error : Element emphasis is not declared in literal list of 
possible children
Document /usr/local/git-git-51993a4/Documentation/git-remote-helpers.xml does 
not validate
make[1]: *** [git-remote-helpers.1] Error 3
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

135c135
 literalrefspec refs/heads/:refs/svn/origin/branches//literal
---
 literalrefspec refs/heads/emphasis 
 role=strong:refs/svn/origin/branches//emphasis/literal
144c144
 there is an implied literalrefspec :/literal./simpara
---
 there is an implied literalrefspec emphasis 
 role=strong:/emphasis/literal./simpara
246c246
 literalrefspec refs/heads/:refs/svn/origin/branches//literal
---
 literalrefspec refs/heads/emphasis 
 role=strong:refs/svn/origin/branches//emphasis/literal
255c255
 there is an implied literalrefspec :/literal./simpara
---
 there is an implied literalrefspec emphasis 
 role=strong:/emphasis/literal./simpara

-- 
Hugh Esco 
404-424-8701
YourMessageDelivered.com
Keeping Your Group in the Loop
No Matter How Large or How Small
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 8/9] longest_ancestor_length(): resolve symlinks before comparing paths

2012-09-30 Thread Junio C Hamano
Michael Haggerty mhag...@alum.mit.edu writes:

 longest_ancestor_length() relies on a textual comparison of directory
 parts to find the part of path that overlaps with one of the paths in
 prefix_list.  But this doesn't work if any of the prefixes involves a
 symbolic link, because the directories will look different even though
 they might logically refer to the same directory.  So canonicalize the
 paths listed in prefix_list using real_path_if_valid() before trying
 to find matches.

I somehow feel that this is making the logic unnecessarily
convoluted by solving the problem at a wrong level.

If longest_ancestor_length() takes a single string and a list of
candidate string prefixes, conceptually it should be usable for any
hierarchy-looking string that uses slashes as hierarchy separator
(e.g. refs that may be stored in packed-refs that you cannot expect
lstat(2) or readlink(2) to give you any sensible results).

The real problem is that the list given from the environment may
contain a path that violates that it suffices to take the longest
string-prefix taking slashes into account assumption in such a
generic l-a-l implementation, no?  And this patch solves it by
making l-a-l _less_ generic and forcing it to be aware of the glitch
of its caller (you can either blame clueless user who lies when
setting the GIT_CEILING_DIRECTORIES by including paths contaminated
with symlinks, or blame the calling setup_git_directory_gently_1()
function that does not resolve the symbolic links before calling
this function).

As l-a-l is only used by the stop at the ceiling logic, isn't it a
far simpler solution to keep the function work at the string level,
and make the caller fix its input, i.e. the value taken from the
environment variable, before calling it?  That is, grab the value of
GIT_CEILING_DIRECTORIES, split it into a list at PATH_SEP (while
rejecting any non-absolute paths), normalize the elements of that
list by resolving symbolic links, and then pass the cwd[] and the
normalized string list to l-a-l?

The resulting callsite in setup_git_directory_gently_1() would pass
cwd[] and the ceiling_dirs (which now is a string list), all of
whose elements would happen to begin with / (or dos drive prefix
followed by the root symbol), but l-a-l can be written in such a
way that it does not even require that all the input has to begin at
root, which would later make it usable with things that are not
paths (references, for example, all of which begin with refs/ and
not /refs/).

Hrm?
--
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, v1.7.12.1 -- Documentation/git-rev-parse.xml:264: parser error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

XMLTO git-rev-parse.1
xmlto: input does not validate (status 1)
/usr/local/git-git-51993a4/Documentation/git-rev-parse.xml:264: parser error : 
Opening and ending tag mismatch: emphasis line 264 and literal
literalemphasis role=strong/literal, or literal[/literal), it is tur
   ^
/usr/local/git-git-51993a4/Documentation/git-rev-parse.xml:264: parser error : 
Opening and ending tag mismatch: literal line 264 and emphasis
/literal), it is turned into a prefix match by appending literal//emphasis
   ^
/usr/local/git-git-51993a4/Documentation/git-rev-parse.xml:277: parser error : 
Opening and ending tag mismatch: emphasis line 277 and literal
character (literal?/literal, literalemphasis role=strong/literal
   ^
/usr/local/git-git-51993a4/Documentation/git-rev-parse.xml:278: parser error : 
Opening and ending tag mismatch: literal line 278 and emphasis
match by appending literal//emphasis/literal.
^
make[1]: *** [git-rev-parse.1] Error 1
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

264c264
 literal/literal, or literal[/literal), it is turned into a prefix 
 match by appending literal//literal./simpara
---
 literalemphasis role=strong/literal, or literal[/literal), it is 
turned into a prefix match by appending 
literal//emphasis/literal./simpara
277,278c277,278
 character (literal?/literal, literal/literal, or 
 literal[/literal), it is turned into a prefix
 match by appending literal//literal.
---
 character (literal?/literal, literalemphasis 
role=strong/literal, or literal[/literal), it is turned into a prefix
 match by appending literal//emphasis/literal.


-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }



--
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, v1.7.12.1 -- Documentation/git-rm.xml:151: element literal: validity error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

ASCIIDOC git-rm.xml
XMLTO git-rm.1
xmlto: input does not validate (status 3)
/usr/local/git-git-51993a4/Documentation/git-rm.xml:151: element literal: 
validity error : Element emphasis is not declared in literal list of possible 
children
/usr/local/git-git-51993a4/Documentation/git-rm.xml:151: element literal: 
validity error : Element emphasis is not declared in literal list of possible 
children
Document /usr/local/git-git-51993a4/Documentation/git-rm.xml does not validate
make[1]: *** [git-rm.1] Error 3
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

151c151
 using literalgit rm d*/literal and literalgit rm d/*/literal, as the 
former will
---
 using literalgit rm emphasisd*/emphasis/literal and literalgit rm 
 emphasisd/*/emphasis/literal, as the former will


-- 
Hugh Esco 
skype: hresco3_ ; 678-921-8186 x21 
http://www.CampaignFoundations.com/
Providing Application Hosting, Telephony, 
Custom Development and Consulting Services 
to Green Candidates, Green Parties and
the non profits working for a just and sustainable future.

if( $insurance-rationing() ) { $people-die(); }
if( isa_ok($self,'Troy::Davis') =~ m/^ok/) { $people-are_whole(); }



--
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, v1.7.12.1 -- Documentation/gitcore-tutorial.xml:824: parser error

2012-09-30 Thread Hugh Esco
doing a source install of git v1.7.12.1, 
on the `make all doc` step, I get:

XMLTO gitcore-tutorial.7
xmlto: input does not validate (status 1)
/usr/local/git-git-51993a4/Documentation/gitcore-tutorial.xml:824: parser error 
: Opening and ending tag mismatch: emphasis line 824 and literal
(notice the asterisk literalemphasis role=strong/literal character), and
^
/usr/local/git-git-51993a4/Documentation/gitcore-tutorial.xml:828: parser error 
: Opening and ending tag mismatch: literal line 828 and emphasis
All of them have non blank characters in the first column (literal/emphasis
   ^
/usr/local/git-git-51993a4/Documentation/gitcore-tutorial.xml:1263: parser 
error : Opening and ending tag mismatch: emphasis line 1263 and literal
raYou will see two files, literalpack-emphasis role=strong.pack/literal
   ^
/usr/local/git-git-51993a4/Documentation/gitcore-tutorial.xml:1263: parser 
error : Opening and ending tag mismatch: literal line 1263 and emphasis
teralpack-emphasis role=strong.pack/literal and literalpack-/emphasis
   ^
make[1]: *** [gitcore-tutorial.7] Error 1
make[1]: Leaving directory `/usr/local/git-git-51993a4/Documentation'
make: *** [doc] Error 2

---
and the patch which permitted me to proceed
---

824c824
 (notice the asterisk literal/literal character), and the first column for
---
 (notice the asterisk literalemphasis role=strong/literal character), 
 and the first column for
828c828
 All of them have non blank characters in the first column (literal/literal
---
 All of them have non blank characters in the first column 
 (literal/emphasis/literal
1263c1263
 notesimparaYou will see two files, literalpack-.pack/literal and 
literalpack-.idx/literal,
---
 notesimparaYou will see two files, literalpack-emphasis 
 role=strong.pack/literal and literalpack-/emphasis.idx/literal,

-- 
Hugh Esco 
404-424-8701
YourMessageDelivered.com
Keeping Your Group in the Loop
No Matter How Large or How Small
--
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


[ANNOUNCE] Git v1.7.12.2

2012-09-30 Thread Junio C Hamano
The latest maintenance release Git v1.7.12.2 is now available at
the usual places.

The release tarballs are found at:

http://code.google.com/p/git-core/downloads/list

and their SHA-1 checksums are:

277b759139ddb62c6935da37de8a483e2c234a97  git-1.7.12.2.tar.gz
5722156394c7478b2339a1d87aa894bc4d2f5d6b  git-htmldocs-1.7.12.2.tar.gz
8cf6fd255e83226b4abcdcd68dcf315c1995fd92  git-manpages-1.7.12.2.tar.gz

Also the following public repositories all have a copy of the v1.7.12.2
tag and the maint branch that the tag points at:

  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 1.7.12.2 Release Notes
==

Fixes since v1.7.12.1
-

 * When git am is fed an input that has multiple Content-type: ...
   header, it did not grok charset= attribute correctly.

 * Even during a conflicted merge, git blame $path always meant to
   blame uncommitted changes to the working tree version; make it
   more useful by showing cleanly merged parts as coming from the other
   branch that is being merged.

 * git blame MAKEFILE run in a history that has Makefile but not
   MAKEFILE should say No such file MAKEFILE in HEAD, but got
   confused on a case insensitive filesystem and failed to do so.

 * git fetch --all, when passed --no-tags, did not honor the
   --no-tags option while fetching from individual remotes (the same
   issue existed with --tags, but combination --all --tags makes
   much less sense than --all --no-tags).

 * git log/diff/format-patch --stat showed the N line(s) added
   comment in user's locale and caused careless submitters to send
   patches with such a line in them to projects whose project language
   is not their language, mildly irritating others. Localization to
   the line has been disabled for now.

 * git log --all-match --grep=A --grep=B ought to show commits that
   mention both A and B, but when these three options are used with
   --author or --committer, it showed commits that mention either A or
   B (or both) instead.

 * The subcommand to remove the definition of a remote in git remote
   was named rm even though all other subcommands were spelled out.
   Introduce git remote remove to remove confusion, and keep rm as
   a backward compatible synonym.

Also contains a handful of documentation updates.



Changes since v1.7.12.1 are as follows:

Dan Johnson (1):
  fetch --all: pass --tags/--no-tags through to each remote

David Gould (1):
  run-command.c: fix broken list iteration in clear_child_for_cleanup

Felipe Contreras (1):
  completion: fix shell expansion of items

Jeff King (4):
  argv-array: add pop function
  argv-array: fix bogus cast when freeing array
  fetch: use argv_array instead of hand-building arrays
  Revert completion: fix shell expansion of items

Jens Lehmann (1):
  submodule: use argv_array instead of hand-building arrays

Jeremy White (1):
  Documentation: describe subject more precisely

Jonathan Duke Leto (1):
  Improve the description of GIT_PS1_SHOWUPSTREAM

Junio C Hamano (11):
  mailinfo: strip RE:  prefix
  blame $path: avoid getting fooled by case insensitive filesystems
  blame: allow blame file in the middle of a conflicted merge
  grep: teach --debug option to dump the parse tree
  log --grep/--author: honor --all-match honored for multiple --grep 
patterns
  log: document use of multiple commit limiting options
  grep.c: mark private file-scope symbols as static
  mailinfo: do not concatenate charset= attribute values from mime headers
  grep.c: make two symbols really file-scope static this time
  Start preparation for 1.7.12.2
  Git 1.7.12.2

Michael J Gruber (6):
  grep: show --debug output only once
  t7810-grep: bring log --grep tests in common form
  t7810-grep: test multiple --grep with and without --all-match
  t7810-grep: test multiple --author with --all-match
  t7810-grep: test interaction of multiple --grep and --author options
  t7810-grep: test --all-match with multiple --grep and --author options

Nguyễn Thái Ngọc Duy (3):
  remote: prefer subcommand name 'remove' to 'rm'
  doc: move rev-list option -n from git-log.txt to rev-list-options.txt
  Revert diffstat back to English

Ralf Thielow (1):
  l10n: de.po: correct translation of a 'rebase' message

Stefan Naewe (1):
  ls-remote: document the '--get-url' option

Stephen Boyd (1):
  Documentation: Document signature showing options

Thynson (2):
  l10n: Unify the translation for '(un)expected'
  l10n: Improve many translation for zh_CN

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to 

gitk: can't reload commits with new key binding

2012-09-30 Thread SZEDER Gábor
Hi,

a135f214 (gitk: Avoid Meta1-F5, 2012-04-07) changed the key binding
for reloading commits to shift-F5, but this new key binding doesn't
seem to be working here, because it doesn't call reloadcommits().
Choosing the reload menu item works.  Shift-F5 works properly in other
applications.

Any ideas?

Thanks,
Gábor

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


git smart-http do not authent to allow git ls-remote to be called anonymously

2012-09-30 Thread 乙酸鋰
Hi,

I use smart-http on Apache.
If nothing to be pushed / pulled, I do not want password to be
supplied. And allow git ls-remote to run without password

*.git/info/refs?service=git-upload-pack
*.git/info/refs?service=git-receive-pack

I only need authentication on

*.git/git-upload-pack
*.git/git-receive-pack

/etc/apache/httpd.conf

LocationMatch ^/git/.*/git-(upload|receive)-pack$
AuthType Basic
AuthName staff only
AuthUserFile /etc/apache/apache.pwd
Require valid-user
/LocationMatch

However this does not work. It does not ask for password at all.

I use Ubuntu 10.04, Apache 2.2.14, Git 1.7.11.3.

Directory structure: any depth (more than 1 subdir) of path from /git
to .git folders

Could you advise how to configure this? Is this a bug?

Regards,
ch3cooli
--
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


Merging/joining two repos (repo2 should be a subdirectory of repo1)

2012-09-30 Thread Dirk Süsserott
Hi!

I have repo1 with ~4 years of history and another repo2 with ~1 year of
history, both of which I don't want to loose. Now I want to join them so
that repo2 becomes a subdirectory whithin repo1, including all the
history of repo2.

A simple git-merge won't do because both repos have some same files (at
least e.g. .gitignore) in their root directories. Of course I could
resolve the conflicts, but I don't want that.

My naive approach is move everything in $repo2 one directory below and
then merge $repo2 into $repo1. Actually I wouldn' call that a merge
but an import.

I know of git filter-branch --subdirectory-filter foodir but that's
just the opposite of what I need.

Is there a nifty trick to get this? Or will I have to do git
filter-branch --tree-filter 'mkdir subdir  git mv * subdir' --all on
$repo2 and then git merge $repo2 in $repo1?

Thanks in advance
Dirk

--
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: Merging/joining two repos (repo2 should be a subdirectory of repo1)

2012-09-30 Thread Dirk Süsserott
Am 30.09.2012 17:24 schrieb Tomas Carnecky:
 On Sun, 30 Sep 2012 17:17:53 +0200, Dirk SÃŒsserott newslet...@dirk.my1.cc 
 wrote:
 Hi!

 I have repo1 with ~4 years of history and another repo2 with ~1 year of
 history, both of which I don't want to loose. Now I want to join them so
 that repo2 becomes a subdirectory whithin repo1, including all the
 history of repo2.

 A simple git-merge won't do because both repos have some same files (at
 least e.g. .gitignore) in their root directories. Of course I could
 resolve the conflicts, but I don't want that.

 My naive approach is move everything in $repo2 one directory below and
 then merge $repo2 into $repo1. Actually I wouldn' call that a merge
 but an import.

 I know of git filter-branch --subdirectory-filter foodir but that's
 just the opposite of what I need.

 Is there a nifty trick to get this? Or will I have to do git
 filter-branch --tree-filter 'mkdir subdir  git mv * subdir' --all on
 $repo2 and then git merge $repo2 in $repo1?
 
 http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html
 
 

Wow! Thanks for that quick and *very* helpful answer! :-)
--
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: Merging/joining two repos (repo2 should be a subdirectory of repo1)

2012-09-30 Thread Dirk Süsserott
Am 30.09.2012 17:34 schrieb Sascha Cunz:

 You might want to have a look at the subtree merge strategy (see man
 git-merge). Maybe that will already do what you want to.
 
  
 
 Sascha
 

Thank you as well. I wasn't aware of that option (or didn't figure out
what it actually does).

Dirk
--
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: bug report, v1.7.12.1 -- Documentation/git-bundle.xml:130: parser error

2012-09-30 Thread Jeff King
On Sun, Sep 30, 2012 at 12:34:18AM -0700, Junio C Hamano wrote:

 I suspect that a tilde inside literal `` environment is mishandled
 in your versions of the documentation toolchain.  Either you would
 need to upgrade some tool in the toolchain, or we would need patches
 to the source that would look like:
 
   -such as `master~1` cannot be packaged,...
 +such as `master{tilde}1` cannot be packaged,...
 
 to work around this problem if the version of the problematic tool
 you are using is widespread.

That would not work, as commit 6cf378f turned off no-inline-literal, and
modern asciidoc would not expand that {tilde} at all. My guess is that
Hugh is using a version of asciidoc older than 8.4.1, which was the
first version to understand inline literals.

This came up already once before:

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

where the culprit was older third-party RPMs on RHEL5. It can be worked
around by upgrading asciidoc, or using make quick-install-doc to pull
the pre-built versions.

-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] Remove the hard coded length limit on variable names in config files

2012-09-30 Thread Ben Walton
Hi Michael,

 The patch doesn't apply to the current master; it appears to have been
 built against master 883a2a3504 (2012-02-23) or older.  It will have to
 be rebased to the current master.

Junio had asked that it be based on maint so that's what I (thought
I?) did.  I'm happy to redo it against master if that's better though.

 The preferred format for multiline comments in the git project is

 /*
  * Truncate the var name back to the section header prior to
  * grabbing the suffix part of the name and the value.
  */

Oops; Will fix.

 In the old code, get_base_var() read the string into var and returned
 var's length (or -1 on error).  The fact that the length of var was
 first reset to zero is somewhat implicit in the fact that no length
 parameter is being passed to get_base_var().

 But in the new version, get_base_var() is passed a strbuf.  Often,
 operations with strbufs append to the strbuf, and this is what I first
 assumed.  It took me a while to realize that get_base_var() calls
 strbuf_reset() before getting to work.  Moreover, get_base_var() still
 returns the length of what it found, which is redundant with a strbuf
 and therefore unexpected.  So when the return value of get_base_var() is
 stored into baselen, it is not really obvious that it is the string's
 length.

Ok, that's a fair criticism.  When I was creating the patch, I thought
that placing
the strbuf_reset in get_base_var() seemed nicer as it matched the
baselen = 0 which
effectively reset the old character array.  Your point is well taken
though and I think
it makes sense to switch things around the way you've suggested.

 Finally, I realize that the MAXNAME constant was not exported and I
 can't find the old length limits documented anywhere, but I nevertheless
 worry a little bit that one of the users of the config API has a
 built-in assumption that names can never be longer than 256 characters
 (for example, a config_fn_t function might try to store the name into a
 fixed-length buffer).  Hopefully such code would never have been written
 or accepted, but...?  If you have thought about this or audited the
 callers, please mention that in your commit message.

I did look through the code to see if anything was relying on fixed
size buffers and I didn't see anything.  I'll update the commit
message with this info too.

I'll send a modified patch shortly.

Thanks for the review!
-Ben
-- 
---
Take the risk of thinking for yourself.  Much more happiness,
truth, beauty and wisdom will come to you that way.

-Christopher Hitchens
---
--
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: bug report, v1.7.12.1 -- Documentation/git-bundle.xml:130: parser error

2012-09-30 Thread Hugh Esco
Your are correct.  That is apparently the issue:

git@pbx:~$ asciidoc --version
asciidoc 8.2.7

This server is still running Debian Lenny.
Not sure when I will be able to rebuild it.  

My apologies for spamming your bug reporting list 
with all of that.  I now have source installs of git 
and gitolite installed and presumably working on this 
server and promise not to bother you further with 
that issue.

-- Hugh Esco

Date: Sun, 30 Sep 2012 14:02:09 -0400
From: Jeff King p...@peff.net
To: Junio C Hamano gits...@pobox.com
Cc: he...@yourmessagedelivered.com, git@vger.kernel.org
Subject: Re: bug report, v1.7.12.1 -- Documentation/git-bundle.xml:130:
 parser error

On Sun, Sep 30, 2012 at 12:34:18AM -0700, Junio C Hamano wrote:

 I suspect that a tilde inside literal `` environment is mishandled
 in your versions of the documentation toolchain.  Either you would
 need to upgrade some tool in the toolchain, or we would need patches
 to the source that would look like:
 
   -such as `master~1` cannot be packaged,...
 +such as `master{tilde}1` cannot be packaged,...
 
 to work around this problem if the version of the problematic tool
 you are using is widespread.

That would not work, as commit 6cf378f turned off no-inline-literal, and
modern asciidoc would not expand that {tilde} at all. My guess is that
Hugh is using a version of asciidoc older than 8.4.1, which was the
first version to understand inline literals.

This came up already once before:

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

where the culprit was older third-party RPMs on RHEL5. It can be worked
around by upgrading asciidoc, or using make quick-install-doc to pull
the pre-built versions.

-Peff

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


Re: [PATCH 0/2] Let git submodule add fail when .git/modules/name already exists

2012-09-30 Thread Jens Lehmann
Am 30.09.2012 06:47, schrieb Junio C Hamano:
 Jens Lehmann jens.lehm...@web.de writes:
 
 The only long term solution I can think of is to use some kind of UUID for
 the name, so that the names of newly added submodules won't have a chance
 to clash anymore. For the short term aborting git submodule add when a
 submodule of that name already exists in .git/modules of the superproject
 together with the ability to provide a custom name might at least solve
 the local clashes.
 
 That assumes that the addition of the submodule for the second time
 is to add a completely different submodule at the same location and
 is done on purpose, but is that a sensible assumption?
 
 If a superproject that is about an embedded appliance used to have a
 submodule A bound at its path kernel, but for some reason stopped
 shipping with kernel and then later reintroduced the directory
 kernel bound to some submodule B, my gut feeling is that it is
 just as likely (if not more likely) that A and B are indeed the same
 submodule (i.e. it shares the same history) as they are totally
 unrelated.
 
 Could it be that it is a user error combined with the immaturity of
 git submodule tool that does not yet support it used to be here,
 but it disappears for a while and then it reappears in the history
 of the superproject very well that caused the user to manually add
 a new submodule which in fact is the same submodule at the same
 path?
 
 I think failing with a better error message is a good idea. It
 should suggest to either resurrect the submodule that is stashed
 away in $GIT_DIR/modules/$name if it indeed is the same, or to
 give it a different name (perhaps kernel used to be pointing at
 the Linux kernel history, then the user is replacing it with a
 totally different implementation that is really from different
 origin and do not share any history, perhaps BSD).  In such a case,
 the user may want to pick bsd-kernel or something as its name, to
 differentiate it.

Good point! I will add a more detailed error message (including
the url of the default remote which is configured for the already
present submodule repo) and teach --force to skip the test and
resurrect that submodule repo.

 Using some kind of UUID can easily be added in a subsequent patch,...
 
 I would suggest thinking really long and hard before saying UUID.

Absolutely.

 It is an easy cop-out to ensure uniqueness, but risks to allow two
 people (or one person at two different time) to give two unrelated
 names to a single thing that actually is the same.

I'm not too worried about that (even though it would be good for
the disk footprint). And I couldn't come up with a better way to
solve the problem we currently have when the same name is used
for two different submodule repos.

 A better alternative might be to use the commit object name at the
 root of the history of the submodule, which would catch the simplest
 and most common case of the mistake, I would think.

This won't work well e.g. when one uses a fork of another repo,
that will contain different commits while still having the same
root commit. I was also thinking about hashing the URL, but that
will break when the user reconfigures the URL to somewhere else.
After playing with some ideas I couldn't find a way to let the
submodule's repo provide sufficient uniqueness.

I'd say for now we go with the detection of name clashes and let
the user choose if he wants to resurrect that submodule repo or
if he wants to choose another name. But if we notice further down
the road that collisions are a problem in real life, we can think
again if UUIDs - or something else - might be a solution.
--
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] Remove the hard coded length limit on variable names in config files

2012-09-30 Thread Ben Walton
Previously while reading the variable names in config files, there was
a 256 character limit with at most 128 of those characters being used
by the section header portion of the variable name.  This limitation
was only enforced while reading the config files.  It was possible to
write a config file that was not subsequently readable.

Instead of enforcing this limitation for both reading and writing,
remove it entirely by changing the var member of the config_file
struct to a strbuf instead of a fixed length buffer.  Update all of
the parsing functions in config.c to use the strbuf instead of the
static buffer.

The parsing functions that returned the base length of the variable
name now return simply 0 for success and -1 for failure.  The base
length information is obtained through the strbuf's len member.

We now send the buf member of the strbuf to external callback
functions to preserve the external api.  None of the external callers
rely on the old size limitation for sizing their own buffers so
removing the limit should have no externally visible effect.

Signed-off-by: Ben Walton bdwal...@gmail.com
---
 config.c |   59 +--
 1 file changed, 29 insertions(+), 30 deletions(-)

diff --git a/config.c b/config.c
index 08e47e2..24fb2d2 100644
--- a/config.c
+++ b/config.c
@@ -10,8 +10,6 @@
 #include strbuf.h
 #include quote.h
 
-#define MAXNAME (256)
-
 typedef struct config_file {
struct config_file *prev;
FILE *f;
@@ -19,7 +17,7 @@ typedef struct config_file {
int linenr;
int eof;
struct strbuf value;
-   char var[MAXNAME];
+   struct strbuf var;
 } config_file;
 
 static config_file *cf;
@@ -260,7 +258,7 @@ static inline int iskeychar(int c)
return isalnum(c) || c == '-';
 }
 
-static int get_value(config_fn_t fn, void *data, char *name, unsigned int len)
+static int get_value(config_fn_t fn, void *data, struct strbuf *name)
 {
int c;
char *value;
@@ -272,11 +270,9 @@ static int get_value(config_fn_t fn, void *data, char 
*name, unsigned int len)
break;
if (!iskeychar(c))
break;
-   name[len++] = tolower(c);
-   if (len = MAXNAME)
-   return -1;
+   strbuf_addch(name, tolower(c));
}
-   name[len] = 0;
+
while (c == ' ' || c == '\t')
c = get_next_char();
 
@@ -288,10 +284,10 @@ static int get_value(config_fn_t fn, void *data, char 
*name, unsigned int len)
if (!value)
return -1;
}
-   return fn(name, value, data);
+   return fn(name-buf, value, data);
 }
 
-static int get_extended_base_var(char *name, int baselen, int c)
+static int get_extended_base_var(struct strbuf *name, int c)
 {
do {
if (c == '\n')
@@ -302,7 +298,7 @@ static int get_extended_base_var(char *name, int baselen, 
int c)
/* We require the format to be '[base extension]' */
if (c != '')
return -1;
-   name[baselen++] = '.';
+   strbuf_addch(name, '.');
 
for (;;) {
int c = get_next_char();
@@ -315,37 +311,31 @@ static int get_extended_base_var(char *name, int baselen, 
int c)
if (c == '\n')
goto error_incomplete_line;
}
-   name[baselen++] = c;
-   if (baselen  MAXNAME / 2)
-   return -1;
+   strbuf_addch(name, c);
}
 
/* Final ']' */
if (get_next_char() != ']')
return -1;
-   return baselen;
+   return 0;
 error_incomplete_line:
cf-linenr--;
return -1;
 }
 
-static int get_base_var(char *name)
+static int get_base_var(struct strbuf *name)
 {
-   int baselen = 0;
-
for (;;) {
int c = get_next_char();
if (cf-eof)
return -1;
if (c == ']')
-   return baselen;
+   return 0;
if (isspace(c))
-   return get_extended_base_var(name, baselen, c);
+   return get_extended_base_var(name, c);
if (!iskeychar(c)  c != '.')
return -1;
-   if (baselen  MAXNAME / 2)
-   return -1;
-   name[baselen++] = tolower(c);
+   strbuf_addch(name, tolower(c));
}
 }
 
@@ -353,7 +343,7 @@ static int git_parse_file(config_fn_t fn, void *data)
 {
int comment = 0;
int baselen = 0;
-   char *var = cf-var;
+   struct strbuf *var = cf-var;
 
/* U+FEFF Byte Order Mark in UTF8 */
static const unsigned char *utf8_bom = (unsigned char *) \xef\xbb\xbf;
@@ -389,17 +379,24 @@ static int git_parse_file(config_fn_t fn, void *data)

Re: [PATCH] gitk: refresh the index before running diff-files

2012-09-30 Thread Jonathan Nieder
Hi Jeff,

Jeff King wrote:
 On Sun, Sep 30, 2012 at 10:05:27AM +1000, Paul Mackerras wrote:

 Unfortunately this will wait for the git update-index command to
 complete, making the GUI unresponsive while it executes, and that can
 take minutes on a large repository (e.g. the linux kernel) on a
 machine with a slow disk and a cold disk cache.  We will need to make
 the git update-index execute asynchronously.

 Good point. We're getting out of my very limited tcl cargo-culting
 skills now, so I'll let somebody more clueful do that fix.

You might find the following patch and discussion entertaining:

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

Not my itch, but it was fun to write back then. ;-)

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


Re: Merging/joining two repos (repo2 should be a subdirectory of repo1)

2012-09-30 Thread David Aguilar
On Sun, Sep 30, 2012 at 8:32 AM, Dirk Süsserott newslet...@dirk.my1.cc wrote:
 Am 30.09.2012 17:24 schrieb Tomas Carnecky:
 On Sun, 30 Sep 2012 17:17:53 +0200, Dirk SÃŒsserott newslet...@dirk.my1.cc 
 wrote:
 Hi!

 I have repo1 with ~4 years of history and another repo2 with ~1 year of
 history, both of which I don't want to loose. Now I want to join them so
 that repo2 becomes a subdirectory whithin repo1, including all the
 history of repo2.

 A simple git-merge won't do because both repos have some same files (at
 least e.g. .gitignore) in their root directories. Of course I could
 resolve the conflicts, but I don't want that.

 My naive approach is move everything in $repo2 one directory below and
 then merge $repo2 into $repo1. Actually I wouldn' call that a merge
 but an import.

 I know of git filter-branch --subdirectory-filter foodir but that's
 just the opposite of what I need.

 Is there a nifty trick to get this? Or will I have to do git
 filter-branch --tree-filter 'mkdir subdir  git mv * subdir' --all on
 $repo2 and then git merge $repo2 in $repo1?

 http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html



 Wow! Thanks for that quick and *very* helpful answer! :-)

Hi Dirk,

You should also take a look at contrib/subtree/ in the git source tree.

git subtree does pretty much exactly what you're looking to do,
and it is a bit more user-friendly than the plumbing commands.

https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt
-- 
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


[PATCH v2 2/2] submodule add: Fail when .git/modules/name already exists unless forced

2012-09-30 Thread Jens Lehmann
When adding a new submodule it can happen that .git/modules/name already
contains a submodule repo, e.g. when a submodule is removed from the work
tree and another submodule is added at the same path. But then the work
tree of the submodule will be populated using the existing repository and
not the one the user provided, which results in an incorrect work tree. On
the other hand the user might reactivate a submodule removed earlier, then
reusing that .git directory is the Right Thing to do.

As git can't decide what is the case, error out and tell the user she
should use either use a different name for the submodule with the --name
option or can reuse the .git directory for the newly added submodule by
providing the --force option (which only makes sense when the upstream
matches, so the error message lists all remotes of .git/modules/name).

In one test in t7406 the --force option had to be added to git submodule
add, as that test re-adds a formerly removed submodule.

Reported-by: Jonathan Johnson m...@jondavidjohn.com
Signed-off-by: Jens Lehmann jens.lehm...@web.de
---

Am 30.09.2012 21:19, schrieb Jens Lehmann:
 Am 30.09.2012 06:47, schrieb Junio C Hamano:
 I think failing with a better error message is a good idea. It
 should suggest to either resurrect the submodule that is stashed
 away in $GIT_DIR/modules/$name if it indeed is the same, or to
 give it a different name (perhaps kernel used to be pointing at
 the Linux kernel history, then the user is replacing it with a
 totally different implementation that is really from different
 origin and do not share any history, perhaps BSD).  In such a case,
 the user may want to pick bsd-kernel or something as its name, to
 differentiate it.
 
 Good point! I will add a more detailed error message (including
 the url of the default remote which is configured for the already
 present submodule repo) and teach --force to skip the test and
 resurrect that submodule repo.

The message when git submodule add finds .git/modules/name is:

A git directory for 'name' is found locally with remote(s):
  originurl(s) from .git/modules/name
If you want to reuse this local git directory instead of cloning again from
  url given on command line
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

When run with the --force option the following message is printed:

Reactivating local git directory for submodule 'name'.


 git-submodule.sh| 15 ++-
 t/t7400-submodule-basic.sh  | 30 ++
 t/t7406-submodule-update.sh |  2 +-
 3 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 22febb1..e8112c8 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -359,7 +359,20 @@ Use -f if you really want to add it. 2
fi

else
-
+   if test -d .git/modules/$sm_name
+   then
+   if test -z $force
+   then
+   echo 2 $(eval_gettext A git directory for 
'\$sm_name' is found locally with remote(s):)
+   GIT_DIR=.git/modules/$sm_name GIT_WORK_TREE=. 
git remote -v | grep '(fetch)' | sed -e s,^,  , -e s,' (fetch)',, 2
+   echo 2 $(eval_gettext If you want to reuse 
this local git directory instead of cloning again from)
+   echo 2   $realrepo
+   echo 2 $(eval_gettext use the '--force' 
option. If the local git directory is not the correct repo)
+   die $(eval_gettext or you are unsure what 
this means choose another name with the '--name' option.)
+   else
+   echo $(eval_gettext Reactivating local git 
directory for submodule '\$sm_name'.)
+   fi
+   fi
module_clone $sm_path $sm_name $realrepo $reference || 
exit
(
clear_local_git_env
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 78bf739..f1a94f7 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -726,4 +726,34 @@ test_expect_success 'submodule add --name allows to 
replace a submodule with ano
)
 '

+test_expect_success 'submodule add with an existing name fails unless forced' '
+   (
+   cd addtest2 
+   rm -rf repo 
+   git rm repo 
+   test_must_fail git submodule add -q --name repo_new 
$submodurl/repo.git repo 
+   test ! -d repo 
+   echo repo expect 
+   git config -f .gitmodules submodule.repo_new.path actual 
+   test_cmp expect actual
+   echo $submodurl/bare.git expect 
+   git config -f .gitmodules submodule.repo_new.url actual 
+   

mailinfo: don't require text mime type for attachments

2012-09-30 Thread Linus Torvalds

Currently git am does insane things if the mbox it is given contains 
attachments with a MIME type that aren't text/*.

In particular, it will still decode them, and pass them one line at a 
time to the mail body filter, but because it has determined that they 
aren't text (without actually looking at the contents, just at the mime 
type) the line will be the encoding line (eg 'base64') rather than a 
line of *content*.

Which then will cause the text filtering to fail, because we won't 
correctly notice when the attachment text switches from the commit message 
to the actual patch. Resulting in a patch failure, even if patch may be a 
perfectly well-formed attachment, it's just that the message type may be 
(for example) application/octet-stream instead of text/plain.

Just remove all the bogus games with the message_type. The only difference 
that code creates is how the data is passed to the filter function 
(chunked per-pred-code line or per post-decode line), and that difference 
is *wrong*, since chunking things per pre-decode line can never be a 
sensible operation, and cannot possibly matter for binary data anyway.

This code goes all the way back to March of 2007, in commit 87ab79923463 
(builtin-mailinfo.c infrastrcture changes), and apparently Don used to 
pass random mbox contents to git. However, the pre-decode vs post-decode 
logic really shouldn't matter even for that case, and more importantly, I 
fed git am crap is not a valid reason to break *real* patch attachments.

If somebody really cares, and determines that some attachment is binary 
data (by looking at the data, not the MIME-type), the whole attachment 
should be dismissed, rather than fed in random-sized chunks to 
handle_filter().

Signed-off-by: Linus Torvalds torva...@linux-foundation.org
Cc: Don Zickus dzic...@redhat.com
---
 builtin/mailinfo.c | 11 ---
 1 file changed, 11 deletions(-)

diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index 2b3f4d955eaa..da231400b327 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -19,9 +19,6 @@ static struct strbuf email = STRBUF_INIT;
 static enum  {
TE_DONTCARE, TE_QP, TE_BASE64
 } transfer_encoding;
-static enum  {
-   TYPE_TEXT, TYPE_OTHER
-} message_type;
 
 static struct strbuf charset = STRBUF_INIT;
 static int patch_lines;
@@ -184,8 +181,6 @@ static void handle_content_type(struct strbuf *line)
struct strbuf *boundary = xmalloc(sizeof(struct strbuf));
strbuf_init(boundary, line-len);
 
-   if (!strcasestr(line-buf, text/))
-message_type = TYPE_OTHER;
if (slurp_attr(line-buf, boundary=, boundary)) {
strbuf_insert(boundary, 0, --, 2);
if (++content_top  content[MAX_BOUNDARIES]) {
@@ -657,7 +652,6 @@ again:
/* set some defaults */
transfer_encoding = TE_DONTCARE;
strbuf_reset(charset);
-   message_type = TYPE_TEXT;
 
/* slurp in this section's info */
while (read_one_header_line(line, fin))
@@ -871,11 +865,6 @@ static void handle_body(void)
strbuf_insert(line, 0, prev.buf, prev.len);
strbuf_reset(prev);
 
-   /* binary data most likely doesn't have newlines */
-   if (message_type != TYPE_TEXT) {
-   handle_filter(line);
-   break;
-   }
/*
 * This is a decoded line that may contain
 * multiple new lines.  Pass only one chunk
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: git smart-http do not authent to allow git ls-remote to be called anonymously

2012-09-30 Thread Shawn Pearce
On Sun, Sep 30, 2012 at 7:35 AM, 乙酸鋰 ch3co...@gmail.com wrote:
 I use smart-http on Apache.
 If nothing to be pushed / pulled, I do not want password to be
 supplied. And allow git ls-remote to run without password

 *.git/info/refs?service=git-upload-pack
 *.git/info/refs?service=git-receive-pack

 I only need authentication on

 *.git/git-upload-pack
 *.git/git-receive-pack

 /etc/apache/httpd.conf

 LocationMatch ^/git/.*/git-(upload|receive)-pack$
 AuthType Basic
 AuthName staff only
 AuthUserFile /etc/apache/apache.pwd
 Require valid-user
 /LocationMatch

 However this does not work. It does not ask for password at all.

This sounds like a bug in your Apache configuration. I would verify it
prompts for a password as expected before worrying about the Git
client:

  curl -v http://localhost/git/blah/git-upload-pack

should fail with a 401 requesting access to staff only. Once this is
working, git will present authorization as necessary during the
/git-upload-pack|git-receive-pack calls.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: git smart-http do not authent to allow git ls-remote to be called anonymously

2012-09-30 Thread Jeff King
On Sun, Sep 30, 2012 at 10:35:35PM +0800, 乙酸鋰 wrote:

 I use smart-http on Apache.
 If nothing to be pushed / pulled, I do not want password to be
 supplied. And allow git ls-remote to run without password
 
 *.git/info/refs?service=git-upload-pack
 *.git/info/refs?service=git-receive-pack
 
 I only need authentication on
 
 *.git/git-upload-pack
 *.git/git-receive-pack
 
 /etc/apache/httpd.conf
 
 LocationMatch ^/git/.*/git-(upload|receive)-pack$
 AuthType Basic
 AuthName staff only
 AuthUserFile /etc/apache/apache.pwd
 Require valid-user
 /LocationMatch
 
 However this does not work. It does not ask for password at all.

What is it in the final sentence? Does the server not tell the git
client that authorization is required, and actually serve the request?
If so, then that is a bug in your apache config.

Or is it that the server tells git that it needs authorization, but git
does not prompt, and instead just fails with Authentication failed. In
that case, the issue is that you need a newer git client. Traditionally
the client expected to handle authentication during the initial
info/refs request. I added support for handling authentication during
later requests in commit b81401c, which is in git v1.7.11.7 and
v1.7.12.1.

You should reconsider whether this is what you really want, though. With
the configuration you showed, anyone will be able to get a list of all
refs and their sha1s. So they would know all your branch names, and they
could even potentially find out what's in your branches by making
offline guesses and comparing them to your branch sha1s (the feasibility
of this would depend on exactly what you're storing).

-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: Commit cache to speed up rev-list and merge

2012-09-30 Thread Shawn Pearce
On Thu, Sep 27, 2012 at 7:14 PM, Nguyen Thai Ngoc Duy pclo...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 10:51 PM, Shawn Pearce spea...@spearce.org wrote:
 In Linus' Linux kernel tree there are currently about 323,178 commits.
 If we store just the pre-parsed commit time as an int32 field this is
 an additional 1.2 MiB of data in the pack-*.idx file, assuming we can
 use additional data like pack offset position to correlate commit to
 the parsed int. If we stored parent pointers in a similar way you
 probably need at least 3.6 MiB of additional disk space on the index.
 For example, use 12 bytes for each commit to store enough of the
 parsed commit time to sort commits, and up to 2 parent pointers per
 commit with a reserved magic value for octopus merges to mean the
 commit itself has to be parsed to get the graph structure correct.

 This is much better than my naive approach (storing sha-1 and
 timestamps). We could use less space by storing parent pointer of
 non-merge commits only. Merge commits linux-2.6 is 6% the number of
 commits. git.git has higher percentage, 21%. I bet many projects do
 not merge as much and the number of merge commits is less than 5%.

Some projects merge quite often. Android's frameworks/base repository
has a very large number of merges. Out of 79905 commits reachable from
the master branch, 65.3% are merges. So actually there are more merge
commits in the Android history than there are code commits. A cache of
only non-merges may be worthless on such a history.
--
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: Commit cache to speed up rev-list and merge

2012-09-30 Thread Nguyen Thai Ngoc Duy
On Mon, Oct 1, 2012 at 8:49 AM, Shawn Pearce spea...@spearce.org wrote:
 On Thu, Sep 27, 2012 at 7:14 PM, Nguyen Thai Ngoc Duy pclo...@gmail.com 
 wrote:
 On Thu, Sep 27, 2012 at 10:51 PM, Shawn Pearce spea...@spearce.org wrote:
 In Linus' Linux kernel tree there are currently about 323,178 commits.
 If we store just the pre-parsed commit time as an int32 field this is
 an additional 1.2 MiB of data in the pack-*.idx file, assuming we can
 use additional data like pack offset position to correlate commit to
 the parsed int. If we stored parent pointers in a similar way you
 probably need at least 3.6 MiB of additional disk space on the index.
 For example, use 12 bytes for each commit to store enough of the
 parsed commit time to sort commits, and up to 2 parent pointers per
 commit with a reserved magic value for octopus merges to mean the
 commit itself has to be parsed to get the graph structure correct.

 This is much better than my naive approach (storing sha-1 and
 timestamps). We could use less space by storing parent pointer of
 non-merge commits only. Merge commits linux-2.6 is 6% the number of
 commits. git.git has higher percentage, 21%. I bet many projects do
 not merge as much and the number of merge commits is less than 5%.

 Some projects merge quite often. Android's frameworks/base repository
 has a very large number of merges. Out of 79905 commits reachable from
 the master branch, 65.3% are merges. So actually there are more merge
 commits in the Android history than there are code commits. A cache of
 only non-merges may be worthless on such a history.

The good thing about these cache is it's configurable. Merge-preferred
projects can choose to cache the first two parents. Non-merge projects
can choose to cache just the first parent. We don't need a fixed
format for both.
-- 
Duy
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Using bitmaps to accelerate fetch and clone

2012-09-30 Thread Shawn Pearce
On Sun, Sep 30, 2012 at 6:59 PM, Nguyen Thai Ngoc Duy pclo...@gmail.com wrote:
 On Mon, Oct 1, 2012 at 8:07 AM, Shawn Pearce spea...@spearce.org wrote:
 You mentioned this before in your idea mail a while back. I wonder if
 it's worth storing bitmaps for all packs, not just the self contained
 ones.

 Colby and I started talking about this late last week too. It seems
 feasible, but does add a bit more complexity to the algorithm used
 when enumerating.

 Yes. Though at server side, if it's too much trouble, the packer can
 just ignore open packs and use only closed ones.

Its not trouble once the code is written. We were just trying to be
expedient in producing a prototype that we could start to deploy on
real-world workloads. Enumerating the non-closed-pack objects using
the classical implementation is still slow and consumes CPU time at
the server, using partial bitmaps should eliminate most of that CPU
usage and reduce server loads.

One of the more troublesome problems is building the bitmaps is
difficult from a streaming processor like index-pack. You need the
reachability graph for all objects, which is not currently produced
when moving data over the wire. We do an fsck after-the-fact to verify
we didn't get corrupt data, but this is optional and currently after
the pack is stored. We need to refactor this code to run earlier to
get the bitmap built. If we take Peff's idea and put the bitmap data
into a new stream rather than the pack-*.idx file we can produce the
bitmap at the same time as the fsck check, which is probably a simpler
change.

 We could have one leaf bitmap per pack to mark all leaves where
 we'll need to traverse outside the pack. Commit leaves are the best as
 we can potentially reuse commit bitmaps from other packs. Tree leaves
 will be followed in the normal/slow way.

 Yes, Colby proposed the same idea.

 We cannot make a leaf bitmap per pack. The leaf SHA-1s are not in
 the pack and therefore cannot have a bit assigned to them.

 We could mark all objects _in_ the pack that lead to an external
 object. That's what I meant by leaves. We need to parse the leaves to
 find out actual SHA-1s that are outside the pack.

OK, yes, I was being pretty stupid. Of course we could mark the
objects _in_ the pack as leaves and parse the leaves when we need to
find the external pointers.

 Or we could go with
 your approach below too.

I actually think my approach may be better. The root tree of a leaf
commit would need to be scanned every time to identify trees that are
reachable from this leaf commit, but are not reachable in the ancestry
of the leaf's parents. This turns out to be rather expensive to
compute every time a server or an fsck algorithm considers the partial
pack. Its also somewhat uncommon for such an object to exist, it has
to happen by an unrelated side branch introducing the same object and
the creator of the pack seeing that object already exist and not
including it in the pack.

Defining the pack's edge as a list of SHA-1s not in this pack but
known to be required allows us to compute that leaf root tree
reachability once, and never consider parsing it again. Which saves
servers that host frequently accessed Git repositories but aren't
repacking all of the time. (FWIW we repack frequently, I hear GitHub
does too, because a fully repacked repository serves clients better
than a partially packed one.)

 We could
 add a new section that listed the unique leaf SHA-1s in their own
 private table, and then assigned per bitmap a leaf bitmap that set to
 1 for any leaf object that is outside of the pack.

 One of the problems we have seen with these non-closed packs is they
 waste an incredible amount of disk. As an example, do a `git fetch`
 from Linus tree when you are more than a few weeks behind. You will
 get back more than 100 objects, so the thin pack will be saved and
 completed with additional base objects. That thin pack will go from a
 few MiBs to more than 40 MiB of data on disk, thanks to the redundant
 base objects being appended to the end of the pack. For most uses
 these packs are best eliminated and replaced with a new complete
 closure pack. The redundant base objects disappear, and Git stops
 wasting a huge amount of disk.

 That's probably a different problem. I appreciate disk savings but I
 would not want to wait a few more minutes for repack on every
 git-fetch. But if this bitmap thing makes repack much faster than
 currently, repacking after every git-fetch may become practical.

I know the Counting objects phase of a repack is very expensive, but
so too is the time required to do the IO in and out of every object in
the repository. Spinning disks only transfer data so fast. Assuming
the drive can move 50 MiB/s each way, a 500 MiB repository will take
10 seconds just to write back out the new pack. You aren't ever going
to want to wait for repacking during git-fetch.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a 

Re: Commit cache to speed up rev-list and merge

2012-09-30 Thread Shawn Pearce
On Sun, Sep 30, 2012 at 7:05 PM, Nguyen Thai Ngoc Duy pclo...@gmail.com wrote:
 On Mon, Oct 1, 2012 at 8:49 AM, Shawn Pearce spea...@spearce.org wrote:
 On Thu, Sep 27, 2012 at 7:14 PM, Nguyen Thai Ngoc Duy pclo...@gmail.com 
 wrote:
 On Thu, Sep 27, 2012 at 10:51 PM, Shawn Pearce spea...@spearce.org wrote:
 In Linus' Linux kernel tree there are currently about 323,178 commits.
 If we store just the pre-parsed commit time as an int32 field this is
 an additional 1.2 MiB of data in the pack-*.idx file, assuming we can
 use additional data like pack offset position to correlate commit to
 the parsed int. If we stored parent pointers in a similar way you
 probably need at least 3.6 MiB of additional disk space on the index.
 For example, use 12 bytes for each commit to store enough of the
 parsed commit time to sort commits, and up to 2 parent pointers per
 commit with a reserved magic value for octopus merges to mean the
 commit itself has to be parsed to get the graph structure correct.

 This is much better than my naive approach (storing sha-1 and
 timestamps). We could use less space by storing parent pointer of
 non-merge commits only. Merge commits linux-2.6 is 6% the number of
 commits. git.git has higher percentage, 21%. I bet many projects do
 not merge as much and the number of merge commits is less than 5%.

 Some projects merge quite often. Android's frameworks/base repository
 has a very large number of merges. Out of 79905 commits reachable from
 the master branch, 65.3% are merges. So actually there are more merge
 commits in the Android history than there are code commits. A cache of
 only non-merges may be worthless on such a history.

 The good thing about these cache is it's configurable. Merge-preferred
 projects can choose to cache the first two parents. Non-merge projects
 can choose to cache just the first parent. We don't need a fixed
 format for both.

Git has enough magic switches. It doesn't need yet another magic
switch that one group of users needs to set, and another can safely
ignore because their project's usage just happens to align with Linus
Torvald's current world view.
--
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] Remove the hard coded length limit on variable names in config files

2012-09-30 Thread Michael Haggerty
On 09/30/2012 08:20 PM, Ben Walton wrote:
 The patch doesn't apply to the current master; it appears to have been
 built against master 883a2a3504 (2012-02-23) or older.  It will have to
 be rebased to the current master.
 
 Junio had asked that it be based on maint so that's what I (thought
 I?) did.  I'm happy to redo it against master if that's better though.

That explains it.  Sorry, I hadn't seen that conversation.  (In the
future, if a patch applies against something other than master, please
add a note in the cover letter or in the patch comment after the --.)

It is OK with me to leave the patch against maint, if that is what Junio
wanted.  It would help, though, if you rebase it to the latest maint
(the conflict seems easy to fix).

Thanks,
Michael

-- 
Michael Haggerty
mhag...@alum.mit.edu
http://softwareswirl.blogspot.com/
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


git pull --no-ff documentation

2012-09-30 Thread 乙酸鋰
Hi,

The order of options in git pull is not clear in the documentation
It only says
git pull [options] [repository [refspec...]]
So we have no idea which options should come first

I tried
git pull -v --no-tags --progress --no-ff origin
but failed with unknown option 'no-ff'.

But if I ran
git pull -v --no-ff  --no-tags --progress origin
it succeeded.

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


Re: git pull --no-ff documentation

2012-09-30 Thread Junio C Hamano
乙酸鋰 ch3co...@gmail.com writes:

 The order of options in git pull is not clear in the documentation
 It only says
 git pull [options] [repository [refspec...]]
 So we have no idea which options should come first

 I tried
 git pull -v --no-tags --progress --no-ff origin
 but failed with unknown option 'no-ff'.

 But if I ran
 git pull -v --no-ff  --no-tags --progress origin
 it succeeded.

This actually is not about --no-ff but about --no-tags.  Any option
that pull itself does not care about stops the command line parser
and the remainder of the command line is fed to underlying fetch.

Perhaps something like this?  But you should trace the codepath
involved to see if this covers all uses of the --tags before using
it for real projects, as I didn't.

 git-pull.sh | 21 ++---
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git i/git-pull.sh w/git-pull.sh
index 2a10047..a53c1e5 100755
--- i/git-pull.sh
+++ w/git-pull.sh
@@ -39,7 +39,7 @@ test -z $(git ls-files -u) || die_conflict
 test -f $GIT_DIR/MERGE_HEAD  die_merge
 
 strategy_args= diffstat= no_commit= squash= no_ff= ff_only=
-log_arg= verbosity= progress= recurse_submodules=
+log_arg= verbosity= progress= recurse_submodules= fetch_tags=
 merge_args= edit=
 curr_branch=$(git symbolic-ref -q HEAD)
 curr_branch_short=${curr_branch#refs/heads/}
@@ -62,6 +62,8 @@ do
progress=--no-progress ;;
-n|--no-stat|--no-summary)
diffstat=--no-stat ;;
+   -t|--t|--ta|--tag|--tags|--no-tags)
+   fetch_tags=$1 ;;
--stat|--summary)
diffstat=--stat ;;
--log|--no-log)
@@ -141,15 +143,12 @@ done
 
 error_on_no_merge_candidates () {
exec 2
-   for opt
-   do
-   case $opt in
-   -t|--t|--ta|--tag|--tags)
-   echo Fetching tags only, you probably meant:
-   echo   git fetch --tags
-   exit 1
-   esac
-   done
+   case $fetch_tags in
+   -t|--t|--ta|--tag|--tags)
+   echo Fetching tags only, you probably meant:
+   echo   git fetch --tags
+   exit 1
+   esac
 
if test true = $rebase
then
@@ -213,7 +212,7 @@ test true = $rebase  {
done
 }
 orig_head=$(git rev-parse -q --verify HEAD)
-git fetch $verbosity $progress $dry_run $recurse_submodules --update-head-ok 
$@ || exit 1
+git fetch $verbosity $progress $dry_run $recurse_submodules $fetch_tags 
--update-head-ok $@ || exit 1
 test -z $dry_run || exit 0
 
 curr_head=$(git rev-parse -q --verify HEAD)
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 8/9] longest_ancestor_length(): resolve symlinks before comparing paths

2012-09-30 Thread Michael Haggerty
On 09/30/2012 10:00 AM, Junio C Hamano wrote:
 Michael Haggerty mhag...@alum.mit.edu writes:
 
 longest_ancestor_length() relies on a textual comparison of directory
 parts to find the part of path that overlaps with one of the paths in
 prefix_list.  But this doesn't work if any of the prefixes involves a
 symbolic link, because the directories will look different even though
 they might logically refer to the same directory.  So canonicalize the
 paths listed in prefix_list using real_path_if_valid() before trying
 to find matches.
 
 I somehow feel that this is making the logic unnecessarily
 convoluted by solving the problem at a wrong level.
 
 If longest_ancestor_length() takes a single string and a list of
 candidate string prefixes, conceptually it should be usable for any
 hierarchy-looking string that uses slashes as hierarchy separator
 (e.g. refs that may be stored in packed-refs that you cannot expect
 lstat(2) or readlink(2) to give you any sensible results).
 
 The real problem is that the list given from the environment may
 contain a path that violates that it suffices to take the longest
 string-prefix taking slashes into account assumption in such a
 generic l-a-l implementation, no?  And this patch solves it by
 making l-a-l _less_ generic and forcing it to be aware of the glitch
 of its caller (you can either blame clueless user who lies when
 setting the GIT_CEILING_DIRECTORIES by including paths contaminated
 with symlinks, or blame the calling setup_git_directory_gently_1()
 function that does not resolve the symbolic links before calling
 this function).
 
 As l-a-l is only used by the stop at the ceiling logic, isn't it a
 far simpler solution to keep the function work at the string level,
 and make the caller fix its input, i.e. the value taken from the
 environment variable, before calling it?  That is, grab the value of
 GIT_CEILING_DIRECTORIES, split it into a list at PATH_SEP (while
 rejecting any non-absolute paths), normalize the elements of that
 list by resolving symbolic links, and then pass the cwd[] and the
 normalized string list to l-a-l?
 
 The resulting callsite in setup_git_directory_gently_1() would pass
 cwd[] and the ceiling_dirs (which now is a string list), all of
 whose elements would happen to begin with / (or dos drive prefix
 followed by the root symbol), but l-a-l can be written in such a
 way that it does not even require that all the input has to begin at
 root, which would later make it usable with things that are not
 paths (references, for example, all of which begin with refs/ and
 not /refs/).

I agree that longest_ancestor_length() is not very generic or
interesting anymore.  Nearly all of its added value comes from the
normalize_path_callback() helper function.  One possibility would be to
inline it at the one place it is called.

The function string_list_longest_prefix() was my attempt to isolate the
kernel of generic functionality from longest_ancestor_path().  It is
*almost* the function that you are proposing, with the exception that it
does not ensure that the prefix match ends at a / boundary.  So
another alternative could be to change this function to respect /
boundaries.  (After the change, the function might not belong in the
string-list API anymore.)

However, the semantics of a function that matches prefixes at /
boundaries is not entirely obvious.  Suppose we would implement the test
via a function like path_prefixcmp(path, prefix).  I can think of a few
policy questions that would have to be answered:

* Is a trailing slash on the prefix argument required, optional, or
prohibited?  What if the prefix is / or // or c:/?

* Is a trailing slash on the path argument optional/prohibited?  Are /
or // allowed as path arguments?

* Is a path its own prefix?

path_prefixcmp(a/b, a/b) - true or false?

(For the implementation of longest_ancestor_path(), we would prefer this
to return false.)  Or does the answer depend on whether the prefix has
a trailing slash?

path_prefixcmp(a/b, a/b) - true?
path_prefixcmp(a/b, a/b/) - false?

Part of the reason that I implemented string_list_longest_prefix()
instead of the function that you suggest is that the behavior of the
former is far more obvious.

I think I would advocate that the prefix has to match the front of the
path exactly (including any trailing slashes) and either

strlen(prefix) == 0
or the prefix ended with a '/'
or the prefix and path are identical
or the character in path following the matching part is a '/'

This would allow the is path its own prefix policy to be decided by
the caller by either including or omitting a trailing slash on the
prefix argument.

Michael

-- 
Michael Haggerty
mhag...@alum.mit.edu
http://softwareswirl.blogspot.com/
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Commit cache to speed up rev-list and merge

2012-09-30 Thread Nguyen Thai Ngoc Duy
On Mon, Oct 1, 2012 at 9:27 AM, Shawn Pearce spea...@spearce.org wrote:
 Git has enough magic switches. It doesn't need yet another magic
 switch that one group of users needs to set, and another can safely
 ignore because their project's usage just happens to align with Linus
 Torvald's current world view.

I see it as tuning, not switching.  It's like setting the number of
commits where bitmaps are taken. We can see the commit cache as a
table, where columns are commit properties. We have a column for date,
one for the first parent. Users can choose to have a third column for
the second parent, or another one for root tree sha-1. The
implementation could be made generic to support caching any n
sha1-columns.
-- 
Duy
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 8/9] longest_ancestor_length(): resolve symlinks before comparing paths

2012-09-30 Thread Junio C Hamano
Michael Haggerty mhag...@alum.mit.edu writes:

 I think I would advocate that the prefix has to match the front of
 the path exactly (including any trailing slashes) and either

 strlen(prefix) == 0
 or the prefix ended with a '/'
 or the prefix and path are identical
 or the character in path following the matching part is a '/'

 This would allow the is path its own prefix policy to be decided by
 the caller by either including or omitting a trailing slash on the
 prefix argument.

I think that is sensible thing to do.

The primary thing I found questionable was that the function, given
/net/wink/project/frotz to check against /pub:/s (or /pub/:/s/
if you like), will report that /net/wink/project directory is the
longest ancestor, when /s is a symlink that happens to point at
/net/wink/project.  It is very counter-intuitive when you view its
two input strings as strings.  By making its sole caller expand the
symbolic links, it would be a lot clearer what is going on to
anybody who follow the codepath.  We have one path obtained from
getcwd() and a set of paths all of which are real paths without
symbolic aliasing, and we check if one among the latter cover
an earlier part of the former.

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