Selaa lähdekoodia

Add IsMergeCommit()

Vadim Markovtsev 6 vuotta sitten
vanhempi
commit
0b27828df8
4 muutettua tiedostoa jossa 77 lisäystä ja 2 poistoa
  1. 5 0
      core.go
  2. 5 0
      internal/core/forks.go
  3. 66 0
      internal/core/forks_test.go
  4. 1 2
      leaves/burndown.go

+ 5 - 0
core.go

@@ -94,6 +94,11 @@ func ForkCopyPipelineItem(origin PipelineItem, n int) []PipelineItem {
 	return core.ForkCopyPipelineItem(origin ,n)
 	return core.ForkCopyPipelineItem(origin ,n)
 }
 }
 
 
+// IsMergeCommit indicates whether the commit is a merge or not.
+func IsMergeCommit(deps map[string]interface{}) bool {
+	return core.IsMergeCommit(deps)
+}
+
 // PipelineItemRegistry contains all the known PipelineItem-s.
 // PipelineItemRegistry contains all the known PipelineItem-s.
 type PipelineItemRegistry = core.PipelineItemRegistry
 type PipelineItemRegistry = core.PipelineItemRegistry
 
 

+ 5 - 0
internal/core/forks.go

@@ -34,6 +34,11 @@ func (proc *OneShotMergeProcessor) ShouldConsumeCommit(deps map[string]interface
 	return false
 	return false
 }
 }
 
 
+// IsMergeCommit indicates whether the commit is a merge or not.
+func IsMergeCommit(deps map[string]interface{}) bool {
+	return deps[DependencyCommit].(*object.Commit).NumParents() > 1
+}
+
 // NoopMerger provides an empty Merge() method suitable for PipelineItem.
 // NoopMerger provides an empty Merge() method suitable for PipelineItem.
 type NoopMerger struct {
 type NoopMerger struct {
 }
 }

+ 66 - 0
internal/core/forks_test.go

@@ -0,0 +1,66 @@
+package core
+
+import (
+	"testing"
+	"gopkg.in/src-d/go-git.v4"
+	"github.com/stretchr/testify/assert"
+)
+
+type testForkPipelineItem struct {
+	NoopMerger
+	Mutable map[int]bool
+	Immutable string
+}
+
+func (item *testForkPipelineItem) Name() string {
+	return "Test"
+}
+
+func (item *testForkPipelineItem) Provides() []string {
+	arr := [...]string{"test"}
+	return arr[:]
+}
+
+func (item *testForkPipelineItem) Requires() []string {
+	return []string{}
+}
+
+func (item *testForkPipelineItem) Configure(facts map[string]interface{}) {
+}
+
+func (item *testForkPipelineItem) ListConfigurationOptions() []ConfigurationOption {
+	return nil
+}
+
+func (item *testForkPipelineItem) Flag() string {
+	return "mytest"
+}
+
+func (item *testForkPipelineItem) Features() []string {
+	return nil
+}
+
+func (item *testForkPipelineItem) Initialize(repository *git.Repository) {
+	item.Mutable = map[int]bool{}
+}
+
+func (item *testForkPipelineItem) Consume(deps map[string]interface{}) (map[string]interface{}, error) {
+	return map[string]interface{}{"test": "foo"}, nil
+}
+
+func (item *testForkPipelineItem) Fork(n int) []PipelineItem {
+	return ForkCopyPipelineItem(item, n)
+}
+
+func TestForkCopyPipelineItem(t *testing.T) {
+	origin := &testForkPipelineItem{}
+	origin.Initialize(nil)
+	origin.Mutable[2] = true
+	origin.Immutable = "before"
+	clone := origin.Fork(1)[0].(*testForkPipelineItem)
+	origin.Immutable = "after"
+	origin.Mutable[1] = true
+	assert.True(t, clone.Mutable[1])
+	assert.True(t, clone.Mutable[2])
+	assert.Equal(t, "before", clone.Immutable)
+}

+ 1 - 2
leaves/burndown.go

@@ -242,10 +242,9 @@ func (analyser *BurndownAnalysis) Initialize(repository *git.Repository) {
 // This function returns the mapping with analysis results. The keys must be the same as
 // This function returns the mapping with analysis results. The keys must be the same as
 // in Provides(). If there was an error, nil is returned.
 // in Provides(). If there was an error, nil is returned.
 func (analyser *BurndownAnalysis) Consume(deps map[string]interface{}) (map[string]interface{}, error) {
 func (analyser *BurndownAnalysis) Consume(deps map[string]interface{}) (map[string]interface{}, error) {
-	commit := deps[core.DependencyCommit].(*object.Commit)
 	author := deps[identity.DependencyAuthor].(int)
 	author := deps[identity.DependencyAuthor].(int)
 	day := deps[items.DependencyDay].(int)
 	day := deps[items.DependencyDay].(int)
-	if len(commit.ParentHashes) <= 1 {
+	if !core.IsMergeCommit(deps) {
 		analyser.day = day
 		analyser.day = day
 		analyser.onNewDay()
 		analyser.onNewDay()
 	} else {
 	} else {