* git check-ignore --verbose fails oddly when invoked via an alias
@ 2020-05-10 19:59 D. Ben Knoble
2020-05-11 0:24 ` Đoàn Trần Công Danh
0 siblings, 1 reply; 2+ messages in thread
From: D. Ben Knoble @ 2020-05-10 19:59 UTC (permalink / raw)
To: git
Hello all,
I have some bizarre behavior I cannot explain. Worse, I've had a hard
time coming up with a minimal test-case for it.
I have the following two aliases:
ig = check-ignore
igv = !git ig --verbose
I use them to verify git-ignore rules occasionally. Today, I was
working on a project where git igv * kept failing (exit code 1,
indicating none of the provided files are ignored). However, when I do
git check-ignore --verbose *, I get the expected output.
You'll even see in the GIT_TRACE outputs above that one behaves very
differently from the other for unknown reasons
Debugging information:
$ pwd
/Users/Knoble/write/junk-drawer/code
$ g rev-parse --show-toplevel
/Users/Knoble/write/junk-drawer
$ tree -a sml-binary
sml-binary/
├── .cm
│ ├── GUID
│ │ └── myprog.sml
│ ├── SKEL
│ │ └── myprog.sml
│ └── amd64-unix
│ └── myprog.sml
├── .gitignore
├── Makefile
├── myprog
├── myprog.amd64-darwin
├── myprog.cm
├── myprog.sml
└── tmp
├── bin
│ └── myprog
└── lib
└── myprog.amd64-darwin
7 directories, 11 files
$ cat sml-binary/.gitignore
myprog
myprog.amd64-darwin
$ g check-ignore sml-binary/*
sml-binary/myprog
sml-binary/myprog.amd64-darwin
$ g check-ignore --verbose sml-binary/*
code/sml-binary/.gitignore:1:myprog sml-binary/myprog
code/sml-binary/.gitignore:2:myprog.amd64-darwin sml-binary/myprog.amd64-darwin
$ g ig sml-binary/*
sml-binary/myprog
sml-binary/myprog.amd64-darwin
$ g igv sml-binary/*
$ echo $?
1
$ pushd sml-binary/
~/write/junk-drawer/code/sml-binary ~/write/junk-drawer/code
~/write/junk-drawer/code/sml-binary
$ g ig *
myprog
myprog.amd64-darwin
$ g ig --verbose *
code/sml-binary/.gitignore:1:myprog myprog
code/sml-binary/.gitignore:2:myprog.amd64-darwin myprog.amd64-darwin
$ g igv *
$ echo $?
1
$ GIT_TRACE2=2 g igv *
15:48:21.773549 common-main.c:48 version 2.26.2
15:48:21.773904 common-main.c:49 start git igv
Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:48:21.774443 git.c:697 cmd_name
_run_dashed_ (_run_dashed_)
15:48:21.774473 run-command.c:735 child_start[0]
git-igv Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:48:21.774735 run-command.c:950 child_exit[0] pid:-1
code:-1 elapsed:0.000249
15:48:21.775368 repository.c:130 worktree
/Users/Knoble/write/junk-drawer
15:48:21.775427 git.c:352 alias igv -> 'git ig
--verbose' Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml
tmp
15:48:21.775439 git.c:354 cmd_name
_run_shell_alias_ (_run_dashed_/_run_shell_alias_)
15:48:21.775445 run-command.c:735 child_start[1] 'git
ig --verbose' Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml
tmp
15:48:21.786123 common-main.c:48 version 2.26.2
15:48:21.786579 common-main.c:49 start git ig
--verbose Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:48:21.787201 git.c:697 cmd_name
_run_dashed_ (_run_dashed_/_run_shell_alias_/_run_dashed_)
15:48:21.787243 run-command.c:735 child_start[0]
git-ig --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:48:21.787464 run-command.c:950 child_exit[0] pid:-1
code:-1 elapsed:0.000216
15:48:21.787781 git.c:389 alias ig ->
check-ignore --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:48:21.787794 git.c:753 cmd_name
_run_git_alias_
(_run_dashed_/_run_shell_alias_/_run_dashed_/_run_git_alias_)
15:48:21.787801 run-command.c:735 child_start[1] git
check-ignore --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:48:21.793959 common-main.c:48 version 2.26.2
15:48:21.794206 common-main.c:49 start
/usr/local/Cellar/git/2.26.2/libexec/git-core/git check-ignore
--verbose Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:48:21.794427 repository.c:130 worktree
/Users/Knoble/write/junk-drawer
15:48:21.794671 git.c:440 cmd_name
check-ignore (_run_dashed_/_run_shell_alias_/_run_dashed_/_run_git_alias_/check-ignore)
15:48:21.795513 git.c:674 exit elapsed:0.003100 code:1
15:48:21.795529 trace2/tr2_tgt_normal.c:123 atexit elapsed:0.003121 code:1
15:48:21.795935 run-command.c:990 child_exit[1]
pid:98684 code:1 elapsed:0.008108
15:48:21.795971 git.c:773 exit elapsed:0.012124 code:1
15:48:21.795995 trace2/tr2_tgt_normal.c:123 atexit elapsed:0.012139 code:1
15:48:21.796351 run-command.c:990 child_exit[1]
pid:98683 code:1 elapsed:0.020896
15:48:21.796391 git.c:358 exit elapsed:0.024746 code:1
15:48:21.796416 trace2/tr2_tgt_normal.c:123 atexit elapsed:0.024761 code:1
$ GIT_TRACE2=2 g ig --verbose *
15:57:42.274337 common-main.c:48 version 2.26.2
15:57:42.274640 common-main.c:49 start git ig
--verbose Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:57:42.275146 git.c:697 cmd_name
_run_dashed_ (_run_dashed_)
15:57:42.275167 run-command.c:735 child_start[0]
git-ig --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:57:42.275422 run-command.c:950 child_exit[0] pid:-1
code:-1 elapsed:0.000246
15:57:42.275763 git.c:389 alias ig ->
check-ignore --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:57:42.275781 git.c:753 cmd_name
_run_git_alias_ (_run_dashed_/_run_git_alias_)
15:57:42.275794 run-command.c:735 child_start[1] git
check-ignore --verbose Makefile myprog myprog.amd64-darwin myprog.cm
myprog.sml tmp
15:57:42.282613 common-main.c:48 version 2.26.2
15:57:42.282876 common-main.c:49 start
/usr/local/Cellar/git/2.26.2/libexec/git-core/git check-ignore
--verbose Makefile myprog myprog.amd64-darwin myprog.cm myprog.sml tmp
15:57:42.283146 repository.c:130 worktree
/Users/Knoble/write/junk-drawer
15:57:42.283520 git.c:440 cmd_name
check-ignore (_run_dashed_/_run_git_alias_/check-ignore)
code/sml-binary/.gitignore:1:myprog myprog
code/sml-binary/.gitignore:2:myprog.amd64-darwin myprog.amd64-darwin
15:57:42.284561 git.c:674 exit elapsed:0.003839 code:0
15:57:42.284588 trace2/tr2_tgt_normal.c:123 atexit elapsed:0.003876 code:0
15:57:42.285171 run-command.c:990 child_exit[1]
pid:99078 code:0 elapsed:0.009354
15:57:42.285212 git.c:773 exit elapsed:0.012930 code:0
15:57:42.285246 trace2/tr2_tgt_normal.c:123 atexit elapsed:0.012950 code:0
Failed attempt to produce a minimal example:
$ g init
Dépôt Git vide initialisé dans /private/tmp/git-test/.git/
$ mkdir subdir
$ touch subdir/{a..c}
$ ls
subdir/
$ tree
.
└── subdir
├── a
├── b
└── c
1 directory, 3 files
$ echo a >> subdir/.gitignore
$ g status -s
?? subdir/
$ g add --intend-to-add .
$ g status -s
A subdir/.gitignore
A subdir/b
A subdir/c
$ g commit --all -m 'init'
[master (commit racine) 832876e] init
3 files changed, 1 insertion(+)
create mode 100644 subdir/.gitignore
create mode 100644 subdir/b
create mode 100644 subdir/c
$ g igv *
$ echo $?
1
# ^^^ expected, nothing ignored
$ g igv subdir/*
subdir/.gitignore:1:a subdir/a
# ^^^ also expected???
D. Ben Knoble
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: git check-ignore --verbose fails oddly when invoked via an alias
2020-05-10 19:59 git check-ignore --verbose fails oddly when invoked via an alias D. Ben Knoble
@ 2020-05-11 0:24 ` Đoàn Trần Công Danh
0 siblings, 0 replies; 2+ messages in thread
From: Đoàn Trần Công Danh @ 2020-05-11 0:24 UTC (permalink / raw)
To: D. Ben Knoble; +Cc: git
On 2020-05-10 15:59:08-0400, "D. Ben Knoble" <ben.knoble@gmail.com> wrote:
> I have the following two aliases:
>
> ig = check-ignore
> igv = !git ig --verbose
Your "git igv" is an alias to a shell command.
> $ pwd
> /Users/Knoble/write/junk-drawer/code
> $ g rev-parse --show-toplevel
> /Users/Knoble/write/junk-drawer
You're working on subdirectory of git worktree.
> $ tree -a sml-binary
> sml-binary/
[.snip.]
> $ cat sml-binary/.gitignore
> myprog
> myprog.amd64-darwin
> $ g check-ignore sml-binary/*
> sml-binary/myprog
> sml-binary/myprog.amd64-darwin
> $ g check-ignore --verbose sml-binary/*
> code/sml-binary/.gitignore:1:myprog sml-binary/myprog
> code/sml-binary/.gitignore:2:myprog.amd64-darwin sml-binary/myprog.amd64-darwin
> $ g ig sml-binary/*
> sml-binary/myprog
> sml-binary/myprog.amd64-darwin
> $ g igv sml-binary/*
> $ echo $?
> 1
In git-config(1), we've noted that:
Note that
shell commands will be executed from the top-level directory of a
repository, which may not necessarily be the current directory.
GIT_PREFIX is set as returned by running git rev-parse
--show-prefix from the original current directory. See git-rev-
parse(1).
Which is the parent directory of your "$PWD".
So, two below commands are equivalent:
$ git igv sml-binary/*
$ (cd .. && git check-ignore --verbose sml-binary/myprog sml-binary/myprog.amd64-darwin <and other files>)
From Git 2.23.0, Git allows recursive alias expansion:
igv = ig --verbose
--
Danh
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-05-11 0:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-10 19:59 git check-ignore --verbose fails oddly when invoked via an alias D. Ben Knoble
2020-05-11 0:24 ` Đoàn Trần Công Danh
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 NNTP newsgroup(s).