git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Bug: 'git ls-files' doesn't work on submodule in post-commit hook
@ 2020-02-24  7:03 Stefan
  2020-02-25  1:13 ` brian m. carlson
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan @ 2020-02-24  7:03 UTC (permalink / raw)
  To: git

Hey there,

I think I found a bug in git: I want to use 'git ls-files' onto a git submodule, called in a post-commit hook of main repository, which doesn’t work.
The same call in a post-checkout hook works perfectly.

Example setup to try it out, use a empty (temporary) folder:
--- snipp ---
mkdir git-submodulerepo
cd git-submodulerepo
git init
git config user.email "you@example.com"
git config user.name "Your Name"
echo "nothing" > submodule_file.txt
git add submodule_file.txt
git commit submodule_file.txt -m "Add my file"
cd ..
 
mkdir git-repo
cd git-repo
git init
git config user.email "you@example.com"
git config user.name "Your Name"
echo "nothing" > rubbish.txt
git add rubbish.txt
git commit rubbish.txt -m "Add my rubbish"
 
git submodule add ../git-submodulerepo
 
printf '#!/bin/bash\ncd git-submodulerepo\necho Git says my files are:\ngit ls-files\necho ---------------\necho Filesystem says my files are:\nls -w1\necho ---------------\n' > .git/hooks/post-commit
chmod +x .git/hooks/post-commit
cp .git/hooks/post-commit .git/hooks/post-checkout
chmod +x .git/hooks/post-checkout
--- snapp ---


So 'git ls-files' call in post-checkout hook works:
$ git checkout HEAD
A       .gitmodules
A       git-submodulerepo
Git says my files are:
submodule_file.txt
---------------
Filesystem says my files are:
submodule_file.txt
---------------
 
A 'git ls-files' in post-commit doesn’t work:
$  echo nothing >> rubbish.txt && git commit rubbish.txt -m "Add just rubbish"
Git says my files are:
---------------
Filesystem says my files are:
submodule_file.txt
---------------
[master e05efb1] just rubbish
1 file changed, 1 insertion(+)
 

This was tested using git version 2.25.0.windows.1
With git version 2.21.0 (cygwin) git ls-files outputs "fatal: .git/index: index file open failed: Not a directory"

I didn’t test other hooks.

Calling "git ls-files" in hook for your main repository (and not a submodule) works for both cases.
I checked for basic things (I'm in submodule directory in both hooks), so I guess this is a bug in git.

Any questions?
Thanks in advance!

Stefan

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Bug: 'git ls-files' doesn't work on submodule in post-commit hook
  2020-02-24  7:03 Bug: 'git ls-files' doesn't work on submodule in post-commit hook Stefan
@ 2020-02-25  1:13 ` brian m. carlson
  2020-02-25  7:10   ` Stefan
  0 siblings, 1 reply; 3+ messages in thread
From: brian m. carlson @ 2020-02-25  1:13 UTC (permalink / raw)
  To: Stefan; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 977 bytes --]

On 2020-02-24 at 07:03:15, Stefan wrote:
> So 'git ls-files' call in post-checkout hook works:
> $ git checkout HEAD
> A       .gitmodules
> A       git-submodulerepo
> Git says my files are:
> submodule_file.txt
> ---------------
> Filesystem says my files are:
> submodule_file.txt
> ---------------
>  
> A 'git ls-files' in post-commit doesn’t work:
> $  echo nothing >> rubbish.txt && git commit rubbish.txt -m "Add just rubbish"
> Git says my files are:
> ---------------
> Filesystem says my files are:
> submodule_file.txt
> ---------------
> [master e05efb1] just rubbish
> 1 file changed, 1 insertion(+)

Can you check to see if the GIT_DIR environment variable is set in your
hook?  In some cases, Git sets various GIT_* environment variables when
calling a hook or command, and if you want another repository, you'd
need to unset those values.
-- 
brian m. carlson: Houston, Texas, US
OpenPGP: https://keybase.io/bk2204

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 263 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Bug: 'git ls-files' doesn't work on submodule in post-commit hook
  2020-02-25  1:13 ` brian m. carlson
@ 2020-02-25  7:10   ` Stefan
  0 siblings, 0 replies; 3+ messages in thread
From: Stefan @ 2020-02-25  7:10 UTC (permalink / raw)
  To: brian m. carlson, git

Hi brian,

I checked it by replacing the printf line in my example with this one:
printf '#!/bin/bash\necho GIT_DIR is: $GIT_DIR\ncd git-submodulerepo\necho Git says my files are:\ngit ls-files\necho ---------------\necho Filesystem says my files are:\nls -w1\necho ---------------\n' > .git/hooks/post-commit

In both hooks, GIT_DIR is empty, so this shouldn't be the problem.
Thanks anyways.

On 2020-02-25 02:13, brian m. carlson wrote:
> Can you check to see if the GIT_DIR environment variable is set in your
> hook?  In some cases, Git sets various GIT_* environment variables when
> calling a hook or command, and if you want another repository, you'd
> need to unset those values.
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-02-25  7:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-24  7:03 Bug: 'git ls-files' doesn't work on submodule in post-commit hook Stefan
2020-02-25  1:13 ` brian m. carlson
2020-02-25  7:10   ` Stefan

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).