]> code.ossystems Code Review - openembedded-core.git/commitdiff
stage-manager: Various fixes/ehacements
authorRichard Purdie <richard@openedhand.com>
Fri, 30 Nov 2007 08:17:19 +0000 (08:17 +0000)
committerRichard Purdie <richard@openedhand.com>
Fri, 30 Nov 2007 08:17:19 +0000 (08:17 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3271 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/packages/stage-manager/files/stage-manager
meta/packages/stage-manager/stagemanager-native_0.0.1.bb

index 06495dbb0296691dc5d346d99545e2944c561370..35453992f4cbf97354da2c787e7a87ee830998e4 100755 (executable)
@@ -79,33 +79,54 @@ if __name__ == "__main__":
 
     found = False
 
+    def updateCache(path, fstamp):
+        cache[path] = {}
+        cache[path]['ts'] = fstamp[stat.ST_MTIME]
+        cache[path]['size'] = fstamp[stat.ST_SIZE]
+        found = True
+
+    def copyfile(path):
+        if options.copydir:
+            copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
+            mkdirhier(os.path.split(copypath)[0])
+            os.system("cp -dp " + path + " " + copypath)
+
+    def copydir(path, fstamp):
+        if options.copydir:
+            copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
+            if os.path.islink(path):
+                os.symlink(os.readlink(path), copypath)
+            else:
+                mkdirhier(copypath)
+            os.utime(copypath, (fstamp[stat.ST_ATIME], fstamp[stat.ST_MTIME]))
+
     for root, dirs, files in os.walk(options.parentdir):
         for f in files:
             path = os.path.join(root, f)
             if not os.access(path, os.R_OK):
                 continue
-            fstamp = os.stat(path)
+            fstamp = os.lstat(path)
             if path not in cache:
                 print "new file %s" % path
-                cache[path] = {}
-                cache[path]['ts'] = fstamp[stat.ST_MTIME]
-                cache[path]['size'] = fstamp[stat.ST_SIZE]
-                if options.copydir:
-                    copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
-                    mkdirhier(os.path.split(copypath)[0])
-                    os.system("cp " + path + " " + copypath)
-                    found = True
+               updateCache(path, fstamp)
+                copyfile(path)
             else:
                 if cache[path]['ts'] != fstamp[stat.ST_MTIME] or cache[path]['size'] != fstamp[stat.ST_SIZE]:
                     print "file %s changed" % path
-                    cache[path] = {}
-                    cache[path]['ts'] = fstamp[stat.ST_MTIME]
-                    cache[path]['size'] = fstamp[stat.ST_SIZE]
-                   if options.copydir:
-                        copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
-                        mkdirhier(os.path.split(copypath)[0])
-                        os.system("cp " + path + " " + copypath)
-                        found = True
+                    updateCache(path, fstamp)
+                    copyfile(path)
+        for d in dirs:
+            path = os.path.join(root, d)
+            fstamp = os.lstat(path)
+            if path not in cache:
+                print "new dir %s" % path
+               updateCache(path, fstamp)
+                copydir(path, fstamp)
+            else:
+                if cache[path]['ts'] != fstamp[stat.ST_MTIME]:
+                    print "dir %s changed" % path
+                    updateCache(path, fstamp)
+                    copydir(path, fstamp)
 
     if options.update:
         print "Updating"
index b1f336720958f905f99fcbb13fb5113eb522e902..828af1fbb5d85883b6bbc75cfe1c957982673da2 100644 (file)
@@ -1,5 +1,5 @@
 DESCRIPTION = "Helper script for packaged-staging.bbclass"
-PR = "r2"
+PR = "r7"
 
 SRC_URI = "file://stage-manager"
 LICENSE = "GPLv2"