bisect: remove root directory restriction for git bisect
PATCH 1/1 bisect: remove root directory restriction for git bisect
From: sheikh hamza <[email protected]>
according to the open issue #486 the git bisect command should be able to run from inside any subdirectory and in the same disscusion "dscho" gave the directions and those directions lead me the fix of adding SUBDIRECTORY_OK=Yes on L#34 before sourcing git-sh-setup that made it work as in git-sh-setup there was a check on SUBDIRECTORY_OK that prevents it to run in sub directories if it is not set to "ok" as this file was also sourced in other commands that are required to only run from root one of such scripts is git-filter-branch
---
bisect: remove root directory restriction for git bisect
according to the open issue #486 the git bisect command should be able to run from inside any subdirectory and in the same disscusion "dscho" gave the directions and those directions lead me the fix of adding SUBDIRECTORY_OK=Yes on L#34 before sourcing git-sh-setup that made it work as in git-sh-setup there was a check on SUBDIRECTORY_OK that prevents it to run in sub directories if it is not set to "ok" as this file was also sourced in other commands that are required to only run from root one of such scripts is git-filter-branch
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-736%2Fsheikhhamza012%2Fbisect_subdirectory_fix-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-736/sheikhhamza012/bisect_subdirectory_fix-v1
Pull-Request: https://github.com/git/git/pull/736
git-bisect.sh | 1 + t/perf/bisect_regression | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-)
git-bisect.sh +1 -0
@@ -31,6 +31,7 @@ git bisect run <cmd>... Please use "git help bisect" to get the full man page.' +SUBDIRECTORY_OK=Yes OPTIONS_SPEC= . git-sh-setup
t/perf/bisect_regression +2 -4
@@ -57,11 +57,9 @@ tmpdir=$(mktemp -d -t bisect_regression_XXXXXX) || die "Failed to create temp di echo "$oldtime" >"$tmpdir/oldtime" || die "Failed to write to '$tmpdir/oldtime'" echo "$newtime" >"$tmpdir/newtime" || die "Failed to write to '$tmpdir/newtime'" -# Bisecting must be performed from the top level directory (even with --no-checkout) -( - toplevel_dir=$(git rev-parse --show-toplevel) || die "Failed to find top level directory" - cd "$toplevel_dir" || die "Failed to cd into top level directory '$toplevel_dir'" +( + git bisect start --no-checkout "$newrev" "$oldrev" || die "Failed to start bisecting" git bisect run t/perf/bisect_run_script "$test_script" "$test_number" "$tmpdir"
base-commit: 98cedd0233ee88e69711f79d1126b6bd772ff5bd
Signature · 1 line
gitgitgadget
Quoted 3 lines · Sheikh hamza via GitGitGadget
From: sheikh hamza <[email protected]>
according to the open issue #486
What issue #486? Where? The Git project doesn't use issues.
Quoted 3 lines
the git bisect
command should be able to run from inside any
subdirectory
Why should 'git bisect' be able to run from inside any subdirectory (of the working tree, I presume)?
In particular, what happens, if someone starts 'git bisect' from within 'subdir/', and 'git bisect' then checks out an old commit, where said 'subdir/' didn't exist? What happens, if the user runs 'git bisect run ./script' from within 'subdir/', and that 'subdir/' doesn't exist in that old commit? What happens, if 'subdir' does exists in that old commit, but it's a file, not a directory? What happens, if all this is on Windows?
Quoted 9 lines
and in the same disscusion "dscho"
gave the directions and those directions lead me the fix of adding SUBDIRECTORY_OK=Yes on L#34 before sourcing git-sh-setup that made it work as in git-sh-setup there was a check onSUBDIRECTORY_OKthat prevents it to run in sub directories if it is not set to "ok" as this file was also sourced in other commands that are required to only run from root one of such scripts is git-filter-branch
Please don't indent the commit message and use punctuation to make it more readable.
Quoted 59 lines
Signed-off-by sheikh hamza <[email protected]>---
bisect: remove root directory restriction for git bisectaccording to the open issue #486 the git bisect command should be able to run from inside any subdirectory and in the same disscusion "dscho" gave the directions and those directions lead me the fix of adding SUBDIRECTORY_OK=Yes on L#34 before sourcing git-sh-setup that made it work as in git-sh-setup there was a check on
SUBDIRECTORY_OKthat prevents it to run in sub directories if it is not set to "ok" as this file was also sourced in other commands that are required to only run from root one of such scripts is git-filter-branchPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-736%2Fsheikhhamza012%2Fbisect_subdirectory_fix-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-736/sheikhhamza012/bisect_subdirectory_fix-v1
Pull-Request: https://github.com/git/git/pull/736git-bisect.sh | 1 + t/perf/bisect_regression | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-)git-bisect.sh +1
-0@@ -31,6 +31,7 @@ git bisect run <cmd>... Please use "git help bisect" to get the full man page.' +SUBDIRECTORY_OK=Yes OPTIONS_SPEC= . git-sh-setupt/perf/bisect_regression +2
-4@@ -57,11 +57,9 @@ tmpdir=$(mktemp -d -t bisect_regression_XXXXXX) || die "Failed to create temp di echo "$oldtime" >"$tmpdir/oldtime" || die "Failed to write to '$tmpdir/oldtime'" echo "$newtime" >"$tmpdir/newtime" || die "Failed to write to '$tmpdir/newtime'" -# Bisecting must be performed from the top level directory (even with --no-checkout) -( - toplevel_dir=$(git rev-parse --show-toplevel) || die "Failed to find top level directory" - cd "$toplevel_dir" || die "Failed to cd into top level directory '$toplevel_dir'" +( + git bisect start --no-checkout "$newrev" "$oldrev" || die "Failed to start bisecting" git bisect run t/perf/bisect_run_script "$test_script" "$test_number" "$tmpdir"base-commit:
98cedd0233ee88e69711f79d1126b6bd772ff5bdSignature · 1 line
gitgitgadget
i apologize for empty mails, i was configuring the mailer,
by the issue i meant one of those mentioned on gigitgadget's
fork, there this was mentioned as a good entry point project
so thought of doing it as my GSoC microproject, do you think
it makes a good microproject should i continue to work on it ?
Hi Gábor,
Quoted 9 lines · SZEDER Gábor
Quoted 5 lines · Sheikh hamza via GitGitGadget
From: sheikh hamza <[email protected]>
the git bisect
command should be able to run from inside any
subdirectoryWhy should 'git bisect' be able to run from inside any subdirectory (of the working tree, I presume)?
Because other commands also allow the user to run in a subdirectory. For example, git rebase, git checkout, git cherry-pick, etc
Quoted 5 lines
In particular, what happens, if someone starts 'git bisect' from within 'subdir/', and 'git bisect' then checks out an old commit, where said 'subdir/' didn't exist? What happens, if the user runs 'git bisect run ./script' from within 'subdir/', and that 'subdir/' doesn't exist in that old commit?
The same that happens if that situation arises in git rebase or git checkout: the directory is removed unless it is not empty (i.e. if there are untracked files in the directory, or submodules).
Quoted 2 lines
What happens, if 'subdir' does exists in that old commit, but it's a file, not a directory? What happens, if all this is on Windows?
On Windows, the directory is not deletable, of course, and the same thing happens as if an untracked file is still in that directory: it is not deleted.
Quoted 3 lines
Quoted 3 lines
git-bisect.sh | 1 + t/perf/bisect_regression | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-)
The most obvious problem with this patch is that it is not accompanied by a regression test that documents and verifies the intended behavior.
Ciao,
Dscho
Quoted 14 lines · SZEDER Gábor
Quoted 3 lines · Sheikh hamza via GitGitGadget
From: sheikh hamza <[email protected]>
according to the open issue #486
What issue #486? Where? The Git project doesn't use issues.
Quoted 3 lines
the git bisect
command should be able to run from inside any
subdirectoryWhy should 'git bisect' be able to run from inside any subdirectory (of the working tree, I presume)?
Quoted 7 lines
In particular, what happens, if someone starts 'git bisect' from within 'subdir/', and 'git bisect' then checks out an old commit, where said 'subdir/' didn't exist? What happens, if the user runs 'git bisect run ./script' from within 'subdir/', and that 'subdir/' doesn't exist in that old commit? What happens, if 'subdir' does exists in that old commit, but it's a file, not a directory? What happens, if all this is on Windows?
Hmm, I am of two minds. Most certainly, the bisection would break when the directory cannot be removed, and if it can be, then $pwd would become in a weird state and the iteration with the bisect machinery (be it interactive test before saying "bisect good/bad", or the command execution during "bisect run") would fail in a strange and unpredictable ways.
So from that perspective, it does make sense to forbid running "git bisect" from a subdirectory, and we should probably do so on the same principle for "git checkout", "git pull" and many other things.
But even then, it would not probably be foolproof. Another process that the end-user is not even aware of its execution (e.g. virus scanners?) may have a file open in the subdirectory on a filesystem that does not allow directories to be removed while there is an open file descriptor on a file it contains, and would cause the command to fail in a similar way.
So it probably is being too draconian to forbid these commands (not just "git bisect") from being run in a subdirectory for no good reason (i.e. being strict is not helping us much). What would help is to make sure we fail in an understandable way (i.e. "cannot remove directory /foo/bar/boz, so checkout of version v1.2.3 failed" is clearly conveyed to the end user, which we may be already doing in which case that is wonderful).
Quoted 10 lines
Quoted 9 lines
and in the same disscusion "dscho"
gave the directions and those directions lead me the fix of adding SUBDIRECTORY_OK=Yes on L#34 before sourcing git-sh-setup that made it work as in git-sh-setup there was a check onSUBDIRECTORY_OKthat prevents it to run in sub directories if it is not set to "ok" as this file was also sourced in other commands that are required to only run from root one of such scripts is git-filter-branch
Quoted 2 lines
Please don't indent the commit message and use punctuation to make it more readable.
This is a good point.