[OE-core] [PATCH] devtool: sdk-update: reset git metadata on update

Stephano Cetola stephano.cetola at linux.intel.com
Thu Apr 14 18:15:41 UTC 2016


Forgot to add in the .gitignore. It's in there now.

Replace git pull with fetch and reset. Also add gitignore and committer
info during publish to avoid errors on update.

[ YOCTO #9368 ]

Signed-off-by: Stephano Cetola <stephano.cetola at linux.intel.com>
---
 scripts/lib/devtool/sdk.py | 11 +++++++++--
 scripts/oe-publish-sdk     |  4 ++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py
index b1905f9..d666341 100644
--- a/scripts/lib/devtool/sdk.py
+++ b/scripts/lib/devtool/sdk.py
@@ -17,6 +17,7 @@
 
 import os
 import subprocess
+from subprocess import check_output
 import logging
 import glob
 import shutil
@@ -186,9 +187,15 @@ def sdk_update(args, config, basepath, workspace):
                 return 0
             # Update metadata
             logger.debug("Updating metadata via git ...")
-            # Try using 'git pull', if failed, use 'git clone'
+            #Check for the status before doing a fetch and reset
             if os.path.exists(os.path.join(basepath, 'layers/.git')):
-                ret = subprocess.call("git pull %s/layers/.git" % updateserver, shell=True, cwd=layers_dir)
+                out = check_output("git status --porcelain", shell=True, cwd=layers_dir)
+                if not out:
+                  ret = subprocess.call("git fetch --all; git reset --hard", shell=True, cwd=layers_dir)
+                else:
+                  logger.error("Failed to update metadata as there have been changes made to it. Aborting.");
+                  logger.error("Changed files:\n%s" % out);
+                  return -1
             else:
                 ret = -1
             if ret != 0:
diff --git a/scripts/oe-publish-sdk b/scripts/oe-publish-sdk
index e6cb7af..55872f2 100755
--- a/scripts/oe-publish-sdk
+++ b/scripts/oe-publish-sdk
@@ -114,9 +114,9 @@ def publish(args):
 
     # Setting up the git repo
     if not is_remote:
-        cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m "init repo" || true; git update-server-info' % (destination, destination)
+        cmd = 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; echo "*.pyc\n*.pyo" > .gitignore; fi; git add -A .; git config user.email "oe at oe.oe" && git config user.name "OE" && git commit -q -m "init repo" || true; git update-server-info' % (destination, destination)
     else:
-        cmd = "ssh %s 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; fi; git add -A .; git commit -q -m \"init repo\" || true; git update-server-info'" % (host, destdir, destdir)
+        cmd = "ssh %s 'set -e; mkdir -p %s/layers; cd %s/layers; if [ ! -e .git ]; then git init .; mv .git/hooks/post-update.sample .git/hooks/post-update; echo '*.pyc\n*.pyo' > .gitignore; fi; git add -A .; git config user.email 'oe at oe.oe' && git config user.name 'OE' && git commit -q -m \"init repo\" || true; git update-server-info'" % (host, destdir, destdir)
     ret = subprocess.call(cmd, shell=True)
     if ret == 0:
         logger.info('SDK published successfully')
-- 
2.8.0




More information about the Openembedded-core mailing list