]> source.dussan.org Git - gitea.git/commitdiff
Add git dashes separator to some "log" and "diff" commands (#23606)
authorwxiaoguang <wxiaoguang@gmail.com>
Sun, 26 Mar 2023 18:31:21 +0000 (02:31 +0800)
committerGitHub <noreply@github.com>
Sun, 26 Mar 2023 18:31:21 +0000 (19:31 +0100)
Reference:
https://github.com/go-gitea/gitea/issues/22578#issuecomment-1444180053

Credits to @tdesveaux , thank you very much for catching the problem. If
you'd like to open a PR, feel free to replace this one.

Git reports fatal errors for ambiguous arguments:

```
fatal: ambiguous argument 'refs/a...refs/b': unknown revision or path not in the working tree.
        Use '--' to separate paths from revisions, like this:
        'git <command> [<revision>...] -- [<file>...]'
```

So the `--` separator is necessary in some cases.

modules/git/repo_compare.go

index 439455e3c295cb67cf7a7041bc8721aa4db055c7..e706275856856e97f456848eb416be2611849253 100644 (file)
@@ -92,8 +92,11 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string,
 
                // We have a common base - therefore we know that ... should work
                if !fileOnly {
+                       // avoid: ambiguous argument 'refs/a...refs/b': unknown revision or path not in the working tree. Use '--': 'git <command> [<revision>...] -- [<file>...]'
                        var logs []byte
-                       logs, _, err = NewCommand(repo.Ctx, "log").AddDynamicArguments(baseCommitID + separator + headBranch).AddArguments(prettyLogFormat).RunStdBytes(&RunOpts{Dir: repo.Path})
+                       logs, _, err = NewCommand(repo.Ctx, "log").AddArguments(prettyLogFormat).
+                               AddDynamicArguments(baseCommitID + separator + headBranch).AddArguments("--").
+                               RunStdBytes(&RunOpts{Dir: repo.Path})
                        if err != nil {
                                return nil, err
                        }
@@ -146,7 +149,8 @@ func (repo *Repository) GetDiffNumChangedFiles(base, head string, directComparis
                separator = ".."
        }
 
-       if err := NewCommand(repo.Ctx, "diff", "-z", "--name-only").AddDynamicArguments(base + separator + head).
+       // avoid: ambiguous argument 'refs/a...refs/b': unknown revision or path not in the working tree. Use '--': 'git <command> [<revision>...] -- [<file>...]'
+       if err := NewCommand(repo.Ctx, "diff", "-z", "--name-only").AddDynamicArguments(base + separator + head).AddArguments("--").
                Run(&RunOpts{
                        Dir:    repo.Path,
                        Stdout: w,
@@ -157,7 +161,7 @@ func (repo *Repository) GetDiffNumChangedFiles(base, head string, directComparis
                        // previously it would return the results of git diff -z --name-only base head so let's try that...
                        w = &lineCountWriter{}
                        stderr.Reset()
-                       if err = NewCommand(repo.Ctx, "diff", "-z", "--name-only").AddDynamicArguments(base, head).Run(&RunOpts{
+                       if err = NewCommand(repo.Ctx, "diff", "-z", "--name-only").AddDynamicArguments(base, head).AddArguments("--").Run(&RunOpts{
                                Dir:    repo.Path,
                                Stdout: w,
                                Stderr: stderr,