aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/vcs
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/vcs')
-rw-r--r--pkg/vcs/git.go11
-rw-r--r--pkg/vcs/git_test.go22
2 files changed, 33 insertions, 0 deletions
diff --git a/pkg/vcs/git.go b/pkg/vcs/git.go
index 7425066d2..b75859338 100644
--- a/pkg/vcs/git.go
+++ b/pkg/vcs/git.go
@@ -654,3 +654,14 @@ func (git *git) PushCommit(repo, commit string) error {
}
return nil
}
+
+var fileNameRe = regexp.MustCompile(`(?m)^diff.* b\/([^\s]+)`)
+
+// ParseGitDiff extracts the files modified in the git patch.
+func ParseGitDiff(patch []byte) []string {
+ var files []string
+ for _, match := range fileNameRe.FindAllStringSubmatch(string(patch), -1) {
+ files = append(files, match[1])
+ }
+ return files
+}
diff --git a/pkg/vcs/git_test.go b/pkg/vcs/git_test.go
index a46408417..daef69501 100644
--- a/pkg/vcs/git_test.go
+++ b/pkg/vcs/git_test.go
@@ -462,3 +462,25 @@ func TestGitFetchShortHash(t *testing.T) {
_, err := local.CheckoutCommit(remoteRepoDir, refCommit.Hash[:12])
assert.NoError(t, err)
}
+
+func TestParseGitDiff(t *testing.T) {
+ files := ParseGitDiff([]byte(`diff --git a/a.txt b/a.txt
+index 4c5fd91..8fe1e32 100644
+--- a/a.txt
++++ b/a.txt
+@@ -1 +1 @@
+-First file
++First file!
+diff --git a/b.txt b/b.txt
+new file mode 100644
+index 0000000..f8a9677
+--- /dev/null
++++ b/b.txt
+@@ -0,0 +1 @@
++Second file.
+diff --git a/c/c.txt b/c/c.txt
+new file mode 100644
+index 0000000..e69de29
+`))
+ assert.ElementsMatch(t, files, []string{"a.txt", "b.txt", "c/c.txt"})
+}