blob: e62711a975b4f34d77f8a6fc8291b671e1542499 [file] [log] [blame]
msb@chromium.orge28e4982009-09-25 20:51:45 +00001#!/usr/bin/python
2#
3# Copyright 2008-2009 Google Inc. All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17"""Unit tests for gclient_scm.py."""
18
msb@chromium.orge28e4982009-09-25 20:51:45 +000019import shutil
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000020# Import it before super_mox to keep a valid reference.
21from subprocess import Popen, PIPE, STDOUT
msb@chromium.orge28e4982009-09-25 20:51:45 +000022import tempfile
msb@chromium.orge28e4982009-09-25 20:51:45 +000023
msb@chromium.orge28e4982009-09-25 20:51:45 +000024import gclient_scm
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000025from gclient_test import BaseTestCase as GCBaseTestCase
26from super_mox import mox, SuperMoxBaseTestBase
msb@chromium.orge28e4982009-09-25 20:51:45 +000027
28
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000029class BaseTestCase(GCBaseTestCase):
30 def setUp(self):
31 GCBaseTestCase.setUp(self)
32 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileRead')
33 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileWrite')
34 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'SubprocessCall')
35 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'RemoveDirectory')
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +000036 self._CaptureSVNInfo = gclient_scm.scm.SVN.CaptureInfo
37 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'Capture')
38 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureInfo')
39 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureStatus')
40 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'Run')
41 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'RunAndGetFileList')
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000042 self._scm_wrapper = gclient_scm.CreateSCM
43
44
45class SVNWrapperTestCase(BaseTestCase):
msb@chromium.orge28e4982009-09-25 20:51:45 +000046 class OptionsObject(object):
47 def __init__(self, test_case, verbose=False, revision=None):
48 self.verbose = verbose
49 self.revision = revision
50 self.manually_grab_svn_rev = True
51 self.deps_os = None
52 self.force = False
53 self.nohooks = False
54
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000055 def Options(self, *args, **kwargs):
56 return self.OptionsObject(self, *args, **kwargs)
57
msb@chromium.orge28e4982009-09-25 20:51:45 +000058 def setUp(self):
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000059 BaseTestCase.setUp(self)
msb@chromium.orge28e4982009-09-25 20:51:45 +000060 self.root_dir = self.Dir()
61 self.args = self.Args()
62 self.url = self.Url()
63 self.relpath = 'asf'
64
65 def testDir(self):
66 members = [
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +000067 'COMMAND', 'Capture', 'CaptureHeadRevision', 'CaptureInfo',
68 'CaptureStatus', 'DiffItem', 'FullUrlForRelativeUrl', 'GetFileProperty',
69 'IsMoved', 'Run', 'RunAndFilterOutput', 'RunAndGetFileList',
70 'RunCommand', 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert',
71 'revinfo', 'runhooks', 'scm_name', 'status', 'update', 'url',
msb@chromium.orge28e4982009-09-25 20:51:45 +000072 ]
73
74 # If you add a member, be sure to add the relevant test!
75 self.compareMembers(self._scm_wrapper(), members)
76
77 def testUnsupportedSCM(self):
78 args = [self.url, self.root_dir, self.relpath]
79 kwargs = {'scm_name' : 'foo'}
80 exception_msg = 'Unsupported scm %(scm_name)s' % kwargs
81 self.assertRaisesError(exception_msg, self._scm_wrapper, *args, **kwargs)
82
83 def testFullUrlForRelativeUrl(self):
84 self.url = 'svn://a/b/c/d'
85
86 self.mox.ReplayAll()
87 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
88 relpath=self.relpath)
89 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap')
90
91 def testRunCommandException(self):
92 options = self.Options(verbose=False)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +000093 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
94 gclient_scm.os.path.exists(file_path).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +000095
96 self.mox.ReplayAll()
97 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
98 relpath=self.relpath)
99 exception = "Unsupported argument(s): %s" % ','.join(self.args)
100 self.assertRaisesError(exception, scm.RunCommand,
101 'update', options, self.args)
102
103 def testRunCommandUnknown(self):
104 # TODO(maruel): if ever used.
105 pass
106
107 def testRevertMissing(self):
108 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000109 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
110 gclient_scm.os.path.isdir(base_path).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000111 # It'll to a checkout instead.
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000112 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
113 ).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000114 print("\n_____ %s is missing, synching instead" % self.relpath)
115 # Checkout.
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000116 gclient_scm.os.path.exists(base_path).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000117 files_list = self.mox.CreateMockAnything()
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000118 gclient_scm.scm.SVN.RunAndGetFileList(options,
119 ['checkout', self.url, base_path],
120 self.root_dir, files_list)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000121
122 self.mox.ReplayAll()
123 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
124 relpath=self.relpath)
125 scm.revert(options, self.args, files_list)
126
127 def testRevertNone(self):
128 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000129 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
130 gclient_scm.os.path.isdir(base_path).AndReturn(True)
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000131 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn([])
132 gclient_scm.scm.SVN.RunAndGetFileList(options,
133 ['update', '--revision', 'BASE'],
134 base_path, mox.IgnoreArg())
msb@chromium.orge28e4982009-09-25 20:51:45 +0000135
136 self.mox.ReplayAll()
137 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
138 relpath=self.relpath)
139 file_list = []
140 scm.revert(options, self.args, file_list)
141
142 def testRevert2Files(self):
143 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000144 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
145 gclient_scm.os.path.isdir(base_path).AndReturn(True)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000146 items = [
147 ('M ', 'a'),
148 ('A ', 'b'),
149 ]
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000150 file_path1 = gclient_scm.os.path.join(base_path, 'a')
151 file_path2 = gclient_scm.os.path.join(base_path, 'b')
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000152 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000153 gclient_scm.os.path.exists(file_path1).AndReturn(True)
154 gclient_scm.os.path.isfile(file_path1).AndReturn(True)
155 gclient_scm.os.remove(file_path1)
156 gclient_scm.os.path.exists(file_path2).AndReturn(True)
157 gclient_scm.os.path.isfile(file_path2).AndReturn(True)
158 gclient_scm.os.remove(file_path2)
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000159 gclient_scm.scm.SVN.RunAndGetFileList(options,
160 ['update', '--revision', 'BASE'],
161 base_path, mox.IgnoreArg())
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000162 print(gclient_scm.os.path.join(base_path, 'a'))
163 print(gclient_scm.os.path.join(base_path, 'b'))
msb@chromium.orge28e4982009-09-25 20:51:45 +0000164
165 self.mox.ReplayAll()
166 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
167 relpath=self.relpath)
168 file_list = []
169 scm.revert(options, self.args, file_list)
170
171 def testRevertDirectory(self):
172 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000173 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
174 gclient_scm.os.path.isdir(base_path).AndReturn(True)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000175 items = [
176 ('~ ', 'a'),
177 ]
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000178 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000179 file_path = gclient_scm.os.path.join(base_path, 'a')
msb@chromium.orge28e4982009-09-25 20:51:45 +0000180 print(file_path)
181 gclient_scm.os.path.exists(file_path).AndReturn(True)
182 gclient_scm.os.path.isfile(file_path).AndReturn(False)
183 gclient_scm.os.path.isdir(file_path).AndReturn(True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000184 gclient_scm.gclient_utils.RemoveDirectory(file_path)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000185 file_list1 = []
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000186 gclient_scm.scm.SVN.RunAndGetFileList(options,
187 ['update', '--revision', 'BASE'],
188 base_path, mox.IgnoreArg())
msb@chromium.orge28e4982009-09-25 20:51:45 +0000189
190 self.mox.ReplayAll()
191 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
192 relpath=self.relpath)
193 file_list2 = []
194 scm.revert(options, self.args, file_list2)
195
196 def testStatus(self):
197 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000198 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
199 gclient_scm.os.path.isdir(base_path).AndReturn(True)
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000200 gclient_scm.scm.SVN.RunAndGetFileList(options,
201 ['status'] + self.args,
202 base_path, []).AndReturn(None)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000203
204 self.mox.ReplayAll()
205 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
206 relpath=self.relpath)
207 file_list = []
208 self.assertEqual(scm.status(options, self.args, file_list), None)
209
210
211 # TODO(maruel): TEST REVISIONS!!!
212 # TODO(maruel): TEST RELOCATE!!!
213 def testUpdateCheckout(self):
214 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000215 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
216 file_info = gclient_scm.gclient_utils.PrintableObject()
msb@chromium.orge28e4982009-09-25 20:51:45 +0000217 file_info.root = 'blah'
218 file_info.url = self.url
219 file_info.uuid = 'ABC'
220 file_info.revision = 42
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000221 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
222 ).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000223 # Checkout.
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000224 gclient_scm.os.path.exists(base_path).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000225 files_list = self.mox.CreateMockAnything()
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000226 gclient_scm.scm.SVN.RunAndGetFileList(options,
227 ['checkout', self.url, base_path],
228 self.root_dir, files_list)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000229 self.mox.ReplayAll()
230 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
231 relpath=self.relpath)
232 scm.update(options, (), files_list)
233
234 def testUpdateUpdate(self):
235 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000236 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000237 options.force = True
238 options.nohooks = False
239 file_info = {
240 'Repository Root': 'blah',
241 'URL': self.url,
242 'UUID': 'ABC',
243 'Revision': 42,
244 }
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000245 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
246 ).AndReturn(False)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000247 # Checkout or update.
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000248 gclient_scm.os.path.exists(base_path).AndReturn(True)
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000249 gclient_scm.scm.SVN.CaptureInfo(
250 gclient_scm.os.path.join(base_path, "."), '.'
251 ).AndReturn(file_info)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000252 # Cheat a bit here.
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000253 gclient_scm.scm.SVN.CaptureInfo(file_info['URL'], '.').AndReturn(file_info)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000254 additional_args = []
255 if options.manually_grab_svn_rev:
256 additional_args = ['--revision', str(file_info['Revision'])]
257 files_list = []
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000258 gclient_scm.scm.SVN.RunAndGetFileList(
259 options,
260 ['update', base_path] + additional_args,
261 self.root_dir, files_list)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000262
263 self.mox.ReplayAll()
264 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
265 relpath=self.relpath)
266 scm.update(options, (), files_list)
267
268 def testUpdateGit(self):
269 options = self.Options(verbose=True)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000270 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
271 gclient_scm.os.path.exists(file_path).AndReturn(True)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000272 print("________ found .git directory; skipping %s" % self.relpath)
273
274 self.mox.ReplayAll()
275 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
276 relpath=self.relpath)
277 file_list = []
278 scm.update(options, self.args, file_list)
279
msb@chromium.orge28e4982009-09-25 20:51:45 +0000280
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000281class GitWrapperTestCase(SuperMoxBaseTestBase):
282 """This class doesn't use pymox."""
msb@chromium.orge28e4982009-09-25 20:51:45 +0000283 class OptionsObject(object):
284 def __init__(self, test_case, verbose=False, revision=None):
285 self.verbose = verbose
286 self.revision = revision
287 self.manually_grab_svn_rev = True
288 self.deps_os = None
289 self.force = False
290 self.nohooks = False
291
292 sample_git_import = """blob
293mark :1
294data 6
295Hello
296
297blob
298mark :2
299data 4
300Bye
301
302reset refs/heads/master
303commit refs/heads/master
304mark :3
305author Bob <bob@example.com> 1253744361 -0700
306committer Bob <bob@example.com> 1253744361 -0700
307data 8
308A and B
309M 100644 :1 a
310M 100644 :2 b
311
312blob
313mark :4
314data 10
315Hello
316You
317
318blob
319mark :5
320data 8
321Bye
322You
323
324commit refs/heads/origin
325mark :6
326author Alice <alice@example.com> 1253744424 -0700
327committer Alice <alice@example.com> 1253744424 -0700
328data 13
329Personalized
330from :3
331M 100644 :4 a
332M 100644 :5 b
333
334reset refs/heads/master
335from :3
336"""
msb@chromium.orge28e4982009-09-25 20:51:45 +0000337 def Options(self, *args, **kwargs):
338 return self.OptionsObject(self, *args, **kwargs)
339
340 def CreateGitRepo(self, git_import, path):
maruel@chromium.orgd5800f12009-11-12 20:03:43 +0000341 """Do it for real."""
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000342 try:
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000343 Popen(['git', 'init'], stdout=PIPE, stderr=STDOUT,
344 cwd=path).communicate()
345 except OSError:
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000346 # git is not available, skip this test.
347 return False
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000348 Popen(['git', 'fast-import'], stdin=PIPE, stdout=PIPE, stderr=STDOUT,
349 cwd=path).communicate(input=git_import)
350 Popen(['git', 'checkout'], stdout=PIPE, stderr=STDOUT,
351 cwd=path).communicate()
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000352 return True
msb@chromium.orge28e4982009-09-25 20:51:45 +0000353
msb@chromium.orge28e4982009-09-25 20:51:45 +0000354 def setUp(self):
msb@chromium.orge28e4982009-09-25 20:51:45 +0000355 self.args = self.Args()
356 self.url = 'git://foo'
357 self.root_dir = tempfile.mkdtemp()
358 self.relpath = '.'
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000359 self.base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000360 self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000361 SuperMoxBaseTestBase.setUp(self)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000362
363 def tearDown(self):
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000364 SuperMoxBaseTestBase.tearDown(self)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000365 shutil.rmtree(self.root_dir)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000366
367 def testDir(self):
368 members = [
maruel@chromium.org5aeb7dd2009-11-17 18:09:01 +0000369 'COMMAND', 'Capture', 'CaptureStatus', 'FullUrlForRelativeUrl',
370 'RunCommand', 'cleanup', 'diff', 'export', 'relpath', 'revert',
371 'revinfo', 'runhooks', 'scm_name', 'status', 'update', 'url',
msb@chromium.orge28e4982009-09-25 20:51:45 +0000372 ]
373
374 # If you add a member, be sure to add the relevant test!
375 self.compareMembers(gclient_scm.CreateSCM(url=self.url), members)
376
377 def testRevertMissing(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000378 if not self.enabled:
379 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000380 options = self.Options()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000381 file_path = gclient_scm.os.path.join(self.base_path, 'a')
382 gclient_scm.os.remove(file_path)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000383 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
384 relpath=self.relpath)
385 file_list = []
386 scm.revert(options, self.args, file_list)
387 self.assertEquals(file_list, [file_path])
388 file_list = []
389 scm.diff(options, self.args, file_list)
390 self.assertEquals(file_list, [])
391
392 def testRevertNone(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000393 if not self.enabled:
394 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000395 options = self.Options()
396 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
397 relpath=self.relpath)
398 file_list = []
399 scm.revert(options, self.args, file_list)
400 self.assertEquals(file_list, [])
msb@chromium.org0f282062009-11-06 20:14:02 +0000401 self.assertEquals(scm.revinfo(options, self.args, None),
msb@chromium.orge28e4982009-09-25 20:51:45 +0000402 '069c602044c5388d2d15c3f875b057c852003458')
403
404
405 def testRevertModified(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000406 if not self.enabled:
407 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000408 options = self.Options()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000409 file_path = gclient_scm.os.path.join(self.base_path, 'a')
msb@chromium.orge28e4982009-09-25 20:51:45 +0000410 open(file_path, 'a').writelines('touched\n')
411 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
412 relpath=self.relpath)
413 file_list = []
414 scm.revert(options, self.args, file_list)
415 self.assertEquals(file_list, [file_path])
416 file_list = []
417 scm.diff(options, self.args, file_list)
418 self.assertEquals(file_list, [])
msb@chromium.org0f282062009-11-06 20:14:02 +0000419 self.assertEquals(scm.revinfo(options, self.args, None),
msb@chromium.orge28e4982009-09-25 20:51:45 +0000420 '069c602044c5388d2d15c3f875b057c852003458')
421
422 def testRevertNew(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000423 if not self.enabled:
424 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000425 options = self.Options()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000426 file_path = gclient_scm.os.path.join(self.base_path, 'c')
msb@chromium.orge28e4982009-09-25 20:51:45 +0000427 f = open(file_path, 'w')
428 f.writelines('new\n')
429 f.close()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000430 Popen(['git', 'add', 'c'], stdout=PIPE,
431 stderr=STDOUT, cwd=self.base_path).communicate()
msb@chromium.orge28e4982009-09-25 20:51:45 +0000432 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
433 relpath=self.relpath)
434 file_list = []
435 scm.revert(options, self.args, file_list)
436 self.assertEquals(file_list, [file_path])
437 file_list = []
438 scm.diff(options, self.args, file_list)
439 self.assertEquals(file_list, [])
msb@chromium.org0f282062009-11-06 20:14:02 +0000440 self.assertEquals(scm.revinfo(options, self.args, None),
msb@chromium.orge28e4982009-09-25 20:51:45 +0000441 '069c602044c5388d2d15c3f875b057c852003458')
442
443 def testStatusNew(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000444 if not self.enabled:
445 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000446 options = self.Options()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000447 file_path = gclient_scm.os.path.join(self.base_path, 'a')
msb@chromium.orge28e4982009-09-25 20:51:45 +0000448 open(file_path, 'a').writelines('touched\n')
449 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
450 relpath=self.relpath)
451 file_list = []
452 scm.status(options, self.args, file_list)
453 self.assertEquals(file_list, [file_path])
454
455 def testStatus2New(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000456 if not self.enabled:
457 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000458 options = self.Options()
459 expected_file_list = []
460 for f in ['a', 'b']:
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000461 file_path = gclient_scm.os.path.join(self.base_path, f)
msb@chromium.orge28e4982009-09-25 20:51:45 +0000462 open(file_path, 'a').writelines('touched\n')
463 expected_file_list.extend([file_path])
464 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
465 relpath=self.relpath)
466 file_list = []
467 scm.status(options, self.args, file_list)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000468 expected_file_list = [gclient_scm.os.path.join(self.base_path, x)
469 for x in ['a', 'b']]
msb@chromium.orge28e4982009-09-25 20:51:45 +0000470 self.assertEquals(sorted(file_list), expected_file_list)
471
472 def testUpdateCheckout(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000473 if not self.enabled:
474 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000475 options = self.Options(verbose=True)
476 root_dir = tempfile.mkdtemp()
477 relpath = 'foo'
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000478 base_path = gclient_scm.os.path.join(root_dir, relpath)
479 url = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
msb@chromium.orge28e4982009-09-25 20:51:45 +0000480 try:
481 scm = gclient_scm.CreateSCM(url=url, root_dir=root_dir,
482 relpath=relpath)
483 file_list = []
484 scm.update(options, (), file_list)
485 self.assertEquals(len(file_list), 2)
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000486 self.assert_(gclient_scm.os.path.isfile(
487 gclient_scm.os.path.join(base_path, 'a')))
msb@chromium.org0f282062009-11-06 20:14:02 +0000488 self.assertEquals(scm.revinfo(options, (), None),
msb@chromium.orge28e4982009-09-25 20:51:45 +0000489 '069c602044c5388d2d15c3f875b057c852003458')
490 finally:
491 shutil.rmtree(root_dir)
492
493 def testUpdateUpdate(self):
maruel@chromium.orgea6c2c52009-10-09 20:38:14 +0000494 if not self.enabled:
495 return
msb@chromium.orge28e4982009-09-25 20:51:45 +0000496 options = self.Options()
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000497 expected_file_list = [gclient_scm.os.path.join(self.base_path, x)
498 for x in ['a', 'b']]
msb@chromium.orge28e4982009-09-25 20:51:45 +0000499 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
500 relpath=self.relpath)
501 file_list = []
502 scm.update(options, (), file_list)
msb@chromium.org0f282062009-11-06 20:14:02 +0000503 self.assertEquals(file_list, expected_file_list)
504 self.assertEquals(scm.revinfo(options, (), None),
msb@chromium.orge28e4982009-09-25 20:51:45 +0000505 'a7142dc9f0009350b96a11f372b6ea658592aa95')
506
msb@chromium.org0f282062009-11-06 20:14:02 +0000507 def testRevinfo(self):
508 if not self.enabled:
509 return
510 options = self.Options()
511 scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
512 relpath=self.relpath)
513 rev_info = scm.revinfo(options, (), None)
514 self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458')
515
msb@chromium.orge28e4982009-09-25 20:51:45 +0000516
msb@chromium.orge28e4982009-09-25 20:51:45 +0000517if __name__ == '__main__':
maruel@chromium.org8ef5f542009-11-12 02:05:02 +0000518 import unittest
msb@chromium.orge28e4982009-09-25 20:51:45 +0000519 unittest.main()
520
521# vim: ts=2:sw=2:tw=80:et: