Re: [PATCH v3 6/8] git-remote-testpy: hash bytes explicitly

Subsystems: the rest

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH v3 6/8] git-remote-testpy: hash bytes explicitly

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:55:54

Michael Haggerty [off-list ref] writes:
This will still fail under Python 2.x if repo.path is a byte string that
contains non-ASCII characters.  And it will fail under Python 3.1 and
later if repo.path contains characters using the surrogateescape
encoding option [1],...
Here you don't really need byte-for-byte correctness; it would be enough
to get *some* byte string that is unique for a given input ...
Yeek.

As we do not care about the actual value at all, how about doing
something like this instead?

 git-remote-testgit.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/git-remote-testgit.py b/git-remote-testgit.py
index 5f3ebd2..705750d 100644
--- a/git-remote-testgit.py
+++ b/git-remote-testgit.py
@@ -40,7 +40,7 @@ def get_repo(alias, url):
     repo.get_head()
 
     hasher = _digest()
-    hasher.update(repo.path)
+    hasher.update(".".join([str(ord(c)) for c in repo.path]))
     repo.hash = hasher.hexdigest()
 
     repo.get_base_path = lambda base: os.path.join(

Re: [PATCH v3 6/8] git-remote-testpy: hash bytes explicitly

From: John Keeping <hidden>
Date: 2016-06-15 22:55:55

On Sat, Jan 26, 2013 at 09:30:00PM -0800, Junio C Hamano wrote:
Michael Haggerty [off-list ref] writes:
quoted
This will still fail under Python 2.x if repo.path is a byte string that
contains non-ASCII characters.  And it will fail under Python 3.1 and
later if repo.path contains characters using the surrogateescape
encoding option [1],...
Here you don't really need byte-for-byte correctness; it would be enough
to get *some* byte string that is unique for a given input ...
Yeek.

As we do not care about the actual value at all, how about doing
something like this instead?

+    hasher.update(".".join([str(ord(c)) for c in repo.path]))
This doesn't solve the original problem since we're still ending up with
a Unicode string.  If we wanted something like this it would need to be:

    hasher.update(b'.'.join([b'%X' % ord(c) for c in repo.path]))

which limits us to Python 2.6 and later and seems to me to be less clear
than introducing an "encode_filepath" helper function using Michael's
suggestion.


John
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help