infinitepush: ensure fileindex bookmarks use '/' separators (issue5840) stable
authorMatt Harbison <matt_harbison@yahoo.com>
Mon, 23 Apr 2018 23:22:52 -0400
branchstable
changeset 37811 51dee6fad783
parent 37810 856f381ad74b
child 37812 91b717e2cafa
infinitepush: ensure fileindex bookmarks use '/' separators (issue5840) After loading up with status messages, I noticed that the subsequent matcher was rejecting 'scratch\mybranch' on Windows. No bookmarks were reported back, and the tests subsequently failed. I did a search for 'match', and nothing else looks like it needs to be fixed up, but someone who understands this code should also take a look. I also tried setting `infinitepush.branchpattern=re:scratch\\.*` in library-infinitepush.sh without this change, but that didn't work. Still, should we ban '\' in these bookmarks to avoid confusion? I thought I saw code that sandwiches a pattern between 're:^' and '.*', so perhaps regex characters will need special care? I also noticed comments in externalbundlestore.{read,write} that it won't work on Windows because of opening an open file. But I don't see a test failure, so this may lack test coverage.
hgext/infinitepush/fileindexapi.py
--- a/hgext/infinitepush/fileindexapi.py	Sun Apr 22 11:54:10 2018 -0700
+++ b/hgext/infinitepush/fileindexapi.py	Mon Apr 23 23:22:52 2018 -0400
@@ -15,6 +15,8 @@
 
 import os
 
+from mercurial import util
+
 from mercurial.utils import stringutil
 
 from . import indexapi
@@ -82,6 +84,7 @@
         for dirpath, _, books in self._repo.vfs.walk(self._bookmarkmap):
             for book in books:
                 bookmark = os.path.join(dirpath, book)[prefixlen:]
+                bookmark = util.pconvert(bookmark)
                 if not matcher(bookmark):
                     continue
                 yield bookmark, self._read(os.path.join(dirpath, book))