|
|
|
@ -139,6 +139,7 @@ Personalized
|
|
|
|
|
from :3
|
|
|
|
|
M 100644 :4 a
|
|
|
|
|
M 100644 :5 b
|
|
|
|
|
M 160000 1111111111111111111111111111111111111111 submodule
|
|
|
|
|
|
|
|
|
|
blob
|
|
|
|
|
mark :7
|
|
|
|
@ -267,7 +268,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
scm.revert(options, self.args, file_list)
|
|
|
|
|
self.assertEqual(file_list, [])
|
|
|
|
|
self.assertEqual(scm.revinfo(options, self.args, None),
|
|
|
|
|
'a7142dc9f0009350b96a11f372b6ea658592aa95')
|
|
|
|
|
'4091c7d010ca99d0f2dd416d4b70b758ae432187')
|
|
|
|
|
sys.stdout.close()
|
|
|
|
|
|
|
|
|
|
def testRevertModified(self):
|
|
|
|
@ -287,7 +288,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
scm.diff(options, self.args, file_list)
|
|
|
|
|
self.assertEqual(file_list, [])
|
|
|
|
|
self.assertEqual(scm.revinfo(options, self.args, None),
|
|
|
|
|
'a7142dc9f0009350b96a11f372b6ea658592aa95')
|
|
|
|
|
'4091c7d010ca99d0f2dd416d4b70b758ae432187')
|
|
|
|
|
sys.stdout.close()
|
|
|
|
|
|
|
|
|
|
def testRevertNew(self):
|
|
|
|
@ -309,7 +310,7 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
scm.diff(options, self.args, file_list)
|
|
|
|
|
self.assertEqual(file_list, [])
|
|
|
|
|
self.assertEqual(scm.revinfo(options, self.args, None),
|
|
|
|
|
'a7142dc9f0009350b96a11f372b6ea658592aa95')
|
|
|
|
|
'4091c7d010ca99d0f2dd416d4b70b758ae432187')
|
|
|
|
|
sys.stdout.close()
|
|
|
|
|
|
|
|
|
|
def testStatusRef(self):
|
|
|
|
@ -389,14 +390,16 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
if not self.enabled:
|
|
|
|
|
return
|
|
|
|
|
options = self.Options()
|
|
|
|
|
expected_file_list = [join(self.base_path, x) for x in ['a', 'b']]
|
|
|
|
|
expected_file_list = [
|
|
|
|
|
join(self.base_path, x) for x in ['a', 'b', 'submodule']
|
|
|
|
|
]
|
|
|
|
|
scm = gclient_scm.GitWrapper(self.url, self.root_dir, self.relpath)
|
|
|
|
|
file_list = []
|
|
|
|
|
|
|
|
|
|
scm.update(options, (), file_list)
|
|
|
|
|
self.assertEqual(file_list, expected_file_list)
|
|
|
|
|
self.assertEqual(scm.revinfo(options, (), None),
|
|
|
|
|
'a7142dc9f0009350b96a11f372b6ea658592aa95')
|
|
|
|
|
'4091c7d010ca99d0f2dd416d4b70b758ae432187')
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
scm._Capture(['config', '--get', 'diff.ignoreSubmodules']), 'dirty')
|
|
|
|
|
self.assertEqual(
|
|
|
|
@ -418,12 +421,13 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
rev = scm.revinfo(options, (), None)
|
|
|
|
|
file_list = []
|
|
|
|
|
scm.update(options, (), file_list)
|
|
|
|
|
self.assertEqual(file_list,
|
|
|
|
|
[join(self.base_path, x) for x in ['a', 'b', 'c']])
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
file_list,
|
|
|
|
|
[join(self.base_path, x) for x in ['a', 'b', 'c', 'submodule']])
|
|
|
|
|
# The actual commit that is created is unstable, so we verify its tree
|
|
|
|
|
# and parents instead.
|
|
|
|
|
self.assertEqual(scm._Capture(['rev-parse', 'HEAD:']),
|
|
|
|
|
'd2e35c10ac24d6c621e14a1fcadceb533155627d')
|
|
|
|
|
'3a3ba72731fa208d37b06598a129ba93970325df')
|
|
|
|
|
parent = 'HEAD^' if sys.platform != 'win32' else 'HEAD^^'
|
|
|
|
|
self.assertEqual(scm._Capture(['rev-parse', parent + '1']), rev)
|
|
|
|
|
self.assertEqual(scm._Capture(['rev-parse', parent + '2']),
|
|
|
|
@ -445,12 +449,13 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
'(y)es / (q)uit / (s)kip : ', 'y')
|
|
|
|
|
file_list = []
|
|
|
|
|
scm.update(options, (), file_list)
|
|
|
|
|
self.assertEqual(file_list,
|
|
|
|
|
[join(self.base_path, x) for x in ['a', 'b', 'c']])
|
|
|
|
|
self.assertEqual(
|
|
|
|
|
file_list,
|
|
|
|
|
[join(self.base_path, x) for x in ['a', 'b', 'c', 'submodule']])
|
|
|
|
|
# The actual commit that is created is unstable, so we verify its tree
|
|
|
|
|
# and parent instead.
|
|
|
|
|
self.assertEqual(scm._Capture(['rev-parse', 'HEAD:']),
|
|
|
|
|
'd2e35c10ac24d6c621e14a1fcadceb533155627d')
|
|
|
|
|
'3a3ba72731fa208d37b06598a129ba93970325df')
|
|
|
|
|
parent = 'HEAD^' if sys.platform != 'win32' else 'HEAD^^'
|
|
|
|
|
self.assertEqual(scm._Capture(['rev-parse', parent + '1']),
|
|
|
|
|
scm._Capture(['rev-parse', 'origin/main']))
|
|
|
|
@ -801,14 +806,15 @@ class UnmanagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
self.relpath = '.'
|
|
|
|
|
self.base_path = join(self.root_dir, self.relpath)
|
|
|
|
|
url_with_commit_ref = origin_root_dir +\
|
|
|
|
|
'@a7142dc9f0009350b96a11f372b6ea658592aa95'
|
|
|
|
|
'@4091c7d010ca99d0f2dd416d4b70b758ae432187'
|
|
|
|
|
|
|
|
|
|
scm = gclient_scm.GitWrapper(url_with_commit_ref, self.root_dir,
|
|
|
|
|
self.relpath)
|
|
|
|
|
|
|
|
|
|
expected_file_list = [
|
|
|
|
|
join(self.base_path, "a"),
|
|
|
|
|
join(self.base_path, "b")
|
|
|
|
|
join(self.base_path, "b"),
|
|
|
|
|
join(self.base_path, "submodule"),
|
|
|
|
|
]
|
|
|
|
|
file_list = []
|
|
|
|
|
options.revision = 'unmanaged'
|
|
|
|
@ -816,11 +822,11 @@ class UnmanagedGitWrapperTestCase(BaseGitWrapperTestCase):
|
|
|
|
|
|
|
|
|
|
self.assertEqual(file_list, expected_file_list)
|
|
|
|
|
self.assertEqual(scm.revinfo(options, (), None),
|
|
|
|
|
'a7142dc9f0009350b96a11f372b6ea658592aa95')
|
|
|
|
|
'4091c7d010ca99d0f2dd416d4b70b758ae432187')
|
|
|
|
|
# indicates detached HEAD
|
|
|
|
|
self.assertEqual(self.getCurrentBranch(), None)
|
|
|
|
|
self.checkInStdout(
|
|
|
|
|
'Checked out a7142dc9f0009350b96a11f372b6ea658592aa95 to a detached HEAD'
|
|
|
|
|
'Checked out 4091c7d010ca99d0f2dd416d4b70b758ae432187 to a detached HEAD'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def testUpdateCloneOnBranch(self):
|
|
|
|
@ -1602,6 +1608,57 @@ class CheckDiffTest(fake_repos.FakeReposTestBase):
|
|
|
|
|
self.assertFalse(scm.check_diff(self.githash('repo_1', 2)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Submodules(BaseGitWrapperTestCase):
|
|
|
|
|
submodule_hash = '1111111111111111111111111111111111111111'
|
|
|
|
|
|
|
|
|
|
def testGetSubmoduleClean(self):
|
|
|
|
|
scm = gclient_scm.GitWrapper(self.url, self.root_dir, self.relpath)
|
|
|
|
|
options = self.Options()
|
|
|
|
|
scm.update(options, None, [])
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleStateFromIndex(),
|
|
|
|
|
{'submodule': self.submodule_hash})
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleDiff(), {})
|
|
|
|
|
|
|
|
|
|
def testGetSubmoduleModified(self):
|
|
|
|
|
scm = gclient_scm.GitWrapper(self.url, self.root_dir, self.relpath)
|
|
|
|
|
options = self.Options()
|
|
|
|
|
scm.update(options, None, [])
|
|
|
|
|
|
|
|
|
|
# Create submodule diff
|
|
|
|
|
submodule_dir = os.path.join(self.root_dir, 'submodule')
|
|
|
|
|
subprocess2.check_output(['git', '-C', submodule_dir, 'init'])
|
|
|
|
|
subprocess2.check_output([
|
|
|
|
|
'git', '-C', submodule_dir, 'commit', '-m', 'foo', '--allow-empty'
|
|
|
|
|
])
|
|
|
|
|
new_rev = subprocess2.check_output(
|
|
|
|
|
['git', '-C', submodule_dir, 'rev-parse',
|
|
|
|
|
'HEAD']).decode('utf-8').strip()
|
|
|
|
|
|
|
|
|
|
# And file diff
|
|
|
|
|
with open(os.path.join(self.root_dir, 'a'), 'w') as f:
|
|
|
|
|
f.write('foo')
|
|
|
|
|
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleStateFromIndex(),
|
|
|
|
|
{'submodule': self.submodule_hash})
|
|
|
|
|
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleDiff(),
|
|
|
|
|
{'submodule': (self.submodule_hash, new_rev)})
|
|
|
|
|
|
|
|
|
|
def testGetSubmoduleDeleted(self):
|
|
|
|
|
scm = gclient_scm.GitWrapper(self.url, self.root_dir, self.relpath)
|
|
|
|
|
options = self.Options()
|
|
|
|
|
scm.update(options, None, [])
|
|
|
|
|
subprocess2.check_output(
|
|
|
|
|
['git', '-C', self.root_dir, 'rm', 'submodule'])
|
|
|
|
|
|
|
|
|
|
# When git removes submodule, it's autmatically staged and content is
|
|
|
|
|
# unavailable. Therefore, the index shouldn't have any entries and diff
|
|
|
|
|
# should be empty.
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleStateFromIndex(), {})
|
|
|
|
|
|
|
|
|
|
self.assertEqual(scm.GetSubmoduleDiff(), {})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if 'unittest.util' in __import__('sys').modules:
|
|
|
|
|
# Show full diff in self.assertEqual.
|
|
|
|
|
__import__('sys').modules['unittest.util']._MAX_LENGTH = 999999999
|
|
|
|
|