Merge pull request #9324 from 9999years/fix-8854-take-2
Don't attempt to `git add` ignored files (cherry picked from commit 359990dfdc713c80aabd7ea6f7e4528628fbe108) === also added a regression test that isn't upstream to be sure we're actually fixing the bug. Change-Id: I8267a3d0ece9909d8008b7435b90e7b3eee366f6
This commit is contained in:
parent
852bc55c87
commit
232f4feace
3 changed files with 64 additions and 7 deletions
|
@ -377,16 +377,27 @@ struct GitInputScheme : InputScheme
|
||||||
assert(sourcePath);
|
assert(sourcePath);
|
||||||
auto gitDir = ".git";
|
auto gitDir = ".git";
|
||||||
|
|
||||||
|
auto result = runProgram(RunOptions {
|
||||||
|
.program = "git",
|
||||||
|
.args = {"-C", *sourcePath, "--git-dir", gitDir, "check-ignore", "--quiet", std::string(file)},
|
||||||
|
});
|
||||||
|
auto exitCode = WEXITSTATUS(result.first);
|
||||||
|
|
||||||
|
if (exitCode != 0) {
|
||||||
|
// The path is not `.gitignore`d, we can add the file.
|
||||||
runProgram("git", true,
|
runProgram("git", true,
|
||||||
{ "-C", *sourcePath, "--git-dir", gitDir, "add", "--intent-to-add", "--", std::string(file) });
|
{ "-C", *sourcePath, "--git-dir", gitDir, "add", "--intent-to-add", "--", std::string(file) });
|
||||||
|
|
||||||
|
|
||||||
|
if (commitMsg) {
|
||||||
// Pause the logger to allow for user input (such as a gpg passphrase) in `git commit`
|
// Pause the logger to allow for user input (such as a gpg passphrase) in `git commit`
|
||||||
logger->pause();
|
logger->pause();
|
||||||
Finally restoreLogger([]() { logger->resume(); });
|
Finally restoreLogger([]() { logger->resume(); });
|
||||||
if (commitMsg)
|
|
||||||
runProgram("git", true,
|
runProgram("git", true,
|
||||||
{ "-C", *sourcePath, "--git-dir", gitDir, "commit", std::string(file), "-m", *commitMsg });
|
{ "-C", *sourcePath, "--git-dir", gitDir, "commit", std::string(file), "-m", *commitMsg });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<bool, std::string> getActualUrl(const Input & input) const
|
std::pair<bool, std::string> getActualUrl(const Input & input) const
|
||||||
{
|
{
|
||||||
|
|
45
tests/functional/flakes/develop-r8854.sh
Normal file
45
tests/functional/flakes/develop-r8854.sh
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
source ../common.sh
|
||||||
|
|
||||||
|
# regression test for #8854 (nix develop fails when lockfile is ignored)
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
|
||||||
|
|
||||||
|
# Create flake under test.
|
||||||
|
mkdir -p $TEST_HOME/t
|
||||||
|
cp ../shell-hello.nix ../config.nix $TEST_HOME/t
|
||||||
|
cat <<EOF >$TEST_HOME/t/flake.nix
|
||||||
|
{
|
||||||
|
inputs.nixpkgs.url = "$TEST_HOME/nixpkgs";
|
||||||
|
outputs = {self, nixpkgs}: {
|
||||||
|
packages.$system.hello = (import ./config.nix).mkDerivation {
|
||||||
|
name = "hello";
|
||||||
|
outputs = [ "out" "dev" ];
|
||||||
|
meta.outputsToInstall = [ "out" ];
|
||||||
|
buildCommand = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create fake nixpkgs flake.
|
||||||
|
mkdir -p $TEST_HOME/nixpkgs
|
||||||
|
cp ../config.nix ../shell.nix $TEST_HOME/nixpkgs
|
||||||
|
cat <<EOF >$TEST_HOME/nixpkgs/flake.nix
|
||||||
|
{
|
||||||
|
outputs = {self}: {
|
||||||
|
legacyPackages.$system.bashInteractive = (import ./shell.nix {}).bashInteractive;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cd $TEST_HOME/t
|
||||||
|
|
||||||
|
git init .
|
||||||
|
echo flake.lock > .gitignore
|
||||||
|
git add config.nix shell-hello.nix flake.nix .gitignore
|
||||||
|
|
||||||
|
# flake.lock is ignored, but nix develop should still not fail
|
||||||
|
nix develop .#hello <<<"true"
|
||||||
|
|
||||||
|
clearStore
|
|
@ -3,6 +3,7 @@ nix_tests = \
|
||||||
init.sh \
|
init.sh \
|
||||||
flakes/flakes.sh \
|
flakes/flakes.sh \
|
||||||
flakes/develop.sh \
|
flakes/develop.sh \
|
||||||
|
flakes/develop-r8854.sh \
|
||||||
flakes/run.sh \
|
flakes/run.sh \
|
||||||
flakes/mercurial.sh \
|
flakes/mercurial.sh \
|
||||||
flakes/circular.sh \
|
flakes/circular.sh \
|
||||||
|
|
Loading…
Reference in a new issue