diff --git a/pisi/archive.py b/pisi/archive.py index 2f0d7ea7..4abb521f 100644 --- a/pisi/archive.py +++ b/pisi/archive.py @@ -117,10 +117,13 @@ class ArchiveZip(ArchiveBase): if archiveRoot!='': # change archiveRoot if util.subpath(archiveRoot, fileName): + print '!', archiveRoot, fileName fileName = util.removepathprefix(archiveRoot, fileName) + print '*', fileName else: continue # don't extract if not under ofile = os.path.join(targetDir, fileName) + print 'ofile ', ofile # a directory is present. lets continue if ofile[len(ofile)-1]=='/': diff --git a/pisi/install.py b/pisi/install.py index 43731eb8..f095cce2 100644 --- a/pisi/install.py +++ b/pisi/install.py @@ -46,7 +46,7 @@ def install(package_fn): # unzip package in place ui.info('Extracting files\n') - #package.extract_dir_flat('install', config.destdir) + package.extract_dir_flat('install', config.destdir) # update databases diff --git a/pisi/util.py b/pisi/util.py index d1953019..46f2a0e7 100644 --- a/pisi/util.py +++ b/pisi/util.py @@ -49,9 +49,11 @@ def same(l): def prefix(a, b): "check if sequence a is a prefix of sequence b" + print 'PREFIX', a, b if len(a)>len(b): return False - for i in range(0,len(a)-1): + for i in range(0,len(a)): + print 'checking', a[i], b[i] if a[i]!=b[i]: return False return True @@ -63,13 +65,21 @@ def remove_prefix(a,b): # path functions +def splitpath(a): + """split path into components and return as a list + os.path.split doesn't do what I want""" + l = a.split(os.path.sep) + if l[len(l)-1]=='': + l.pop() + return l + # I'm not sure how necessary this is. Ahem. def commonprefix(l): """an improved version of os.path.commonprefix, returns a list of path components""" common = [] - comps = map(os.path.split, l) - for i in range(0, min(len,l)-1): + comps = map(splitpath, l) + for i in range(0, min(len,l)): compi = map(lambda x: x[i], comps) # get ith slice if same(compi): common.append(compi[0]) @@ -78,7 +88,7 @@ def commonprefix(l): # but this one is necessary def subpath(a, b): "find if path a is before b in the directory tree" - return prefix(os.path.split(a), os.path.split(b)) + return prefix(splitpath(a), splitpath(b)) def removepathprefix(a, b): "remove path prefix a from p, finding the pathname rooted at a"