summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Coldrick <adam.coldrick@codethink.co.uk>2014-03-14 13:01:45 +0000
committerAdam Coldrick <adam.coldrick@codethink.co.uk>2014-03-20 13:54:21 +0000
commitcbc117355a6f549a14cae57dac43fa6f432c1849 (patch)
tree714fcf6af5023e4ed77ec75907e5edfdd08e7238
parent73e22af6a9c83f9e9e1d79f4018f4562bf5ae1b2 (diff)
downloadmorph-cbc117355a6f549a14cae57dac43fa6f432c1849.tar.gz
Make existing morph commands use git-fat
When cloning a repository, the files stored using git-fat need to be pulled. This situation occurs in `morph branch`, `morph edit`, and `morph checkout`.
-rw-r--r--morphlib/git.py10
-rw-r--r--morphlib/gitdir.py3
-rw-r--r--morphlib/plugins/branch_and_merge_new_plugin.py10
3 files changed, 22 insertions, 1 deletions
diff --git a/morphlib/git.py b/morphlib/git.py
index 27146206..ccd06323 100644
--- a/morphlib/git.py
+++ b/morphlib/git.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2013 Codethink Limited
+# Copyright (C) 2011-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -279,6 +279,10 @@ def copy_repository(runcmd, repo, destdir, is_mirror=True):
def checkout_ref(runcmd, gitdir, ref):
'''Checks out a specific ref/SHA1 in a git working tree.'''
runcmd(['git', 'checkout', ref], cwd=gitdir)
+ gd = morphlib.gitdir.GitDirectory(gitdir)
+ if gd.has_fat():
+ gd.fat_init()
+ gd.fat_pull()
def index_has_changes(runcmd, gitdir):
@@ -308,6 +312,10 @@ def clone_into(runcmd, srcpath, targetpath, ref=None):
runcmd(['git', 'checkout', ref], cwd=targetpath)
else:
runcmd(['git', 'clone', '-b', ref, srcpath, targetpath])
+ gd = morphlib.gitdir.GitDirectory(targetpath)
+ if gd.has_fat():
+ gd.fat_init()
+ gd.fat_pull()
def is_valid_sha1(ref):
'''Checks whether a string is a valid SHA1.'''
diff --git a/morphlib/gitdir.py b/morphlib/gitdir.py
index 15c0ee9f..06fcba6f 100644
--- a/morphlib/gitdir.py
+++ b/morphlib/gitdir.py
@@ -362,6 +362,9 @@ class GitDirectory(object):
def checkout(self, branch_name): # pragma: no cover
'''Check out a git branch.'''
self._runcmd(['git', 'checkout', branch_name])
+ if self.has_fat():
+ self.fat_init()
+ self.fat_pull()
def branch(self, new_branch_name, base_ref): # pragma: no cover
'''Create a git branch based on an existing ref.
diff --git a/morphlib/plugins/branch_and_merge_new_plugin.py b/morphlib/plugins/branch_and_merge_new_plugin.py
index 8c8a98e9..51cba401 100644
--- a/morphlib/plugins/branch_and_merge_new_plugin.py
+++ b/morphlib/plugins/branch_and_merge_new_plugin.py
@@ -190,6 +190,10 @@ class SimpleBranchAndMergePlugin(cliapp.Plugin):
with self._initializing_system_branch(
ws, root_url, system_branch, cached_repo, base_ref) as (sb, gd):
+ if gd.has_fat():
+ gd.fat_init()
+ gd.fat_pull()
+
if not self._checkout_has_systems(gd):
raise BranchRootHasNoSystemsError(root_url, base_ref)
@@ -250,6 +254,9 @@ class SimpleBranchAndMergePlugin(cliapp.Plugin):
gd.branch(system_branch, base_ref)
gd.checkout(system_branch)
+ if gd.has_fat():
+ gd.fat_init()
+ gd.fat_pull()
if not self._checkout_has_systems(gd):
raise BranchRootHasNoSystemsError(root_url, base_ref)
@@ -480,6 +487,9 @@ class SimpleBranchAndMergePlugin(cliapp.Plugin):
gd.checkout(sb.system_branch_name)
gd.update_submodules(self.app)
gd.update_remotes()
+ if gd.has_fat():
+ gd.fat_init()
+ gd.fat_pull()
# Change the refs to the chunk.
if chunk_ref != sb.system_branch_name: