First pass at more detailed conflict information
diff --git a/glide.lock b/glide.lock
index 2221b61..ee278ef 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,12 +1,12 @@
-hash: 20903781daabd592231b6616959bc03a5c9d6cbda87a0a566463d3ba1fcaf02b
-updated: 2016-03-22T12:48:16.057789318-04:00
+hash: 83c7c3c86a8d50d46ac2731938195e348f2445e6106325a4f90976563c946bd8
+updated: 2016-03-23T15:34:32.512791672-04:00
imports:
- name: github.com/codegangsta/cli
- version: aca5b047ed14d17224157c3434ea93bf6cdaadee
+ version: 9fec0fad02befc9209347cc6d620e68e1b45f74d
- name: github.com/Masterminds/semver
version: 808ed7761c233af2de3f9729a041d68c62527f3a
- name: github.com/Masterminds/vcs
- version: 37d65fe88a747ab1ac3af3cf5035f62b9f4bee1c
+ version: b22ee1673cdd03ef47bb0b422736a7f17ff0648c
- name: gopkg.in/yaml.v2
version: a83829b6f1293c91addabc89d0571c246397bbf4
devImports: []
diff --git a/glide.yaml b/glide.yaml
index 9e95a35..a8eb79a 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -11,7 +11,7 @@
import:
- package: gopkg.in/yaml.v2
- package: github.com/Masterminds/vcs
- version: ^1.5.0
+ version: ^1.5.1
- package: github.com/codegangsta/cli
- package: github.com/Masterminds/semver
version: ^1.0.0
diff --git a/repo/installer.go b/repo/installer.go
index f14b595..711fdc0 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -6,6 +6,7 @@
"path/filepath"
"strings"
"sync"
+ "time"
"github.com/Masterminds/glide/cfg"
"github.com/Masterminds/glide/dependency"
@@ -366,7 +367,7 @@
d := m.Config.Imports.Get(root)
// If the dependency is nil it means the Config doesn't yet know about it.
if d == nil {
- d = m.Use.Get(root)
+ d, _ = m.Use.Get(root)
// We don't know about this dependency so we create a basic instance.
if d == nil {
d = &cfg.Dependency{Name: root}
@@ -433,7 +434,7 @@
d := m.Config.Imports.Get(root)
// If the dependency is nil it means the Config doesn't yet know about it.
if d == nil {
- d = m.Use.Get(root)
+ d, _ = m.Use.Get(root)
// We don't know about this dependency so we create a basic instance.
if d == nil {
d = &cfg.Dependency{Name: root}
@@ -490,9 +491,9 @@
for _, dep := range deps {
// The fist one wins. Would something smater than this be better?
- exists := d.Use.Get(dep.Name)
+ exists, _ := d.Use.Get(dep.Name)
if exists == nil && (dep.Reference != "" || dep.Repository != "") {
- d.Use.Add(dep.Name, dep)
+ d.Use.Add(dep.Name, dep, root)
}
}
} else if err != nil {
@@ -519,7 +520,7 @@
v := d.Config.Imports.Get(root)
- dep := d.Use.Get(root)
+ dep, req := d.Use.Get(root)
if dep != nil && v != nil {
if v.Reference == "" && dep.Reference != "" {
v.Reference = dep.Reference
@@ -528,7 +529,7 @@
dep = v
} else if v.Reference != "" && dep.Reference != "" && v.Reference != dep.Reference {
dest := filepath.Join(d.Destination, filepath.FromSlash(v.Name))
- dep = determineDependency(v, dep, dest)
+ dep = determineDependency(v, dep, dest, req)
} else {
dep = v
}
@@ -560,7 +561,7 @@
return
}
-func determineDependency(v, dep *cfg.Dependency, dest string) *cfg.Dependency {
+func determineDependency(v, dep *cfg.Dependency, dest, req string) *cfg.Dependency {
repo, err := v.GetRepo(dest)
if err != nil {
singleWarn("Unable to access repo for %s\n", v.Name)
@@ -573,7 +574,24 @@
// Both are references and they are different ones.
if vIsRef && depIsRef {
- singleWarn("Conflict: %s ref is %s, but also asked for %s\n", v.Name, v.Reference, dep.Reference)
+ singleWarn("Conflict: %s rev is currently %s, but %s wants %s\n", v.Name, v.Reference, req, dep.Reference)
+
+ pf := msg.Default.Color(msg.Green, "[INFO] ")
+ fm := "%s reference %s:\n" +
+ pf + "- author: %s\n" +
+ pf + "- commit date: %s\n" +
+ pf + "- subject (first line): %s\n"
+
+ vci, err := repo.CommitInfo(v.Reference)
+ if err == nil {
+ singleInfo(fm, v.Name, v.Reference, vci.Author, vci.Date.Format(time.RFC1123Z), commitSubjectFirstLine(vci.Message))
+ }
+
+ depci, err := repo.CommitInfo(dep.Reference)
+ if err == nil {
+ singleInfo(fm, v.Name, dep.Reference, depci.Author, depci.Date.Format(time.RFC1123Z), commitSubjectFirstLine(depci.Message))
+ }
+
singleInfo("Keeping %s %s", v.Name, v.Reference)
return v
} else if vIsRef {
@@ -688,23 +706,35 @@
type importCache struct {
cache map[string]*cfg.Dependency
+ from map[string]string
}
func newImportCache() *importCache {
return &importCache{
cache: make(map[string]*cfg.Dependency),
+ from: make(map[string]string),
}
}
-func (i *importCache) Get(name string) *cfg.Dependency {
+func (i *importCache) Get(name string) (*cfg.Dependency, string) {
d, f := i.cache[name]
if f {
- return d
+ return d, i.from[name]
}
- return nil
+ return nil, ""
}
-func (i *importCache) Add(name string, dep *cfg.Dependency) {
+func (i *importCache) Add(name string, dep *cfg.Dependency, root string) {
i.cache[name] = dep
+ i.from[name] = root
+}
+
+func commitSubjectFirstLine(sub string) string {
+ lines := strings.Split(sub, "\n")
+ if len(lines) <= 1 {
+ return sub
+ }
+
+ return lines[0]
}