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

Unified Diff: checkout.py

Issue 10825009: Remove GitSvn*Checkout implementations. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 8 years, 5 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 | « no previous file | tests/checkout_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: checkout.py
diff --git a/checkout.py b/checkout.py
index 2260ab3480f8b9a738b9fe67247e59cd6a6d37e8..6f82383db37000d65d2e6b9c2c7c983ae15a7bec 100644
--- a/checkout.py
+++ b/checkout.py
@@ -566,183 +566,6 @@ class GitCheckoutBase(CheckoutBase):
return branches, active
-class GitSvnCheckoutBase(GitCheckoutBase, SvnMixIn):
- """Base class for git-svn checkout. Not to be used as-is."""
- def __init__(self,
- root_dir, project_name, remote_branch,
- commit_user, commit_pwd,
- svn_url, trunk, post_processors=None):
- """trunk is optional."""
- GitCheckoutBase.__init__(
- self, root_dir, project_name + '.git', remote_branch, post_processors)
- SvnMixIn.__init__(self)
- self.commit_user = commit_user
- self.commit_pwd = commit_pwd
- # svn_url in this case is the root of the svn repository.
- self.svn_url = svn_url
- self.trunk = trunk
- assert bool(self.commit_user) >= bool(self.commit_pwd)
- assert self.svn_url
- assert self.trunk
- self._cache_svn_auth()
-
- def prepare(self, revision):
- """Resets the git repository in a clean state."""
- self._check_call_git(['reset', '--hard', '--quiet'])
- if revision:
- try:
- revision = self._check_output_git(
- ['svn', 'find-rev', 'r%d' % revision])
- except subprocess.CalledProcessError:
- self._check_call_git(
- ['fetch', self.remote, self.remote_branch, '--quiet'])
- revision = self._check_output_git(
- ['svn', 'find-rev', 'r%d' % revision])
- super(GitSvnCheckoutBase, self).prepare(revision)
- else:
- branches, active = self._branches()
- if active != 'master':
- if not 'master' in branches:
- self._check_call_git(
- ['checkout', '--quiet', '-b', 'master',
- '%s/%s' % (self.remote, self.remote_branch)])
- else:
- self._check_call_git(['checkout', 'master', '--force', '--quiet'])
- # git svn rebase --quiet --quiet doesn't work, use two steps to silence
- # it.
- self._check_call_git_svn(['fetch', '--quiet', '--quiet'])
- self._check_call_git(
- ['rebase', '--quiet', '--quiet',
- '%s/%s' % (self.remote, self.remote_branch)])
- if self.working_branch in branches:
- self._call_git(['branch', '-D', self.working_branch])
- return self._get_revision()
-
- def _git_svn_info(self, key):
- """Calls git svn info. This doesn't support nor need --config-dir."""
- return self._parse_svn_info(self._check_output_git(['svn', 'info']), key)
-
- def commit(self, commit_message, user):
- """Commits a patch."""
- logging.info('Committing patch for %s' % user)
- # Fix the commit message and author. It returns the git hash, which we
- # ignore unless it's None.
- if not super(GitSvnCheckoutBase, self).commit(commit_message, user):
- return None
- # TODO(maruel): git-svn ignores --config-dir as of git-svn version 1.7.4 and
- # doesn't support --with-revprop.
- # Either learn perl and upstream or suck it.
- kwargs = {}
- if self.commit_pwd:
- kwargs['stdin'] = self.commit_pwd + '\n'
- kwargs['stderr'] = subprocess2.STDOUT
- self._check_call_git_svn(
- ['dcommit', '--rmdir', '--find-copies-harder',
- '--username', self.commit_user],
- **kwargs)
- revision = int(self._git_svn_info('revision'))
- return revision
-
- def _cache_svn_auth(self):
- """Caches the svn credentials. It is necessary since git-svn doesn't prompt
- for it."""
- if not self.commit_user or not self.commit_pwd:
- return
- # Use capture to lower noise in logs.
- self._check_output_svn(['ls', self.svn_url], cwd=None)
-
- def _check_call_git_svn(self, args, **kwargs):
- """Handles svn authentication while calling git svn."""
- args = ['svn'] + args
- if not self.svn_config.default:
- args.extend(['--config-dir', self.svn_config.svn_config_dir])
- return self._check_call_git(args, **kwargs)
-
- def _get_revision(self):
- revision = int(self._git_svn_info('revision'))
- if revision != self._last_seen_revision:
- logging.info('Updated to revision %d' % revision)
- self._last_seen_revision = revision
- return revision
-
-
-class GitSvnPremadeCheckout(GitSvnCheckoutBase):
- """Manages a git-svn clone made out from an initial git-svn seed.
-
- This class is very similar to GitSvnCheckout but is faster to bootstrap
- because it starts right off with an existing git-svn clone.
- """
- def __init__(self,
- root_dir, project_name, remote_branch,
- commit_user, commit_pwd,
- svn_url, trunk, git_url, post_processors=None):
- super(GitSvnPremadeCheckout, self).__init__(
- root_dir, project_name, remote_branch,
- commit_user, commit_pwd,
- svn_url, trunk, post_processors)
- self.git_url = git_url
- assert self.git_url
-
- def prepare(self, revision):
- """Creates the initial checkout for the repo."""
- if not os.path.isdir(self.project_path):
- logging.info('Checking out %s in %s' %
- (self.project_name, self.project_path))
- assert self.remote == 'origin'
- # self.project_path doesn't exist yet.
- self._check_call_git(
- ['clone', self.git_url, self.project_name, '--quiet'],
- cwd=self.root_dir,
- stderr=subprocess2.STDOUT)
- try:
- configured_svn_url = self._check_output_git(
- ['config', 'svn-remote.svn.url']).strip()
- except subprocess.CalledProcessError:
- configured_svn_url = ''
-
- if configured_svn_url.strip() != self.svn_url:
- self._check_call_git_svn(
- ['init',
- '--prefix', self.remote + '/',
- '-T', self.trunk,
- self.svn_url])
- self._check_call_git_svn(['fetch'])
- return super(GitSvnPremadeCheckout, self).prepare(revision)
-
-
-class GitSvnCheckout(GitSvnCheckoutBase):
- """Manages a git-svn clone.
-
- Using git-svn hides some of the complexity of using a svn checkout.
- """
- def __init__(self,
- root_dir, project_name,
- commit_user, commit_pwd,
- svn_url, trunk, post_processors=None):
- super(GitSvnCheckout, self).__init__(
- root_dir, project_name, 'trunk',
- commit_user, commit_pwd,
- svn_url, trunk, post_processors)
-
- def prepare(self, revision):
- """Creates the initial checkout for the repo."""
- assert not revision, 'Implement revision if necessary'
- if not os.path.isdir(self.project_path):
- logging.info('Checking out %s in %s' %
- (self.project_name, self.project_path))
- # TODO: Create a shallow clone.
- # self.project_path doesn't exist yet.
- self._check_call_git_svn(
- ['clone',
- '--prefix', self.remote + '/',
- '-T', self.trunk,
- self.svn_url, self.project_path,
- '--quiet'],
- cwd=self.root_dir,
- stderr=subprocess2.STDOUT)
- return super(GitSvnCheckout, self).prepare(revision)
-
-
class ReadOnlyCheckout(object):
"""Converts a checkout into a read-only one."""
def __init__(self, checkout, post_processors=None):
« no previous file with comments | « no previous file | tests/checkout_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698