comparison cutils/treesum.py @ 132:8b73dca5db97

Encode the link targets as netstrings also before digesting them
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 02 Jan 2025 20:55:51 +0100
parents 3a18d71d7c50
children cf4fb9a33f94
comparison
equal deleted inserted replaced
131:3a18d71d7c50 132:8b73dca5db97
163 dir_digests = {} 163 dir_digests = {}
164 164
165 if not handle_root_logical and os.path.islink(root): 165 if not handle_root_logical and os.path.islink(root):
166 linktgt = util.fsencode(os.readlink(root)) 166 linktgt = util.fsencode(os.readlink(root))
167 linkdgst = algorithm[0]() 167 linkdgst = algorithm[0]()
168 linkdgst.update(linktgt) 168 linkdgst.update(b"%d:%s," % (len(linktgt), linktgt))
169 dir_dgst = algorithm[0]() 169 dir_dgst = algorithm[0]()
170 dir_dgst.update(b"1:S,3:./@,") 170 dir_dgst.update(b"1:S,3:./@,")
171 dir_dgst.update(linkdgst.digest()) 171 dir_dgst.update(linkdgst.digest())
172 outfp.write(format_bsd_line( 172 outfp.write(format_bsd_line(
173 algorithm[1], 173 algorithm[1],
183 dir_dgst = algorithm[0]() 183 dir_dgst = algorithm[0]()
184 for dn in dirs: 184 for dn in dirs:
185 if dn.is_symlink and not follow_directory_symlinks: 185 if dn.is_symlink and not follow_directory_symlinks:
186 linktgt = util.fsencode(os.readlink(dn.path)) 186 linktgt = util.fsencode(os.readlink(dn.path))
187 linkdgst = algorithm[0]() 187 linkdgst = algorithm[0]()
188 linkdgst.update(linktgt) 188 linkdgst.update(b"%d:%s," % (len(linktgt), linktgt))
189 dir_dgst.update(b"1:S,%d:%s," % (len(dn.fsname), dn.fsname)) 189 dir_dgst.update(b"1:S,%d:%s," % (len(dn.fsname), dn.fsname))
190 dir_dgst.update(linkdgst.digest()) 190 dir_dgst.update(linkdgst.digest())
191 opath = "/".join(top) + "/" + dn.name if top else dn.name 191 opath = "/".join(top) + "/" + dn.name if top else dn.name
192 outfp.write( 192 outfp.write(
193 format_bsd_line( 193 format_bsd_line(