Skip to content

Commit 6eaeb01

Browse files
ethantkoeniglafriks
authored andcommitted
Update code.gitea.io/git (#3482)
1 parent 58771ac commit 6eaeb01

File tree

5 files changed

+108
-126
lines changed

5 files changed

+108
-126
lines changed

models/git_diff.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"io/ioutil"
1515
"os"
1616
"os/exec"
17+
"strconv"
1718
"strings"
1819

1920
"code.gitea.io/git"
@@ -368,8 +369,15 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
368369
a := line[beg+2 : middle]
369370
b := line[middle+3:]
370371
if hasQuote {
371-
a = string(git.UnescapeChars([]byte(a[1 : len(a)-1])))
372-
b = string(git.UnescapeChars([]byte(b[1 : len(b)-1])))
372+
var err error
373+
a, err = strconv.Unquote(a)
374+
if err != nil {
375+
return nil, fmt.Errorf("Unquote: %v", err)
376+
}
377+
b, err = strconv.Unquote(b)
378+
if err != nil {
379+
return nil, fmt.Errorf("Unquote: %v", err)
380+
}
373381
}
374382

375383
curFile = &DiffFile{

models/repo_indexer.go

Lines changed: 13 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -231,43 +231,17 @@ func addDelete(filename string, repo *Repository, batch rupture.FlushingBatch) e
231231
}
232232

233233
// parseGitLsTreeOutput parses the output of a `git ls-tree -r --full-name` command
234-
func parseGitLsTreeOutput(stdout string) ([]fileUpdate, error) {
235-
lines := strings.Split(stdout, "\n")
236-
updates := make([]fileUpdate, 0, len(lines))
237-
for _, line := range lines {
238-
// expect line to be "<mode> <object-type> <object-sha>\t<filename>"
239-
line = strings.TrimSpace(line)
240-
if len(line) == 0 {
241-
continue
242-
}
243-
firstSpaceIndex := strings.IndexByte(line, ' ')
244-
if firstSpaceIndex < 0 {
245-
log.Error(4, "Misformatted git ls-tree output: %s", line)
246-
continue
247-
}
248-
tabIndex := strings.IndexByte(line, '\t')
249-
if tabIndex < 42+firstSpaceIndex || tabIndex == len(line)-1 {
250-
log.Error(4, "Misformatted git ls-tree output: %s", line)
251-
continue
252-
}
253-
if objectType := line[firstSpaceIndex+1 : tabIndex-41]; objectType != "blob" {
254-
// submodules appear as commit objects, we do not index submodules
255-
continue
256-
}
257-
258-
blobSha := line[tabIndex-40 : tabIndex]
259-
filename := line[tabIndex+1:]
260-
if filename[0] == '"' {
261-
var err error
262-
filename, err = strconv.Unquote(filename)
263-
if err != nil {
264-
return nil, err
265-
}
234+
func parseGitLsTreeOutput(stdout []byte) ([]fileUpdate, error) {
235+
entries, err := git.ParseTreeEntries(stdout)
236+
if err != nil {
237+
return nil, err
238+
}
239+
updates := make([]fileUpdate, len(entries))
240+
for i, entry := range entries {
241+
updates[i] = fileUpdate{
242+
Filename: entry.Name(),
243+
BlobSha: entry.ID.String(),
266244
}
267-
updates = append(updates, fileUpdate{
268-
Filename: filename,
269-
BlobSha: blobSha,
270-
})
271245
}
272246
return updates, nil
273247
}
@@ -276,7 +250,7 @@ func parseGitLsTreeOutput(stdout string) ([]fileUpdate, error) {
276250
func genesisChanges(repo *Repository, revision string) (*repoChanges, error) {
277251
var changes repoChanges
278252
stdout, err := git.NewCommand("ls-tree", "--full-tree", "-r", revision).
279-
RunInDir(repo.RepoPath())
253+
RunInDirBytes(repo.RepoPath())
280254
if err != nil {
281255
return nil, err
282256
}
@@ -327,11 +301,11 @@ func nonGenesisChanges(repo *Repository, revision string) (*repoChanges, error)
327301

328302
cmd := git.NewCommand("ls-tree", "--full-tree", revision, "--")
329303
cmd.AddArguments(updatedFilenames...)
330-
stdout, err = cmd.RunInDir(repo.RepoPath())
304+
lsTreeStdout, err := cmd.RunInDirBytes(repo.RepoPath())
331305
if err != nil {
332306
return nil, err
333307
}
334-
changes.Updates, err = parseGitLsTreeOutput(stdout)
308+
changes.Updates, err = parseGitLsTreeOutput(lsTreeStdout)
335309
return &changes, err
336310
}
337311

vendor/code.gitea.io/git/parse.go

Lines changed: 81 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/git/tree.go

Lines changed: 1 addition & 82 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/vendor.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
"ignore": "test appengine",
44
"package": [
55
{
6-
"checksumSHA1": "Gz+a5Qo4PCiB/Gf2f02v8HEAxDM=",
6+
"checksumSHA1": "j6YyQxuOYRs94MVEamvnbE6ZtD0=",
77
"path": "code.gitea.io/git",
8-
"revision": "6798d0f202cdc7187c00a467b586a4bdee27e8c9",
9-
"revisionTime": "2018-01-14T14:37:32Z"
8+
"revision": "827f97aaaa6a4ab5c31b1b799c56687a8cf6aade",
9+
"revisionTime": "2018-02-10T03:05:43Z"
1010
},
1111
{
1212
"checksumSHA1": "Qtq0kW+BnpYMOriaoCjMa86WGG8=",

0 commit comments

Comments
 (0)