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())