Monorepo for Tangled tangled.org

knotserver/git: compute changed files between commits and wire into workflow compiler #1262

open opened by anirudh.fi targeting master from icy/xmmrnx
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:hwevmowznbiukdf6uk5dwrrq/sh.tangled.repo.pull/3miioqmki7u22
+54
Diff #1
+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
··· 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
sign up or login to add to the discussion
1 commit
expand
knotserver/git: compute changed files between commits and wire into workflow compiler
no conflicts, ready to merge
expand 0 comments
1 commit
expand
knotserver/git: compute changed files between commits and wire into workflow compiler
expand 0 comments