1
Patch based from diff with skia repository from commit
2
013397884c73959dc07cb0a26ee742b1cdfbda8a
4
Adds support for Python3, but removes the constraint of only SHA based refs in
6
diff --git a/tools/git-sync-deps b/tools/git-sync-deps
7
index c7379c0b5c..f63d4d9ccf 100755
8
--- a/tools/git-sync-deps
9
+++ b/tools/git-sync-deps
10
@@ -43,7 +43,7 @@ def git_executable():
11
A string suitable for passing to subprocess functions, or None.
13
envgit = os.environ.get('GIT_EXECUTABLE')
14
- searchlist = ['git']
15
+ searchlist = ['git', 'git.bat']
17
searchlist.insert(0, envgit)
18
with open(os.devnull, 'w') as devnull:
19
@@ -94,21 +94,25 @@ def is_git_toplevel(git, directory):
21
toplevel = subprocess.check_output(
22
[git, 'rev-parse', '--show-toplevel'], cwd=directory).strip()
23
- return os.path.realpath(directory) == os.path.realpath(toplevel)
24
+ return os.path.realpath(directory) == os.path.realpath(toplevel.decode())
25
except subprocess.CalledProcessError:
29
-def status(directory, checkoutable):
30
- def truncate(s, length):
31
+def status(directory, commithash, change):
32
+ def truncate_beginning(s, length):
33
+ return s if len(s) <= length else '...' + s[-(length-3):]
34
+ def truncate_end(s, length):
35
return s if len(s) <= length else s[:(length - 3)] + '...'
38
- directory = truncate(directory, dlen)
39
- checkoutable = truncate(checkoutable, 40)
40
- sys.stdout.write('%-*s @ %s\n' % (dlen, directory, checkoutable))
41
+ directory = truncate_beginning(directory, dlen)
42
+ commithash = truncate_end(commithash, 40)
43
+ symbol = '>' if change else '@'
44
+ sys.stdout.write('%-*s %s %s\n' % (dlen, directory, symbol, commithash))
47
-def git_checkout_to_directory(git, repo, checkoutable, directory, verbose):
48
+def git_checkout_to_directory(git, repo, commithash, directory, verbose):
49
"""Checkout (and clone if needed) a Git repository.
52
@@ -117,8 +121,7 @@ def git_checkout_to_directory(git, repo, checkoutable, directory, verbose):
53
repo (string) the location of the repository, suitable
54
for passing to `git clone`.
56
- checkoutable (string) a tag, branch, or commit, suitable for
57
- passing to `git checkout`
58
+ commithash (string) a commit, suitable for passing to `git checkout`
60
directory (string) the path into which the repository
61
should be checked out.
62
@@ -129,7 +132,12 @@ def git_checkout_to_directory(git, repo, checkoutable, directory, verbose):
64
if not os.path.isdir(directory):
65
subprocess.check_call(
66
- [git, 'clone', '--quiet', repo, directory])
67
+ [git, 'clone', '--quiet', '--no-checkout', repo, directory])
68
+ subprocess.check_call([git, 'checkout', '--quiet', commithash],
71
+ status(directory, commithash, True)
74
if not is_git_toplevel(git, directory):
75
# if the directory exists, but isn't a git repo, you will modify
76
@@ -145,11 +153,11 @@ def git_checkout_to_directory(git, repo, checkoutable, directory, verbose):
77
with open(os.devnull, 'w') as devnull:
78
# If this fails, we will fetch before trying again. Don't spam user
79
# with error infomation.
80
- if 0 == subprocess.call([git, 'checkout', '--quiet', checkoutable],
81
+ if 0 == subprocess.call([git, 'checkout', '--quiet', commithash],
82
cwd=directory, stderr=devnull):
83
# if this succeeds, skip slow `git fetch`.
85
- status(directory, checkoutable) # Success.
86
+ status(directory, commithash, False) # Success.
89
# If the repo has changed, always force use of the correct repo.
90
@@ -159,18 +167,24 @@ def git_checkout_to_directory(git, repo, checkoutable, directory, verbose):
92
subprocess.check_call([git, 'fetch', '--quiet'], cwd=directory)
94
- subprocess.check_call([git, 'checkout', '--quiet', checkoutable], cwd=directory)
95
+ subprocess.check_call([git, 'checkout', '--quiet', commithash], cwd=directory)
98
- status(directory, checkoutable) # Success.
99
+ status(directory, commithash, True) # Success.
102
def parse_file_to_dict(path):
104
- execfile(path, dictionary)
105
+ with open(path) as f:
106
+ exec('def Var(x): return vars[x]\n' + f.read(), dictionary)
111
+ """SHA1 sums are 160 bits, encoded as lowercase hexadecimal."""
112
+ return len(s) == 40 and all(c in '0123456789abcdef' for c in s)
115
def git_sync_deps(deps_file_path, command_line_os_requests, verbose):
116
"""Grab dependencies, with optional platform support.
118
@@ -204,19 +218,19 @@ def git_sync_deps(deps_file_path, command_line_os_requests, verbose):
119
raise Exception('%r is parent of %r' % (other_dir, directory))
120
list_of_arg_lists = []
121
for directory in sorted(dependencies):
122
- if not isinstance(dependencies[directory], basestring):
123
+ if not isinstance(dependencies[directory], str):
125
- print 'Skipping "%s".' % directory
126
+ sys.stdout.write( 'Skipping "%s".\n' % directory)
128
if '@' in dependencies[directory]:
129
- repo, checkoutable = dependencies[directory].split('@', 1)
130
+ repo, commithash = dependencies[directory].split('@', 1)
132
- raise Exception("please specify commit or tag")
133
+ raise Exception("please specify commit")
135
relative_directory = os.path.join(deps_file_directory, directory)
137
list_of_arg_lists.append(
138
- (git, repo, checkoutable, relative_directory, verbose))
139
+ (git, repo, commithash, relative_directory, verbose))
141
multithread(git_checkout_to_directory, list_of_arg_lists)