Mercurial > hgrepos > Python > apps > py-cutils
comparison cutils/treesum.py @ 127:6a50d02fe0ca
Change the filename output: make it more consistent
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Thu, 02 Jan 2025 17:46:50 +0100 |
| parents | 12d6ec1f8613 |
| children | 7c646921a479 |
comparison
equal
deleted
inserted
replaced
| 126:dfe7bb0579e2 | 127:6a50d02fe0ca |
|---|---|
| 162 linktgt = util.fsencode(os.readlink(dn.path)) | 162 linktgt = util.fsencode(os.readlink(dn.path)) |
| 163 linkdgst = algorithm[0]() | 163 linkdgst = algorithm[0]() |
| 164 linkdgst.update(linktgt) | 164 linkdgst.update(linktgt) |
| 165 dir_dgst.update(b"1:S,%d:%s," % (len(dn.fsname), dn.fsname)) | 165 dir_dgst.update(b"1:S,%d:%s," % (len(dn.fsname), dn.fsname)) |
| 166 dir_dgst.update(linkdgst.digest()) | 166 dir_dgst.update(linkdgst.digest()) |
| 167 if top: | 167 opath = "/".join(top) + "/" + dn.name if top else dn.name |
| 168 opath = "/".join(top) + "/" + dn.name | |
| 169 else: | |
| 170 opath = dn.name | |
| 171 outfp.write( | 168 outfp.write( |
| 172 format_bsd_line( | 169 format_bsd_line( |
| 173 algorithm[1], | 170 algorithm[1], |
| 174 linkdgst.digest(), | 171 linkdgst.digest(), |
| 175 "%s/./@" % (opath,), | 172 "%s/./@" % (opath,), |
| 183 for fn in nondirs: | 180 for fn in nondirs: |
| 184 dir_dgst.update(b"1:f,%d:%s," % (len(fn.fsname), fn.fsname)) | 181 dir_dgst.update(b"1:f,%d:%s," % (len(fn.fsname), fn.fsname)) |
| 185 dgst = digest.compute_digest_file( | 182 dgst = digest.compute_digest_file( |
| 186 algorithm[0], fn.path, use_mmap=use_mmap) | 183 algorithm[0], fn.path, use_mmap=use_mmap) |
| 187 dir_dgst.update(dgst) | 184 dir_dgst.update(dgst) |
| 188 if top: | 185 opath = "/".join(top) + "/" + fn.name if top else fn.name |
| 189 opath = "/".join(top) + "/" + fn.name | |
| 190 else: | |
| 191 opath = fn.name | |
| 192 outfp.write(format_bsd_line( | 186 outfp.write(format_bsd_line( |
| 193 algorithm[1], dgst, opath, use_base64)) | 187 algorithm[1], dgst, opath, use_base64)) |
| 194 outfp.flush() | 188 outfp.flush() |
| 189 opath = "/".join(top) + "/" if top else "" | |
| 195 outfp.write(format_bsd_line( | 190 outfp.write(format_bsd_line( |
| 196 algorithm[1], dir_dgst.digest(), "/".join(top) + "/", use_base64)) | 191 algorithm[1], dir_dgst.digest(), opath, use_base64)) |
| 197 outfp.flush() | 192 outfp.flush() |
| 198 dir_digests[top] = dir_dgst.digest() | 193 dir_digests[top] = dir_dgst.digest() |
| 199 | 194 |
| 200 | 195 |
| 201 def format_bsd_line(digestname, digest, filename, use_base64): | 196 def format_bsd_line(digestname, digest, filename, use_base64): |
| 209 return b"%s (%s)%s" % (digestname, filename, ls) | 204 return b"%s (%s)%s" % (digestname, filename, ls) |
| 210 if use_base64: | 205 if use_base64: |
| 211 digest = base64.b64encode(digest) | 206 digest = base64.b64encode(digest) |
| 212 else: | 207 else: |
| 213 digest = binascii.hexlify(digest) | 208 digest = binascii.hexlify(digest) |
| 214 return b"%s (%s) = %s%s" \ | 209 if filename != b"/./@": |
| 215 % (digestname, util.normalize_filename(filename, True), digest, ls) | 210 filename = util.normalize_filename(filename, True) |
| 211 return b"%s (%s) = %s%s" % (digestname, filename, digest, ls) | |
| 216 | 212 |
| 217 | 213 |
| 218 if __name__ == "__main__": | 214 if __name__ == "__main__": |
| 219 sys.exit(main()) | 215 sys.exit(main()) |
