From a4a011dd30194eb3f1af728a887199d99da7ec29 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 25 Feb 2012 14:23:29 +0000 Subject: Fix mangling of relative paths Previously, the whole path would be mangled, rather than just the relative name. --- summain | 15 ++++++--------- summainlib.py | 23 ++++++++++++++--------- tests/manglepaths.stdout | 10 +++++----- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/summain b/summain index 026a2ae..a9e7ead 100755 --- a/summain +++ b/summain @@ -150,10 +150,8 @@ class Summain(cliapp.Application): for filename in self.files(root): o = summainlib.FilesystemObject(filename, nn, pn, exclude) if relative: - name = self.relative_path(root, o) - else: - name = o['Name'] - yield name, o + o.relative = self.relative_path(root, o) + yield o['Name'], o def relative_path(self, root, o): '''Return a path that is relative to root, if possible. @@ -167,13 +165,12 @@ class Summain(cliapp.Application): root2 = root else: root2 = root + os.sep - pathname = o['Name'] - if pathname.startswith(root2): - return pathname[len(root2):] - elif pathname == root and o.isdir(): + if o.filename.startswith(root2): + return o.filename[len(root2):] + elif o.filename == root and o.isdir(): return '.' else: - return pathname + return o.filename def new_formatter(self, checksums, objects): table = { diff --git a/summainlib.py b/summainlib.py index ae6dcb2..475a060 100644 --- a/summainlib.py +++ b/summainlib.py @@ -137,7 +137,8 @@ class FilesystemObject(object): stat_result=None, sha1=None, sha224=None, sha256=None, sha384=None, sha512=None, md5=None, open_file=None, readlink=None): - self._filename = filename + self.filename = filename + self.relative = None self._exclude = set(self._normalize_key(k) for k in exclude) self._pn = pn self._nn = nn @@ -153,7 +154,11 @@ class FilesystemObject(object): self.values = dict() def _compute_name(self): - return urllib.quote(self._pn.normalize(self._filename)) + if self.relative is None: + name = self.filename + else: + name = self.relative # pragma: no cover + return urllib.quote(self._pn.normalize(name)) def _compute_mtime(self): return self.format_time(self._stat_result[RESULT_MTIME_SEC], @@ -188,26 +193,26 @@ class FilesystemObject(object): return self.lookup_group(self._stat_result[RESULT_GID]) def _compute_md5(self): - return self.compute_checksum(self._filename, self._md5) + return self.compute_checksum(self.filename, self._md5) def _compute_sha1(self): - return self.compute_checksum(self._filename, self._sha1) + return self.compute_checksum(self.filename, self._sha1) def _compute_sha224(self): - return self.compute_checksum(self._filename, self._sha224) + return self.compute_checksum(self.filename, self._sha224) def _compute_sha256(self): - return self.compute_checksum(self._filename, self._sha256) + return self.compute_checksum(self.filename, self._sha256) def _compute_sha384(self): - return self.compute_checksum(self._filename, self._sha384) + return self.compute_checksum(self.filename, self._sha384) def _compute_sha512(self): - return self.compute_checksum(self._filename, self._sha512) + return self.compute_checksum(self.filename, self._sha512) def _compute_target(self): if stat.S_ISLNK(self._stat_result[RESULT_MODE]): - return self.readlink(self._filename) + return self.readlink(self.filename) def format_time(self, secs, nsecs): s = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(secs)) diff --git a/tests/manglepaths.stdout b/tests/manglepaths.stdout index 703b780..cbeb1f2 100644 --- a/tests/manglepaths.stdout +++ b/tests/manglepaths.stdout @@ -1,10 +1,10 @@ -Name: ea4435b9ac411c20b01a0ba224092e1c +Name: a59d6cc610302892d2f5d06dfd4e8b5f Mode: 40700 Ino: 1 Dev: 1 Nlink: 2 -Name: 33997cd210f8004f9cf702a06b668957 +Name: 5157341f60990e87222257ef4f6dae74 Mode: 100666 Ino: 2 Dev: 1 @@ -12,7 +12,7 @@ Nlink: 1 Size: 4 SHA1: e242ed3bffccdf271b7fbaf34ed72d089537b42f -Name: 96190c379ef3530f4d9d8bb4a1a0c71d +Name: 4acb10ca3965a14a080297db0921950c Mode: 100666 Ino: 3 Dev: 1 @@ -20,7 +20,7 @@ Nlink: 1 Size: 4 SHA1: f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 -Name: b87060f4ff8c3d12cdf0ef8f5cf83e96 +Name: 425980b11f70991f4249a68c754357d4 Mode: 100666 Ino: 4 Dev: 1 @@ -28,7 +28,7 @@ Nlink: 1 Size: 7 SHA1: 988881adc9fc3655077dc2d4d757d480b5ea0e11 -Name: 5a2c785fc7c149c0a3dea4fd625dfccb +Name: 5d0878e8255c3ae21cf006ee7b282ef2 Mode: 100666 Ino: 5 Dev: 1 -- cgit v1.2.1