Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(944)

Unified Diff: tests/fake_repos.py

Issue 2594001: Significantly improve gclient_smoketest.py (Closed)
Patch Set: comments Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/gclient_smoketest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/fake_repos.py
diff --git a/tests/fake_repos.py b/tests/fake_repos.py
index fa2b493164abd02e6b4c41f6ad21b8ba0915184b..143104554275fdb515d6666c09f0ed62ebcff9d8 100755
--- a/tests/fake_repos.py
+++ b/tests/fake_repos.py
@@ -17,6 +17,9 @@ import sys
import time
import unittest
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+import scm
## Utility functions
@@ -149,35 +152,15 @@ def dict_diff(dict1, dict2):
return diff
-def mangle_svn_tree(*args):
- result = {}
- for old_root, new_root, tree in args:
- for k, v in tree.iteritems():
- if not k.startswith(old_root):
- continue
- result[join(new_root, k[len(old_root) + 1:]).replace(os.sep, '/')] = v
- return result
-
-
-def mangle_git_tree(*args):
- result = {}
- for new_root, tree in args:
- for k, v in tree.iteritems():
- result[join(new_root, k)] = v
- return result
-
-
def commit_svn(repo):
"""Commits the changes and returns the new revision number."""
- # Basic parsing.
to_add = []
to_remove = []
- for item in Popen(['svn', 'status'],
- cwd=repo).communicate()[0].splitlines(False):
- if item[0] == '?':
- to_add.append(item[7:].strip())
- elif item[0] == '!':
- to_remove.append(item[7:].strip())
+ for status, filepath in scm.SVN.CaptureStatus(repo):
+ if status[0] == '?':
+ to_add.append(filepath)
+ elif status[0] == '!':
+ to_remove.append(filepath)
if to_add:
check_call(['svn', 'add', '--no-auto-props', '-q'] + to_add, cwd=repo)
if to_remove:
@@ -242,8 +225,12 @@ class FakeRepos(object):
self.TRIAL_DIR = trial_dir
# Format is [ None, tree, tree, ...]
+ # i.e. revisions are 1-based.
self.svn_revs = [None]
- # Format is { repo: [ (hash, tree), (hash, tree), ... ], ... }
+ # Format is { repo: [ None, (hash, tree), (hash, tree), ... ], ... }
+ # so reference looks like self.git_hashes[repo][rev][0] for hash and
+ # self.git_hashes[repo][rev][1] for it's tree snapshot.
+ # For consistency with self.svn_revs, it is 1-based too.
self.git_hashes = {}
self.svnserve = None
self.gitdaemon = None
@@ -402,7 +389,7 @@ hooks = [
return False
for repo in ['repo_%d' % r for r in range(1, 5)]:
check_call(['git', 'init', '-q', join(self.git_root, repo)])
- self.git_hashes[repo] = []
+ self.git_hashes[repo] = [None]
# Testing:
# - dependency disapear
@@ -479,9 +466,11 @@ hooks = [
},
]
""" % {
- # TODO(maruel): http://crosbug.com/3591 We need to strip the hash.. duh.
'host': self.HOST,
- 'hash': self.git_hashes['repo_2'][0][0][:7]
+ # See self.__init__() for the format. Grab's the hash of the first
+ # commit in repo_2. Only keep the first 7 character because of:
+ # TODO(maruel): http://crosbug.com/3591 We need to strip the hash.. duh.
+ 'hash': self.git_hashes['repo_2'][1][0][:7]
},
'origin': "git/repo_1@2\n"
})
@@ -508,7 +497,7 @@ hooks = [
repo_root = join(self.git_root, repo)
self._genTree(repo_root, tree)
hash = commit_git(repo_root)
- if self.git_hashes[repo]:
+ if self.git_hashes[repo][-1]:
new_tree = self.git_hashes[repo][-1][1].copy()
new_tree.update(tree)
else:
@@ -542,7 +531,7 @@ class FakeReposTestBase(unittest.TestCase):
if not self.FAKE_REPOS.SHOULD_LEAK:
rmtree(self.root_dir)
- def checkString(self, expected, result):
+ def checkString(self, expected, result, msg=None):
"""Prints the diffs to ease debugging."""
if expected != result:
# Strip the begining
@@ -552,7 +541,7 @@ class FakeReposTestBase(unittest.TestCase):
# The exception trace makes it hard to read so dump it too.
if '\n' in result:
print result
- self.assertEquals(expected, result)
+ self.assertEquals(expected, result, msg)
def check(self, expected, results):
"""Checks stdout, stderr, retcode."""
@@ -572,6 +561,38 @@ class FakeReposTestBase(unittest.TestCase):
logging.debug('Diff\n%s' % pprint.pformat(diff))
self.assertEquals(diff, [])
+ def mangle_svn_tree(self, *args):
+ """Creates a 'virtual directory snapshot' to compare with the actual result
+ on disk."""
+ result = {}
+ for item, new_root in args:
+ old_root, rev = item.split('@', 1)
+ tree = self.FAKE_REPOS.svn_revs[int(rev)]
+ for k, v in tree.iteritems():
+ if not k.startswith(old_root):
+ continue
+ result[join(new_root, k[len(old_root) + 1:]).replace(os.sep, '/')] = v
+ return result
+
+ def mangle_git_tree(self, *args):
+ """Creates a 'virtual directory snapshot' to compare with the actual result
+ on disk."""
+ result = {}
+ for item, new_root in args:
+ repo, rev = item.split('@', 1)
+ tree = self.gittree(repo, rev)
+ for k, v in tree.iteritems():
+ result[join(new_root, k)] = v
+ return result
+
+ def githash(self, repo, rev):
+ """Sort-hand: Returns the hash for a git 'revision'."""
+ return self.FAKE_REPOS.git_hashes[repo][int(rev)][0]
+
+ def gittree(self, repo, rev):
+ """Sort-hand: returns the directory tree for a git 'revision'."""
+ return self.FAKE_REPOS.git_hashes[repo][int(rev)][1]
+
def main(argv):
fake = FakeRepos()
« no previous file with comments | « no previous file | tests/gclient_smoketest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698