aboutsummaryrefslogtreecommitdiff
path: root/src/libfetchers/git.cc
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-07 14:33:43 +0100
committereldritch horrors <pennae@lix.systems>2024-03-07 14:50:43 +0100
commit232f4feacebb5c9ea7072238ae3e565c2c292b70 (patch)
tree7e5856260181413f2a82030202a9ce74bfde6213 /src/libfetchers/git.cc
parent852bc55c870e32f18ca64cb7dcbdf225b137ed3c (diff)
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
Diffstat (limited to 'src/libfetchers/git.cc')
-rw-r--r--src/libfetchers/git.cc25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc
index 321950e63..1689155b3 100644
--- a/src/libfetchers/git.cc
+++ b/src/libfetchers/git.cc
@@ -377,15 +377,26 @@ struct GitInputScheme : InputScheme
assert(sourcePath);
auto gitDir = ".git";
- runProgram("git", true,
- { "-C", *sourcePath, "--git-dir", gitDir, "add", "--intent-to-add", "--", std::string(file) });
+ auto result = runProgram(RunOptions {
+ .program = "git",
+ .args = {"-C", *sourcePath, "--git-dir", gitDir, "check-ignore", "--quiet", std::string(file)},
+ });
+ auto exitCode = WEXITSTATUS(result.first);
- // Pause the logger to allow for user input (such as a gpg passphrase) in `git commit`
- logger->pause();
- Finally restoreLogger([]() { logger->resume(); });
- if (commitMsg)
+ if (exitCode != 0) {
+ // The path is not `.gitignore`d, we can add the file.
runProgram("git", true,
- { "-C", *sourcePath, "--git-dir", gitDir, "commit", std::string(file), "-m", *commitMsg });
+ { "-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`
+ logger->pause();
+ Finally restoreLogger([]() { logger->resume(); });
+ runProgram("git", true,
+ { "-C", *sourcePath, "--git-dir", gitDir, "commit", std::string(file), "-m", *commitMsg });
+ }
+ }
}
std::pair<bool, std::string> getActualUrl(const Input & input) const