Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: pipa/build/gitdeps.py

Issue 2695323004: Pull in Chromium dependencies from HEAD (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « GITDEPS ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pipa/build/gitdeps.py
diff --git a/pipa/build/gitdeps.py b/pipa/build/gitdeps.py
index 605a7112a757fc2c3ba44d8048ebce71f52731cf..0d97843e768eae5944ea5ce420a6a1f82fd7d5af 100644
--- a/pipa/build/gitdeps.py
+++ b/pipa/build/gitdeps.py
@@ -274,11 +274,34 @@ def _GetGitOrigin(path):
return None
-def _GetGitHead(path):
- """Returns the hash of the head of the git repo in |path|. Raises an IOError
- if |path| doesn't exist or is not a git repo.
+def _GetGitHead(repo):
+ """Returns the hash of the head of the git repo local checkout.
+
+ Raises:
+ IOError: if repo's checkout directory doesn't exist or not a git repository.
+ """
+ with open(os.path.join(repo.checkout_dir, '.git', 'HEAD'), 'rb') as head:
+ return head.read().strip()
+
+
+def _GetGitFetchHead(repo):
+ """Returns the hash of the latest fetched revision.
+
+ Raises:
+ IOError: if repo's checkout directory doesn't exist or not a git repository.
+ KeyError: if the fetched head of the remote repository is not found in the
+ local checkout.
"""
- return open(os.path.join(path, '.git', 'HEAD'), 'rb').read().strip()
+ path = os.path.join(repo.checkout_dir, '.git', 'FETCH_HEAD')
+ with open(path, 'rb') as heads_file:
+ for line in heads_file.readlines():
+ if not line.strip():
+ continue
+ head, repo_url = line.strip().split()
+ if repo_url == repo.repository:
+ return head
+ raise KeyError('Did not find fetched head for %s in %s' %
+ (repo.repository, path))
def _NormalizeGitPath(path):
@@ -390,21 +413,24 @@ def _UpdateCheckout(path, repo, dry_run):
|dry_run| is False.
"""
try:
- # Try a checkout first. If this fails then we'll actually need to fetch
- # the revision.
- _LOGGER.info('Trying to checkout revision %s.', repo.revision)
- _Shell('git', 'checkout', repo.revision, cwd=path,
- dry_run=dry_run)
- return
+ # If the repo has a revision specified, try a checkout first. If this fails
+ # then we'll actually need to fetch.
+ if _GIT_SHA1_RE.match(repo.revision):
+ _LOGGER.info('Trying to checkout revision %s.', repo.revision)
+ _Shell('git', 'checkout', repo.revision, cwd=path,
+ dry_run=dry_run)
+ return
except RuntimeError:
pass
# Fetch the revision and then check it out. Let output go to screen rather
# than be buffered.
- _LOGGER.info('Fetching and checking out revision %s.', repo.revision)
+ _LOGGER.info('Fetching revision %s.', repo.revision)
_Shell('git', 'fetch', '--depth=1', 'origin', repo.revision,
cwd=path, dry_run=dry_run, stdout=None, stderr=None)
- _Shell('git', 'checkout', repo.revision, cwd=path,
+ new_rev = _GetGitFetchHead(repo) if repo.revision == 'HEAD' else repo.revision
+ _LOGGER.info('Checking out revision %s.', new_rev)
+ _Shell('git', 'checkout', new_rev, cwd=path,
dry_run=dry_run, stdout=None, stderr=None)
@@ -515,7 +541,7 @@ def _InstallRepository(options, repo):
create_checkout = False
# Get the checked out revision.
- revhash = _GetGitHead(repo.checkout_dir)
+ revhash = _GetGitHead(repo)
if revhash == repo.revision:
_LOGGER.debug('Checkout is already up to date.')
update_checkout = False
« no previous file with comments | « GITDEPS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698