aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/git
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/git')
-rw-r--r--pkg/git/git.go29
-rw-r--r--pkg/git/git_test.go23
2 files changed, 48 insertions, 4 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go
index a239453f8..e3dc8a142 100644
--- a/pkg/git/git.go
+++ b/pkg/git/git.go
@@ -81,16 +81,37 @@ func HeadCommit(dir string) (string, error) {
return string(output), nil
}
-// ListRecentCommits returns list of commit titles for the last year starting from baseCommit.
+// ListRecentCommits returns list of recent commit titles starting from baseCommit.
func ListRecentCommits(dir, baseCommit string) ([]string, error) {
- since := time.Now().Add(-time.Hour * 24 * 365).Format("01-02-2006")
- // On upstream kernel this produces 3.5MB of output.
+ // On upstream kernel this produces ~11MB of output.
// Somewhat inefficient to collect whole output in a slice
// and then convert to string, but should be bearable.
output, err := osutil.RunCmd(timeout, dir, "git", "log",
- "--pretty=format:%s", "--no-merges", "--since", since, baseCommit)
+ "--pretty=format:%s", "--no-merges", "-n", "200000", baseCommit)
if err != nil {
return nil, err
}
return strings.Split(string(output), "\n"), nil
}
+
+// CanonicalizeCommit returns commit title that can be used when checking
+// if a particular commit is present in a git tree.
+// Some trees add prefixes to commit titles during backporting,
+// so we want e.g. commit "foo bar" match "BACKPORT: foo bar".
+func CanonicalizeCommit(title string) string {
+ for _, prefix := range commitPrefixes {
+ if strings.HasPrefix(title, prefix) {
+ title = title[len(prefix):]
+ break
+ }
+ }
+ return strings.TrimSpace(title)
+}
+
+var commitPrefixes = []string{
+ "UPSTREAM:",
+ "CHROMIUM:",
+ "FROMLIST:",
+ "BACKPORT:",
+ "net-backports:",
+}
diff --git a/pkg/git/git_test.go b/pkg/git/git_test.go
new file mode 100644
index 000000000..42d2d3a07
--- /dev/null
+++ b/pkg/git/git_test.go
@@ -0,0 +1,23 @@
+// Copyright 2017 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package git
+
+import (
+ "testing"
+)
+
+func TestCanonicalizeCommit(t *testing.T) {
+ tests := map[string]string{
+ "foo bar": "foo bar",
+ " foo ": "foo",
+ "UPSTREAM: foo bar": "foo bar",
+ "BACKPORT: UPSTREAM: foo bar": "UPSTREAM: foo bar",
+ }
+ for in, want := range tests {
+ got := CanonicalizeCommit(in)
+ if got != want {
+ t.Errorf("input %q: got %q, want %q", in, got, want)
+ }
+ }
+}