diff options
author | Antonio Jesus Navarro Perez <antonio@sourced.tech> | 2017-02-22 15:49:37 +0100 |
---|---|---|
committer | Antonio Jesus Navarro Perez <antonio@sourced.tech> | 2017-02-24 11:08:14 +0100 |
commit | affc06dec90529073b5a3b76291b953232f034d9 (patch) | |
tree | 4300a62bfc3957d51183321254dae3e9d4a314c9 /plumbing/difftree/difftree_test.go | |
parent | f93e5712a86b96370673a02fa7ffbe5e0aec0c66 (diff) | |
download | go-git-affc06dec90529073b5a3b76291b953232f034d9.tar.gz |
plumbing/object: move difftree to object package
- To avoid ciclic dependency errors, we move all the difftree files to object package.
- Added Diff method to Tree object.
Diffstat (limited to 'plumbing/difftree/difftree_test.go')
-rw-r--r-- | plumbing/difftree/difftree_test.go | 379 |
1 files changed, 0 insertions, 379 deletions
diff --git a/plumbing/difftree/difftree_test.go b/plumbing/difftree/difftree_test.go deleted file mode 100644 index 24817f1..0000000 --- a/plumbing/difftree/difftree_test.go +++ /dev/null @@ -1,379 +0,0 @@ -package difftree - -import ( - "os" - "sort" - "testing" - - "srcd.works/go-git.v4/plumbing" - "srcd.works/go-git.v4/plumbing/format/packfile" - "srcd.works/go-git.v4/plumbing/object" - "srcd.works/go-git.v4/plumbing/storer" - "srcd.works/go-git.v4/storage/filesystem" - "srcd.works/go-git.v4/storage/memory" - "srcd.works/go-git.v4/utils/merkletrie" - - "github.com/src-d/go-git-fixtures" - . "gopkg.in/check.v1" -) - -func Test(t *testing.T) { TestingT(t) } - -type DiffTreeSuite struct { - fixtures.Suite - Storer storer.EncodedObjectStorer - Fixture *fixtures.Fixture - cache map[string]storer.EncodedObjectStorer -} - -func (s *DiffTreeSuite) SetUpSuite(c *C) { - s.Suite.SetUpSuite(c) - s.Fixture = fixtures.Basic().One() - sto, err := filesystem.NewStorage(s.Fixture.DotGit()) - c.Assert(err, IsNil) - s.Storer = sto - s.cache = make(map[string]storer.EncodedObjectStorer) -} - -func (s *DiffTreeSuite) commitFromStorer(c *C, sto storer.EncodedObjectStorer, - h plumbing.Hash) *object.Commit { - - commit, err := object.GetCommit(sto, h) - c.Assert(err, IsNil) - return commit -} - -func (s *DiffTreeSuite) storageFromPackfile(f *fixtures.Fixture) storer.EncodedObjectStorer { - sto, ok := s.cache[f.URL] - if ok { - return sto - } - - sto = memory.NewStorage() - - pf := f.Packfile() - - defer pf.Close() - - n := packfile.NewScanner(pf) - d, err := packfile.NewDecoder(n, sto) - if err != nil { - panic(err) - } - - _, err = d.Decode() - if err != nil { - panic(err) - } - - s.cache[f.URL] = sto - return sto -} - -var _ = Suite(&DiffTreeSuite{}) - -type expectChange struct { - Action merkletrie.Action - Name string -} - -func assertChanges(a Changes, c *C) { - for _, changes := range a { - action, err := changes.Action() - c.Assert(err, IsNil) - switch action { - case merkletrie.Insert: - c.Assert(changes.From.Tree, IsNil) - c.Assert(changes.To.Tree, NotNil) - case merkletrie.Delete: - c.Assert(changes.From.Tree, NotNil) - c.Assert(changes.To.Tree, IsNil) - case merkletrie.Modify: - c.Assert(changes.From.Tree, NotNil) - c.Assert(changes.To.Tree, NotNil) - default: - c.Fatalf("unknown action: %d", action) - } - } -} - -func equalChanges(a Changes, b []expectChange, c *C) bool { - if len(a) != len(b) { - return false - } - - sort.Sort(a) - - for i, va := range a { - vb := b[i] - action, err := va.Action() - c.Assert(err, IsNil) - if action != vb.Action || va.name() != vb.Name { - return false - } - } - - return true -} - -func (s *DiffTreeSuite) TestDiffTree(c *C) { - for i, t := range []struct { - repository string // the repo name as in localRepos - commit1 string // the commit of the first tree - commit2 string // the commit of the second tree - expected []expectChange // the expected list of []changeExpect - }{ - { - "https://github.com/dezfowler/LiteMock.git", - "", - "", - []expectChange{}, - }, - { - "https://github.com/dezfowler/LiteMock.git", - "b7965eaa2c4f245d07191fe0bcfe86da032d672a", - "b7965eaa2c4f245d07191fe0bcfe86da032d672a", - []expectChange{}, - }, - { - "https://github.com/dezfowler/LiteMock.git", - "", - "b7965eaa2c4f245d07191fe0bcfe86da032d672a", - []expectChange{ - {Action: merkletrie.Insert, Name: "README"}, - }, - }, - { - "https://github.com/dezfowler/LiteMock.git", - "b7965eaa2c4f245d07191fe0bcfe86da032d672a", - "", - []expectChange{ - {Action: merkletrie.Delete, Name: "README"}, - }, - }, - { - "https://github.com/githubtraining/example-branches.git", - "", - "f0eb272cc8f77803478c6748103a1450aa1abd37", - []expectChange{ - {Action: merkletrie.Insert, Name: "README.md"}, - }, - }, - { - "https://github.com/githubtraining/example-branches.git", - "f0eb272cc8f77803478c6748103a1450aa1abd37", - "", - []expectChange{ - {Action: merkletrie.Delete, Name: "README.md"}, - }, - }, - { - "https://github.com/githubtraining/example-branches.git", - "f0eb272cc8f77803478c6748103a1450aa1abd37", - "f0eb272cc8f77803478c6748103a1450aa1abd37", - []expectChange{}, - }, - { - "https://github.com/github/gem-builder.git", - "", - "9608eed92b3839b06ebf72d5043da547de10ce85", - []expectChange{ - {Action: merkletrie.Insert, Name: "README"}, - {Action: merkletrie.Insert, Name: "gem_builder.rb"}, - {Action: merkletrie.Insert, Name: "gem_eval.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "9608eed92b3839b06ebf72d5043da547de10ce85", - "", - []expectChange{ - {Action: merkletrie.Delete, Name: "README"}, - {Action: merkletrie.Delete, Name: "gem_builder.rb"}, - {Action: merkletrie.Delete, Name: "gem_eval.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "9608eed92b3839b06ebf72d5043da547de10ce85", - "9608eed92b3839b06ebf72d5043da547de10ce85", - []expectChange{}, - }, - { - "https://github.com/toqueteos/ts3.git", - "", - "764e914b75d6d6df1fc5d832aa9840f590abf1bb", - []expectChange{ - {Action: merkletrie.Insert, Name: "README.markdown"}, - {Action: merkletrie.Insert, Name: "examples/bot.go"}, - {Action: merkletrie.Insert, Name: "examples/raw_shell.go"}, - {Action: merkletrie.Insert, Name: "helpers.go"}, - {Action: merkletrie.Insert, Name: "ts3.go"}, - }, - }, - { - "https://github.com/toqueteos/ts3.git", - "764e914b75d6d6df1fc5d832aa9840f590abf1bb", - "", - []expectChange{ - {Action: merkletrie.Delete, Name: "README.markdown"}, - {Action: merkletrie.Delete, Name: "examples/bot.go"}, - {Action: merkletrie.Delete, Name: "examples/raw_shell.go"}, - {Action: merkletrie.Delete, Name: "helpers.go"}, - {Action: merkletrie.Delete, Name: "ts3.go"}, - }, - }, - { - "https://github.com/toqueteos/ts3.git", - "764e914b75d6d6df1fc5d832aa9840f590abf1bb", - "764e914b75d6d6df1fc5d832aa9840f590abf1bb", - []expectChange{}, - }, - { - "https://github.com/github/gem-builder.git", - "9608eed92b3839b06ebf72d5043da547de10ce85", - "6c41e05a17e19805879689414026eb4e279f7de0", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "6c41e05a17e19805879689414026eb4e279f7de0", - "89be3aac2f178719c12953cc9eaa23441f8d9371", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - {Action: merkletrie.Insert, Name: "gem_eval_test.rb"}, - {Action: merkletrie.Insert, Name: "security.rb"}, - {Action: merkletrie.Insert, Name: "security_test.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "89be3aac2f178719c12953cc9eaa23441f8d9371", - "597240b7da22d03ad555328f15abc480b820acc0", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "597240b7da22d03ad555328f15abc480b820acc0", - "0260380e375d2dd0e1a8fcab15f91ce56dbe778e", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - {Action: merkletrie.Modify, Name: "gem_eval_test.rb"}, - {Action: merkletrie.Insert, Name: "lazy_dir.rb"}, - {Action: merkletrie.Insert, Name: "lazy_dir_test.rb"}, - {Action: merkletrie.Modify, Name: "security.rb"}, - {Action: merkletrie.Modify, Name: "security_test.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "0260380e375d2dd0e1a8fcab15f91ce56dbe778e", - "597240b7da22d03ad555328f15abc480b820acc0", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - {Action: merkletrie.Modify, Name: "gem_eval_test.rb"}, - {Action: merkletrie.Delete, Name: "lazy_dir.rb"}, - {Action: merkletrie.Delete, Name: "lazy_dir_test.rb"}, - {Action: merkletrie.Modify, Name: "security.rb"}, - {Action: merkletrie.Modify, Name: "security_test.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "0260380e375d2dd0e1a8fcab15f91ce56dbe778e", - "ca9fd470bacb6262eb4ca23ee48bb2f43711c1ff", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - {Action: merkletrie.Modify, Name: "security.rb"}, - {Action: merkletrie.Modify, Name: "security_test.rb"}, - }, - }, - { - "https://github.com/github/gem-builder.git", - "fe3c86745f887c23a0d38c85cfd87ca957312f86", - "b7e3f636febf7a0cd3ab473b6d30081786d2c5b6", - []expectChange{ - {Action: merkletrie.Modify, Name: "gem_eval.rb"}, - {Action: merkletrie.Modify, Name: "gem_eval_test.rb"}, - {Action: merkletrie.Insert, Name: "git_mock"}, - {Action: merkletrie.Modify, Name: "lazy_dir.rb"}, - {Action: merkletrie.Modify, Name: "lazy_dir_test.rb"}, - {Action: merkletrie.Modify, Name: "security.rb"}, - }, - }, - { - "https://github.com/rumpkernel/rumprun-xen.git", - "1831e47b0c6db750714cd0e4be97b5af17fb1eb0", - "51d8515578ea0c88cc8fc1a057903675cf1fc16c", - []expectChange{ - {Action: merkletrie.Modify, Name: "Makefile"}, - {Action: merkletrie.Modify, Name: "netbsd_init.c"}, - {Action: merkletrie.Modify, Name: "rumphyper_stubs.c"}, - {Action: merkletrie.Delete, Name: "sysproxy.c"}, - }, - }, - { - "https://github.com/rumpkernel/rumprun-xen.git", - "1831e47b0c6db750714cd0e4be97b5af17fb1eb0", - "e13e678f7ee9badd01b120889e0ec5fdc8ae3802", - []expectChange{ - {Action: merkletrie.Modify, Name: "app-tools/rumprun"}, - }, - }, - } { - f := fixtures.ByURL(t.repository).One() - sto := s.storageFromPackfile(f) - - var tree1, tree2 *object.Tree - var err error - if t.commit1 != "" { - tree1, err = s.commitFromStorer(c, sto, - plumbing.NewHash(t.commit1)).Tree() - c.Assert(err, IsNil, - Commentf("subtest %d: unable to retrieve tree from commit %s and repo %s: %s", i, t.commit1, t.repository, err)) - } - - if t.commit2 != "" { - tree2, err = s.commitFromStorer(c, sto, - plumbing.NewHash(t.commit2)).Tree() - c.Assert(err, IsNil, - Commentf("subtest %d: unable to retrieve tree from commit %s and repo %s", i, t.commit2, t.repository, err)) - } - - obtained, err := DiffTree(tree1, tree2) - c.Assert(err, IsNil, - Commentf("subtest %d: unable to calculate difftree: %s", i, err)) - c.Assert(equalChanges(obtained, t.expected, c), Equals, true, - Commentf("subtest:%d\nrepo=%s\ncommit1=%s\ncommit2=%s\nexpected=%s\nobtained=%s", - i, t.repository, t.commit1, t.commit2, t.expected, obtained)) - - assertChanges(obtained, c) - } -} - -func (s *DiffTreeSuite) TestIssue279(c *C) { - // HashEqual should ignore files if the only change is from a 100664 - // mode to a 100644 or vice versa. - from := &treeNoder{ - hash: plumbing.NewHash("d08e895238bac36d8220586fdc28c27e1a7a76d3"), - mode: os.FileMode(0100664), - } - to := &treeNoder{ - hash: plumbing.NewHash("d08e895238bac36d8220586fdc28c27e1a7a76d3"), - mode: os.FileMode(0100644), - } - c.Assert(hashEqual(from, to), Equals, true) - c.Assert(hashEqual(to, from), Equals, true) - - // but should detect if the contents of the file also changed. - to = &treeNoder{ - hash: plumbing.NewHash("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), - mode: os.FileMode(0100644), - } - c.Assert(hashEqual(from, to), Equals, false) - c.Assert(hashEqual(to, from), Equals, false) -} |