Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: ensure_dependencies.py

Issue 29370933: Issue 4503 - ensure_dependencies.py fails for git submodule
Left Patch Set: Just updated to hg:3e083509a284 / git:f4957fd Created Jan. 9, 2017, 2:44 p.m.
Right Patch Set: Actual fix: now editing actual repo excludes file Created Jan. 9, 2017, 2:54 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « dependencies ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 2
3 # This Source Code Form is subject to the terms of the Mozilla Public 3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this 4 # License, v. 2.0. If a copy of the MPL was not distributed with this
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 6
7 import sys 7 import sys
8 import os 8 import os
9 import posixpath 9 import posixpath
10 import re 10 import re
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 if subprocess.call(['git', 'branch', '--track', local, remote], 117 if subprocess.call(['git', 'branch', '--track', local, remote],
118 cwd=repo, stdout=devnull, stderr=devnull) == 0: 118 cwd=repo, stdout=devnull, stderr=devnull) == 0:
119 newly_tracked = True 119 newly_tracked = True
120 # Finally fetch any newly tracked remote branches 120 # Finally fetch any newly tracked remote branches
121 if newly_tracked: 121 if newly_tracked:
122 subprocess.check_call(['git', 'fetch', '--quiet', 'origin'], cwd=rep o) 122 subprocess.check_call(['git', 'fetch', '--quiet', 'origin'], cwd=rep o)
123 123
124 def update(self, repo, rev, revname): 124 def update(self, repo, rev, revname):
125 subprocess.check_call(['git', 'checkout', '--quiet', revname], cwd=repo) 125 subprocess.check_call(['git', 'checkout', '--quiet', revname], cwd=repo)
126 126
127 def parse_repo_path(self, dot_git_path):
128 # .git for submodule is a file with actual repo path like so:
129 # gitdir: ../.git/some_path/some_other_path
130 with open(dot_git_path, 'r') as f:
131 return f.read().replace('\n', '')[8:] # skip 'gitdir: ' (8 first charact ers)
132
127 def ignore(self, target, repo): 133 def ignore(self, target, repo):
128 module = os.path.sep + os.path.relpath(target, repo) 134 module = os.path.relpath(target, repo)
129 exclude_file = os.path.join(repo, '.git', 'info', 'exclude') 135 dot_git_path = os.path.join(repo, ".git")
130 _ensure_line_exists(exclude_file, module) 136 exclude_file = os.path.join(dot_git_path, "info", "exclude")
137 if os.path.isfile(dot_git_path):
138 logging.warning("%s seems to be Git submodule" % dot_git_path)
139 new_repo = self.parse_repo_path(dot_git_path)
140 logging.warning('actual repo path is %s' % new_repo)
141 exclude_file = os.path.join(new_repo, "info", "exclude")
142 _ensure_line_exists(exclude_file, module)
131 143
132 def postprocess_url(self, url): 144 def postprocess_url(self, url):
133 # Handle alternative syntax of SSH URLS 145 # Handle alternative syntax of SSH URLS
134 if '@' in url and ':' in url and not urlparse.urlsplit(url).scheme: 146 if '@' in url and ':' in url and not urlparse.urlsplit(url).scheme:
135 return 'ssh://' + url.replace(':', '/', 1) 147 return 'ssh://' + url.replace(':', '/', 1)
136 return url 148 return url
137 149
138 repo_types = OrderedDict(( 150 repo_types = OrderedDict((
139 ('hg', Mercurial()), 151 ('hg', Mercurial()),
140 ('git', Git()), 152 ('git', Git()),
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 args = parser.parse_args() 383 args = parser.parse_args()
372 384
373 if args.quiet: 385 if args.quiet:
374 logging.disable(logging.INFO) 386 logging.disable(logging.INFO)
375 387
376 repos = args.repos 388 repos = args.repos
377 if not len(repos): 389 if not len(repos):
378 repos = [os.path.dirname(__file__)] 390 repos = [os.path.dirname(__file__)]
379 for repo in repos: 391 for repo in repos:
380 resolve_deps(repo) 392 resolve_deps(repo)
LEFTRIGHT
« dependencies ('k') | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld