diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2012-08-01 10:21:36 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2012-08-01 13:36:20 +0000 |
commit | d3868784c8340245ee846eac1826305bc1616a52 (patch) | |
tree | 519790b8ba49f8d8686db609c7805c925bd5fc6b /morphlib/app.py | |
parent | 26a06d2eb1f76fc0d45ac8376fb8838c8c06c922 (diff) | |
download | morph-d3868784c8340245ee846eac1826305bc1616a52.tar.gz |
Move edit to plugin and remove dead code from app
Some miscellaneous cleanup of functions was done, so new apis like
savefile and status are used.
Diffstat (limited to 'morphlib/app.py')
-rwxr-xr-x | morphlib/app.py | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/morphlib/app.py b/morphlib/app.py index d36d7370..de292674 100755 --- a/morphlib/app.py +++ b/morphlib/app.py @@ -16,8 +16,6 @@ import cliapp import collections -import glob -import json import logging import os import shutil @@ -576,160 +574,6 @@ class Morph(cliapp.Application): category=DeprecationWarning) return self.cache_repo_and_submodules(*args) - def _deduce_mine_directory(self): - dirname = os.getcwd() - while dirname != '/': - dot_morph = os.path.join(dirname, '.morph') - if os.path.isdir(dot_morph): - return dirname - dirname = os.path.dirname(dirname) - return None - - def _resolve_reponame(self, reponame): - '''Return the full pull URL of a reponame.''' - - resolver = morphlib.repoaliasresolver.RepoAliasResolver( - self.settings['repo-alias']) - return resolver.pull_url(reponame) - - def _clone_to_directory(self, dirname, reponame, ref): - '''Clone a repository below a directory. - - As a side effect, clone it into the morph repository. - - ''' - - # Setup. - if not os.path.exists(self.settings['cachedir']): - os.mkdir(self.settings['cachedir']) - cachedir = os.path.join(self.settings['cachedir'], 'gits') - repo_resolver = morphlib.repoaliasresolver.RepoAliasResolver( - self.settings['repo-alias']) - bundle_base_url = self.settings['bundle-server'] - cache = morphlib.localrepocache.LocalRepoCache( - self, cachedir, repo_resolver, bundle_base_url) - - # Get the repository into the cache; make sure it is up to date. - repo = cache.cache_repo(reponame) - if not self.settings['no-git-update']: - repo.update() - - # Clone it from cache to target directory. - repo.checkout(ref, os.path.abspath(dirname)) - - # Set the origin to point at the original repository. - morphlib.git.set_remote(self.runcmd, dirname, 'origin', repo.url) - - # Add push url rewrite rule to .git/config. - self.runcmd(['git', 'config', - ('url.%s.pushInsteadOf' % - repo_resolver.push_url(reponame)), - repo_resolver.pull_url(reponame)], cwd=dirname) - - # Update remotes. - self.runcmd(['git', 'remote', 'update'], cwd=dirname) - - def _deduce_system_branch(self): - minedir = self._deduce_mine_directory() - if minedir is None: - return None - - if not minedir.endswith('/'): - minedir += '/' - - cwd = os.getcwd() - if not cwd.startswith(minedir): - return None - - return os.path.dirname(cwd[len(minedir):]) - - def cmd_edit(self, args): - '''Edit a component in a system branch.''' - - if len(args) not in (1, 2): - raise cliapp.AppException('morph edit must get a repository name ' - 'and commit ref as argument') - - mine_directory = self._deduce_mine_directory() - system_branch = self._deduce_system_branch() - if system_branch is None: - raise morphlib.Error('Cannot deduce system branch') - - morphs_dirname = os.path.join(mine_directory, system_branch, 'morphs') - if morphs_dirname is None: - raise morphlib.Error('Can not find morphs directory') - - repo = self._resolve_reponame(args[0]) - - if len(args) == 2: - ref = args[1] - else: - ref = self._find_edit_ref(morphs_dirname, repo) - if ref is None: - raise morphlib.Error('Cannot deduce commit to start edit from') - - new_repo = os.path.join(mine_directory, system_branch, - os.path.basename(repo)) - self._clone_to_directory(new_repo, args[0], ref) - - if system_branch == ref: - self.runcmd(['git', 'checkout', system_branch], - cwd=new_repo) - else: - self.runcmd(['git', 'checkout', '-b', system_branch, ref], - cwd=new_repo) - - for filename, morph in self._morphs_for_repo(morphs_dirname, repo): - changed = False - for spec in morph['sources']: - spec_repo = self._resolve_reponame(spec['repo']) - if spec_repo == repo and spec['ref'] != system_branch: - if self.settings['verbose']: - print ('Replacing ref "%s" with "%s" in %s' % - (spec['ref'], system_branch, filename)) - spec['ref'] = system_branch - changed = True - if changed: - self._write_morphology(filename, morph) - - def _find_edit_ref(self, morphs_dirname, repo): - for filename, morph in self._morphs_for_repo(morphs_dirname, repo): - for spec in morph['sources']: - spec_repo = self._resolve_reponame(spec['repo']) - if spec_repo == repo: - return spec['ref'] - return None - - def _load_morphologies(self, dirname): - pattern = os.path.join(dirname, '*.morph') - for filename in glob.glob(pattern): - with open(filename) as f: - text = f.read() - morphology = morphlib.morph2.Morphology(text) - yield filename, morphology - - def _morphs_for_repo(self, morphs_dirname, repo): - for filename, morph in self._load_morphologies(morphs_dirname): - if morph['kind'] == 'stratum': - for spec in morph['sources']: - spec_repo = self._resolve_reponame(spec['repo']) - if spec_repo == repo: - yield filename, morph - break - - def _write_morphology(self, filename, morphology): - as_dict = {} - for key in morphology.keys(): - value = morphology[key] - if value: - as_dict[key] = value - fd, tempname = tempfile.mkstemp(dir=os.path.dirname(filename)) - os.close(fd) - with open(tempname, 'w') as f: - json.dump(as_dict, fp=f, indent=4, sort_keys=True) - f.write('\n') - os.rename(tempname, filename) - def status(self, **kwargs): '''Show user a status update. |