git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [BUG] gitattribute macro expansion oddity

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jan 10, 2012, 09:01 UTC
Message-ID
<4F0BFE6E.6080904@alum.mit.edu>
In-Reply-To
<20120110070300.GA17086@sigill.intra.peff.net>
On 01/10/2012 08:03 AM, Jeff King wrote:
Show 6 quoted lines
> I'm seeing some very odd behavior with git's attribute expansion for
> diffs. You can see it with this repository:
> 
>   git clone git://github.com/libgit2/libgit2sharp.git
> 
> Try a diff of a non-binary file: [...]

The problem has nothing with diffing; simply interrogating the attribute values gives different results depending on the order of the files:

$ git check-attr --all Lib/NativeBinaries/x86/git2.dll LibGit2Sharp/Configuration.cs Lib/NativeBinaries/x86/git2.dll: binary: set Lib/NativeBinaries/x86/git2.dll: diff: unset Lib/NativeBinaries/x86/git2.dll: text: unset LibGit2Sharp/Configuration.cs: binary: set LibGit2Sharp/Configuration.cs: diff: unset LibGit2Sharp/Configuration.cs: text: unset LibGit2Sharp/Configuration.cs: crlf: set $ git check-attr --all LibGit2Sharp/Configuration.cs Lib/NativeBinaries/x86/git2.dll LibGit2Sharp/Configuration.cs: diff: csharp LibGit2Sharp/Configuration.cs: crlf: set Lib/NativeBinaries/x86/git2.dll: binary: set Lib/NativeBinaries/x86/git2.dll: diff: unset Lib/NativeBinaries/x86/git2.dll: text: unset

It also doesn't depend on the fact that Lib/.gitattributes uses CRLF as its EOL, nor does it depend on the use of the "binary" macro. However, it does depend on the fact that the directory name "Lib" matches the first part of the directory name "LibGit2Sharp". Here is a simplified demonstration of the problem:

a=LibA/a.txt b=Lib/b.bin rm -rf foo git init foo cd foo mkdir $(dirname $a) $(dirname $b) touch $a $b echo '*.txt foo' >.gitattributes echo '* bar' >$(dirname $b)/.gitattributes git add . git commit -am 'Demonstrate problem' echo '=================================================' git check-attr --all $b $a echo '=================================================' git check-attr --all $a $b echo '================================================='

The attributes of $a are different depending on what order $a and $b appear in the "git check-attr" command line.

Changing the example to "a=foo/a.txt" makes the problem go away.
Michael
-- 
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
Previous: Jeff KingNext: Jeff King
Message 2 of 13 in “[BUG] gitattribute macro expansion oddity”
  1. Jeff KingJan 10, 2012
  2. Michael HaggertyJan 10, 2012
  3. Jeff KingJan 10, 2012
  4. attr: don't confuse prefixes with leading directoriesJeff King, Jan 10, 2012
  5. Jeff KingJan 10, 2012
  6. Junio C HamanoJan 10, 2012
  7. Jeff KingJan 10, 2012
  8. Jeff KingJan 10, 2012
  9. Junio C HamanoJan 10, 2012
  10. Jeff KingJan 10, 2012
  11. Junio C HamanoJan 10, 2012
  12. Junio C HamanoJan 10, 2012
  13. Michael HaggertyJan 11, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.