comparison hgext/largefiles/lfcommands.py @ 31740:a40e979b9d97

largefiles: use readasstandin() to read hex hash directly from filectx BTW, C implementation of hexdigest() for SHA-1/256/512 returns hex hash in lower case, and doctest in Python standard hashlib assumes that, too. But it isn't explicitly described in API document or so. Therefore, we can't assume that hexdigest() always returns hex hash in lower case, for any hash algorithms, on any Python runtimes and versions. From point of view of that, it is reasonable for portability that 40800668e019 applies lower() on hex hash in overridefilemerge(). But on the other hand, in largefiles extension, there are still many code paths comparing between hex hashes or storing hex hash into standin file, without lower(). Switching to hash algorithm other than SHA-1 may be good chance to clarify our policy about hexdigest()-ed hash value string. - assume that hexdigest() always returns hex hash in lower case, or - apply lower() on hex hash in appropriate layers to ensure lower-case-ness of it for portability
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sat, 01 Apr 2017 02:32:49 +0900
parents 3e37b479ce2f
children 46ba2cdda476
comparison
equal deleted inserted replaced
31739:4e446d31a744 31740:a40e979b9d97
404 toget = [] 404 toget = []
405 405
406 ctx = repo[node] 406 ctx = repo[node]
407 for lfile in lfiles: 407 for lfile in lfiles:
408 try: 408 try:
409 expectedhash = ctx[lfutil.standin(lfile)].data().strip() 409 expectedhash = lfutil.readasstandin(ctx[lfutil.standin(lfile)])
410 except IOError as err: 410 except IOError as err:
411 if err.errno == errno.ENOENT: 411 if err.errno == errno.ENOENT:
412 continue # node must be None and standin wasn't found in wctx 412 continue # node must be None and standin wasn't found in wctx
413 raise 413 raise
414 if not lfutil.findfile(repo, expectedhash): 414 if not lfutil.findfile(repo, expectedhash):