[oe-commits] Paul Eggleton : recipetool: ensure git clone is a full clone when extracting

git at git.openembedded.org git at git.openembedded.org
Wed Apr 29 22:05:44 UTC 2015


Module: openembedded-core.git
Branch: master-next
Commit: d3dd1884d059f5ef2c79bbeb45158116b3e0d78c
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=d3dd1884d059f5ef2c79bbeb45158116b3e0d78c

Author: Paul Eggleton <paul.eggleton at linux.intel.com>
Date:   Wed Apr 29 14:41:56 2015 +0100

recipetool: ensure git clone is a full clone when extracting

If -x is specified and the specified URI was a git repository, we need
to ensure that the resulting clone is a full clone and not one that has
pointers into the temporary fetch location or DL_DIR. Split out the code
from devtool that already does this for "devtool modify -x" and reuse
that.

Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 scripts/lib/devtool/standard.py  |  8 ++------
 scripts/lib/recipetool/create.py |  2 ++
 scripts/lib/scriptutils.py       | 10 ++++++++++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 94b5e0b..eb41f28 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -23,6 +23,7 @@ import glob
 import tempfile
 import logging
 import argparse
+import scriptutils
 from devtool import exec_build_env_command, setup_tinfoil
 
 logger = logging.getLogger('devtool')
@@ -236,12 +237,7 @@ def _extract_source(srctree, keep_temp, devbranch, d):
             # Handle if S is set to a subdirectory of the source
             srcsubdir = os.path.join(workdir, os.path.relpath(srcsubdir, workdir).split(os.sep)[0])
 
-        if os.path.exists(os.path.join(srcsubdir, '.git')):
-            alternatesfile = os.path.join(srcsubdir, '.git', 'objects', 'info', 'alternates')
-            if os.path.exists(alternatesfile):
-                # This will have been cloned with -s, so we need to convert it to a full clone
-                bb.process.run('git repack -a', cwd=srcsubdir)
-                os.remove(alternatesfile)
+        scriptutils.git_convert_full_clone(srcsubdir)
 
         patchdir = os.path.join(srcsubdir, 'patches')
         haspatches = False
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 1d5bfd9..15de694 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -22,6 +22,7 @@ import glob
 import fnmatch
 import re
 import logging
+import scriptutils
 
 logger = logging.getLogger('recipetool')
 
@@ -238,6 +239,7 @@ def create_recipe(args):
     outlines.extend(lines_after)
 
     if args.extract_to:
+        scriptutils.git_convert_full_clone(srctree)
         shutil.move(srctree, args.extract_to)
         logger.info('Source extracted to %s' % args.extract_to)
 
diff --git a/scripts/lib/scriptutils.py b/scripts/lib/scriptutils.py
index e786126..4af6fd5 100644
--- a/scripts/lib/scriptutils.py
+++ b/scripts/lib/scriptutils.py
@@ -58,3 +58,13 @@ def load_plugins(logger, plugins, pluginpath):
             if hasattr(plugin, 'plugin_init'):
                 plugin.plugin_init(plugins)
                 plugins.append(plugin)
+
+def git_convert_full_clone(repodir):
+    """If specified directory is a git repository, ensure it's a full clone"""
+    import bb.process
+    if os.path.exists(os.path.join(repodir, '.git')):
+        alternatesfile = os.path.join(repodir, '.git', 'objects', 'info', 'alternates')
+        if os.path.exists(alternatesfile):
+            # This will have been cloned with -s, so we need to convert it to a full clone
+            bb.process.run('git repack -a', cwd=repodir)
+            os.remove(alternatesfile)



More information about the Openembedded-commits mailing list