Exemple #1
0
    def _storeMetaDataImpl(self, dir_name, pdir_name, ignoreList, cfgObj):
        """dir_name is absolute path of directory, pdir_name is relative path of directory"""

        for fb in sorted(os.listdir(dir_name)):
            f = os.path.join(dir_name, fb)
            fr = os.path.join(pdir_name, fb)
            if any(x for x in ignoreList if fnmatch.fnmatch(f, x)):
                continue
            assert VccUtil.isTrival(f)

            tname = "dir" if (os.path.isdir(f) and not os.path.islink(f)) else "file"

            if os.path.islink(f):
                tname = "symlink"
            elif os.path.isdir(f):
                tname = "dir"
            elif os.path.isfile(f):
                tname = "file"
            else:
                assert False
            mode = oct(os.lstat(f).st_mode & 0777)
            username = pwd.getpwuid(os.lstat(f).st_uid)[0]
            grouppname = grp.getgrgid(os.lstat(f).st_gid)[0]

            cfgObj.add_section(fr)
            cfgObj.set(fr, "tname", tname)
            cfgObj.set(fr, "mode", mode)
            cfgObj.set(fr, "owner", "%s:%s"%(username, grouppname))
            #cfgObj.set(fr, "mtime", "")
            #cfgObj.set(fr, "xattr", "")

            if os.path.isdir(f) and not os.path.islink(f):
                self._storeMetaDataImpl(f, fr, ignoreList, cfgObj)
Exemple #2
0
    def _applyMetaData(self):
        """Won't follow symbolic links"""

        ignoreList = self._internal_ignore_list()

        metadataFile = os.path.join(self.dirName, ".metadata")
        cfgObj = ConfigParser.RawConfigParser()
        cfgObj.read(metadataFile)

        for fr in cfgObj.sections():
            f = os.path.join(self.dirName, fr)
            if any(x for x in ignoreList if fnmatch.fnmatch(f, x)):
                continue

            tname = cfgObj.get(fr, "tname")
            mode = cfgObj.get(fr, "mode")
            owner = cfgObj.get(fr, "owner")

            if tname == "symlink":
                assert VccUtil.isTrival(f) and os.path.islink(f)
            elif tname == "dir":
                if not os.path.exists(f):
                    # create directory, but don't modify mtime of parent directory
                    pdir = os.path.dir_name(f)
                    if pdir != self.dirName:
                        tmtime = os.path.getmtime(pdir)
                    os.mkdir(f)
                    if pdir != self.dirName:
                        VccUtil.setFileMtime(pdir, tmtime)
                else:
                    assert VccUtil.isTrival(f) and os.path.isdir(f) and not os.path.islink(f)
            elif tname == "file":
                assert VccUtil.isTrival(f) and os.path.isfile(f) and not os.path.islink(f)
            else:
                assert False
            if not os.path.islink(f):
                VccUtil.shell("/bin/chmod %s \"%s\""%(mode, f))
            VccUtil.shell("/bin/chown -h %s \"%s\""%(owner, f))