| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 # coding: utf-8 | 2 # coding: utf-8 | 
| 3 | 3 | 
| 4 # This Source Code Form is subject to the terms of the Mozilla Public | 4 # This Source Code Form is subject to the terms of the Mozilla Public | 
| 5 # License, v. 2.0. If a copy of the MPL was not distributed with this | 5 # License, v. 2.0. If a copy of the MPL was not distributed with this | 
| 6 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 6 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
| 7 | 7 | 
| 8 import sys | 8 import sys | 
| 9 import os | 9 import os | 
| 10 import posixpath | 10 import posixpath | 
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 72       if not config.has_section("ui"): | 72       if not config.has_section("ui"): | 
| 73         config.add_section("ui") | 73         config.add_section("ui") | 
| 74 | 74 | 
| 75       config.set("ui", "ignore.dependencies", ignore_path) | 75       config.set("ui", "ignore.dependencies", ignore_path) | 
| 76       with open(config_path, "w") as stream: | 76       with open(config_path, "w") as stream: | 
| 77         config.write(stream) | 77         config.write(stream) | 
| 78 | 78 | 
| 79       module = os.path.relpath(target, repo) | 79       module = os.path.relpath(target, repo) | 
| 80       _ensure_line_exists(ignore_path, module) | 80       _ensure_line_exists(ignore_path, module) | 
| 81 | 81 | 
|  | 82   def postprocess_url(self, url): | 
|  | 83     return url | 
|  | 84 | 
| 82 class Git(): | 85 class Git(): | 
| 83   def istype(self, repodir): | 86   def istype(self, repodir): | 
| 84     return os.path.exists(os.path.join(repodir, ".git")) | 87     return os.path.exists(os.path.join(repodir, ".git")) | 
| 85 | 88 | 
| 86   def clone(self, source, target): | 89   def clone(self, source, target): | 
| 87     source = source.rstrip("/") | 90     source = source.rstrip("/") | 
| 88     if not source.endswith(".git"): | 91     if not source.endswith(".git"): | 
| 89       source += ".git" | 92       source += ".git" | 
| 90     subprocess.check_call(["git", "clone", "--quiet", source, target]) | 93     subprocess.check_call(["git", "clone", "--quiet", source, target]) | 
| 91 | 94 | 
| 92   def get_revision_id(self, repo, rev="HEAD"): | 95   def get_revision_id(self, repo, rev="HEAD"): | 
| 93     command = ["git", "rev-parse", "--revs-only", rev + '^{commit}'] | 96     command = ["git", "rev-parse", "--revs-only", rev + '^{commit}'] | 
| 94     return subprocess.check_output(command, cwd=repo).strip() | 97     return subprocess.check_output(command, cwd=repo).strip() | 
| 95 | 98 | 
| 96   def pull(self, repo): | 99   def pull(self, repo): | 
| 97     subprocess.check_call(["git", "fetch", "--quiet", "--all", "--tags"], cwd=re
     po) | 100     subprocess.check_call(["git", "fetch", "--quiet", "--all", "--tags"], cwd=re
     po) | 
| 98 | 101 | 
| 99   def update(self, repo, rev): | 102   def update(self, repo, rev): | 
| 100     subprocess.check_call(["git", "checkout", "--quiet", rev], cwd=repo) | 103     subprocess.check_call(["git", "checkout", "--quiet", rev], cwd=repo) | 
| 101 | 104 | 
| 102   def ignore(self, target, repo): | 105   def ignore(self, target, repo): | 
| 103     module = os.path.relpath(target, repo) | 106     module = os.path.relpath(target, repo) | 
| 104     exclude_file = os.path.join(repo, ".git", "info", "exclude") | 107     exclude_file = os.path.join(repo, ".git", "info", "exclude") | 
| 105     _ensure_line_exists(exclude_file, module) | 108     _ensure_line_exists(exclude_file, module) | 
| 106 | 109 | 
|  | 110   def postprocess_url(self, url): | 
|  | 111     # Handle alternative syntax of SSH URLS | 
|  | 112     if "@" in url and ":" in url and not urlparse.urlsplit(url).scheme: | 
|  | 113       return "ssh://" + url.replace(":", "/", 1) | 
|  | 114     return url | 
|  | 115 | 
| 107 repo_types = OrderedDict(( | 116 repo_types = OrderedDict(( | 
| 108   ("hg", Mercurial()), | 117   ("hg", Mercurial()), | 
| 109   ("git", Git()), | 118   ("git", Git()), | 
| 110 )) | 119 )) | 
| 111 | 120 | 
| 112 def parse_spec(path, line): | 121 def parse_spec(path, line): | 
| 113   if "=" not in line: | 122   if "=" not in line: | 
| 114     logging.warning("Invalid line in file %s: %s" % (path, line)) | 123     logging.warning("Invalid line in file %s: %s" % (path, line)) | 
| 115     return None, None | 124     return None, None | 
| 116 | 125 | 
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 180     return | 189     return | 
| 181 | 190 | 
| 182   parenttype = get_repo_type(parentrepo) | 191   parenttype = get_repo_type(parentrepo) | 
| 183   type = None | 192   type = None | 
| 184   for key in roots: | 193   for key in roots: | 
| 185     if key == parenttype or (key in repo_types and type is None): | 194     if key == parenttype or (key in repo_types and type is None): | 
| 186       type = key | 195       type = key | 
| 187   if type is None: | 196   if type is None: | 
| 188     raise Exception("No valid source found to create %s" % target) | 197     raise Exception("No valid source found to create %s" % target) | 
| 189 | 198 | 
| 190   if os.path.exists(roots[type]): | 199   postprocess_url = repo_types[type].postprocess_url | 
| 191     url = os.path.join(roots[type], sourcename) | 200   root = postprocess_url(roots[type]) | 
|  | 201   sourcename = postprocess_url(sourcename) | 
|  | 202 | 
|  | 203   if os.path.exists(root): | 
|  | 204     url = os.path.join(root, sourcename) | 
| 192   else: | 205   else: | 
| 193     url = urlparse.urljoin(roots[type], sourcename) | 206     url = urlparse.urljoin(root, sourcename) | 
| 194 | 207 | 
| 195   logging.info("Cloning repository %s into %s" % (url, target)) | 208   logging.info("Cloning repository %s into %s" % (url, target)) | 
| 196   repo_types[type].clone(url, target) | 209   repo_types[type].clone(url, target) | 
| 197 | 210 | 
| 198   for repo in repo_types.itervalues(): | 211   for repo in repo_types.itervalues(): | 
| 199     if repo.istype(parentrepo): | 212     if repo.istype(parentrepo): | 
| 200       repo.ignore(target, parentrepo) | 213       repo.ignore(target, parentrepo) | 
| 201 | 214 | 
| 202 def update_repo(target, revisions): | 215 def update_repo(target, revisions): | 
| 203   type = get_repo_type(target) | 216   type = get_repo_type(target) | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 290   args = parser.parse_args() | 303   args = parser.parse_args() | 
| 291 | 304 | 
| 292   if args.quiet: | 305   if args.quiet: | 
| 293     logging.disable(logging.INFO) | 306     logging.disable(logging.INFO) | 
| 294 | 307 | 
| 295   repos = args.repos | 308   repos = args.repos | 
| 296   if not len(repos): | 309   if not len(repos): | 
| 297     repos = [os.path.dirname(__file__)] | 310     repos = [os.path.dirname(__file__)] | 
| 298   for repo in repos: | 311   for repo in repos: | 
| 299     resolve_deps(repo) | 312     resolve_deps(repo) | 
| OLD | NEW | 
|---|