diff options
| author | Alex Brainman <alex.brainman@gmail.com> | 2014-12-29 17:13:32 +1100 |
|---|---|---|
| committer | Alex Brainman <alex.brainman@gmail.com> | 2015-01-06 00:49:13 +0000 |
| commit | a46a546183982ea76cdbeb58ee60bd721b78ae8f (patch) | |
| tree | c9d2cf188fad477854baeb37af65b85195f9b9c1 /git-codereview/gofmt.go | |
| parent | 3b683ed37c8eea9d78748cca628f42ea99586324 (diff) | |
| download | go-x-review-a46a546183982ea76cdbeb58ee60bd721b78ae8f.tar.xz | |
git-codereview: make tests pass on windows
- "git gofmt" uses "git checkout-index" command that is broken if
used with many arguments - limit number of arguments passed to
"git checkout-index";
- change / into \ on windows when matching git output on windows;
- add .gitattributes to test repository to make it look more like
all real Go repositories;
- make sure no files left behind in /tmp on windows.
Fixes golang/go#9433.
Change-Id: Ifceacfffd1cd4b02190d7e941611d0d0f3c48cdd
Reviewed-on: https://go-review.googlesource.com/2089
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'git-codereview/gofmt.go')
| -rw-r--r-- | git-codereview/gofmt.go | 72 |
1 files changed, 61 insertions, 11 deletions
diff --git a/git-codereview/gofmt.go b/git-codereview/gofmt.go index 4507a2b..93da314 100644 --- a/git-codereview/gofmt.go +++ b/git-codereview/gofmt.go @@ -145,18 +145,68 @@ func runGofmt(flags int) (files []string, stderrText string) { // Git stores the temporary files, named .merge_*, in the repo root. // Unlike the Git commands above, the non-temp file names printed // here are relative to the current directory, not the repo root. - args := []string{"checkout-index", "--temp", "--"} - args = append(args, needTemp...) - for _, line := range getLines("git", args...) { - i := strings.Index(line, "\t") - if i < 0 { - continue + + // git checkout-index --temp is broken on windows. Running this command: + // + // git checkout-index --temp -- bad-bad-bad2.go bad-bad-broken.go bad-bad-good.go bad-bad2-bad.go bad-bad2-broken.go bad-bad2-good.go bad-broken-bad.go bad-broken-bad2.go bad-broken-good.go bad-good-bad.go bad-good-bad2.go bad-good-broken.go bad2-bad-bad2.go bad2-bad-broken.go bad2-bad-good.go bad2-bad2-bad.go bad2-bad2-broken.go bad2-bad2-good.go bad2-broken-bad.go bad2-broken-bad2.go bad2-broken-good.go bad2-good-bad.go bad2-good-bad2.go bad2-good-broken.go broken-bad-bad2.go broken-bad-broken.go broken-bad-good.go broken-bad2-bad.go broken-bad2-broken.go broken-bad2-good.go + // + // produces this output + // + // .merge_file_a05448 bad-bad-bad2.go + // .merge_file_b05448 bad-bad-broken.go + // .merge_file_c05448 bad-bad-good.go + // .merge_file_d05448 bad-bad2-bad.go + // .merge_file_e05448 bad-bad2-broken.go + // .merge_file_f05448 bad-bad2-good.go + // .merge_file_g05448 bad-broken-bad.go + // .merge_file_h05448 bad-broken-bad2.go + // .merge_file_i05448 bad-broken-good.go + // .merge_file_j05448 bad-good-bad.go + // .merge_file_k05448 bad-good-bad2.go + // .merge_file_l05448 bad-good-broken.go + // .merge_file_m05448 bad2-bad-bad2.go + // .merge_file_n05448 bad2-bad-broken.go + // .merge_file_o05448 bad2-bad-good.go + // .merge_file_p05448 bad2-bad2-bad.go + // .merge_file_q05448 bad2-bad2-broken.go + // .merge_file_r05448 bad2-bad2-good.go + // .merge_file_s05448 bad2-broken-bad.go + // .merge_file_t05448 bad2-broken-bad2.go + // .merge_file_u05448 bad2-broken-good.go + // .merge_file_v05448 bad2-good-bad.go + // .merge_file_w05448 bad2-good-bad2.go + // .merge_file_x05448 bad2-good-broken.go + // .merge_file_y05448 broken-bad-bad2.go + // .merge_file_z05448 broken-bad-broken.go + // error: unable to create file .merge_file_XXXXXX (No error) + // .merge_file_XXXXXX broken-bad-good.go + // error: unable to create file .merge_file_XXXXXX (No error) + // .merge_file_XXXXXX broken-bad2-bad.go + // error: unable to create file .merge_file_XXXXXX (No error) + // .merge_file_XXXXXX broken-bad2-broken.go + // error: unable to create file .merge_file_XXXXXX (No error) + // .merge_file_XXXXXX broken-bad2-good.go + // + // so limit the number of file arguments to 25. + for len(needTemp) > 0 { + n := len(needTemp) + if n > 25 { + n = 25 + } + args := []string{"checkout-index", "--temp", "--"} + args = append(args, needTemp[:n]...) + for _, line := range getLines("git", args...) { + i := strings.Index(line, "\t") + if i < 0 { + continue + } + temp, file := line[:i], line[i+1:] + temp = filepath.Join(repo, temp) + file = filepath.Join(pwd, file) + tempToFile[temp] = file + fileToTemp[file] = temp } - temp, file := line[:i], line[i+1:] - temp = filepath.Join(repo, temp) - file = filepath.Join(pwd, file) - tempToFile[temp] = file - fileToTemp[file] = temp + needTemp = needTemp[n:] } cleanup = func() { for temp := range tempToFile { |
