|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | 4 | "flag" |
| 5 | + "fmt" |
6 | 6 | "go/parser" |
7 | 7 | "go/token" |
8 | 8 | "os" |
9 | 9 | "path/filepath" |
10 | 10 | "strings" |
11 | 11 |
|
12 | 12 | "github.com/go-git/go-billy/v5/memfs" |
13 | | - git "github.com/go-git/go-git/v5" |
| 13 | + "github.com/go-git/go-git/v5" |
14 | 14 | "github.com/go-git/go-git/v5/plumbing" |
15 | 15 | "github.com/go-git/go-git/v5/plumbing/object" |
16 | 16 | "github.com/go-git/go-git/v5/plumbing/transport" |
|
31 | 31 | ) |
32 | 32 |
|
33 | 33 | func parseFromHash(repo *git.Repository, hash string) (*object.Tree, map[string]string) { |
34 | | - commit, err := repo.CommitObject(plumbing.NewHash(hash)) |
35 | | - die(err) |
| 34 | + commit, _ := repo.CommitObject(plumbing.NewHash(hash)) |
| 35 | + if commit == nil { |
| 36 | + iter, err := repo.CommitObjects() |
| 37 | + die(err) |
| 38 | + |
| 39 | + for { |
| 40 | + var err error |
| 41 | + commit, err = iter.Next() |
| 42 | + die(err) |
| 43 | + if strings.HasPrefix(commit.Hash.String(), hash) { |
| 44 | + break |
| 45 | + } |
| 46 | + } |
| 47 | + } |
| 48 | + if commit == nil { |
| 49 | + die(fmt.Errorf("commit %s not found", hash)) |
| 50 | + } |
36 | 51 |
|
37 | 52 | tree, err := commit.Tree() |
38 | 53 | die(err) |
@@ -109,11 +124,10 @@ func main() { |
109 | 124 |
|
110 | 125 | for _, file := range patches { |
111 | 126 | from, to := file.Files() |
112 | | - if from != nil { |
| 127 | + if from != nil && to != nil { |
| 128 | + rawChanges[from.Path()] = true |
| 129 | + } else if from != nil { |
113 | 130 | rawChanges[from.Path()] = true |
114 | | - } |
115 | | - if to != nil { |
116 | | - rawChanges[to.Path()] = true |
117 | 131 | } |
118 | 132 | } |
119 | 133 |
|
|
0 commit comments