Signed-off-by: Anirudh Oppiliappan anirudh@tangled.org
+54
Diff
round #1
+48
knotserver/git/diff.go
+48
knotserver/git/diff.go
···
146
146
return stdout.String(), &formatPatch[0], nil
147
147
}
148
148
149
+
// ChangedFilesBetween returns the list of files changed between oldSha and newSha.
150
+
// If oldSha is the zero hash (initial push), all files in newSha are returned.
151
+
func (g *GitRepo) ChangedFilesBetween(oldSha, newSha string) ([]string, error) {
152
+
newCommit, err := g.ResolveRevision(newSha)
153
+
if err != nil {
154
+
return nil, err
155
+
}
156
+
157
+
if plumbing.NewHash(oldSha) == plumbing.ZeroHash {
158
+
tree, err := newCommit.Tree()
159
+
if err != nil {
160
+
return nil, err
161
+
}
162
+
var files []string
163
+
tree.Files().ForEach(func(f *object.File) error {
164
+
files = append(files, f.Name)
165
+
return nil
166
+
})
167
+
return files, nil
168
+
}
169
+
170
+
oldCommit, err := g.ResolveRevision(oldSha)
171
+
if err != nil {
172
+
return nil, err
173
+
}
174
+
175
+
dt, err := g.DiffTree(oldCommit, newCommit)
176
+
if err != nil {
177
+
return nil, err
178
+
}
179
+
180
+
seen := make(map[string]struct{})
181
+
for _, f := range dt.Diff {
182
+
if f.OldName != "" {
183
+
seen[f.OldName] = struct{}{}
184
+
}
185
+
if f.NewName != "" {
186
+
seen[f.NewName] = struct{}{}
187
+
}
188
+
}
189
+
190
+
files := make([]string, 0, len(seen))
191
+
for name := range seen {
192
+
files = append(files, name)
193
+
}
194
+
return files, nil
195
+
}
196
+
149
197
func (g *GitRepo) ResolveRevision(revStr string) (*object.Commit, error) {
150
198
rev, err := g.r.ResolveRevision(plumbing.Revision(revStr))
151
199
if err != nil {
+6
knotserver/internal.go
+6
knotserver/internal.go
···
374
374
RepoDid: &repoDid,
375
375
}
376
376
377
+
changedFiles, err := gr.ChangedFilesBetween(line.OldSha.String(), line.NewSha.String())
378
+
if err != nil {
379
+
return fmt.Errorf("getting changed files: %w", err)
380
+
}
381
+
377
382
compiler := workflow.Compiler{
378
383
Trigger: tangled.Pipeline_TriggerMetadata{
379
384
Kind: string(workflow.TriggerKindPush),
380
385
Push: &trigger,
381
386
Repo: triggerRepo,
382
387
},
388
+
ChangedFiles: changedFiles,
383
389
}
384
390
385
391
cp := compiler.Compile(compiler.Parse(pipeline))
History
2 rounds
0 comments
anirudh.fi
submitted
#1
1 commit
expand
collapse
knotserver/git: compute changed files between commits and wire into workflow compiler
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
no conflicts, ready to merge
expand 0 comments
anirudh.fi
submitted
#0
1 commit
expand
collapse
knotserver/git: compute changed files between commits and wire into workflow compiler
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>