Thread (14 messages) flat view 14 messages, 3 authors, 2016-06-15

Re: [PATCH v2 7/8] git-p4: decode p4 wildcard characters

From: Tor Arvid Lund <hidden>
Date: 2016-06-15 22:50:39

On Thu, Feb 24, 2011 at 1:12 PM, Pete Wyckoff [off-list ref] wrote:
gitster@pobox.com wrote on Mon, 21 Feb 2011 15:32 -0800:
quoted
Pete Wyckoff [off-list ref] writes:
quoted
There are four wildcard characters in p4.  Files with these
characters can be added to p4 repos using the "-f" option.
They are stored in %xx notation, and when checked out, p4
converts them back to normal.

This patch does the same thing when importing into git,
converting the four special characters.  Without this change,
the files appear with literal %xx in their names.

Be careful not to produce "*" in filenames on windows.  That
will fail.
quoted
+    # P4 wildcards are not allowed in filenames.  P4 complains
+    # if you simply add them, but you can force it with "-f", in
+    # which case it translates them into %xx encoding internally.
+    # Search for and fix just these four characters.  Do % last so
+    # that fixing it does not inadvertently create new %-escapes.
+    #
+    def wildcard_decode(self, path):
+        # Cannot have * in a filename in windows; untested as to
+        # what p4 would do in such a case.
+        if not self.isWindows:
+            path = path.replace("%2A", "*")
I'll queue the patch as-is, but perhaps we can ask for help from people
who have access to P4 on both non-Windows and Windows to run a small test
to determine what happens in the native client?

 1. On a non-Windows client, add a path with '*' in it to the depot;
    perhaps "p4 add" might fail at this point, in which case we don't
    need to worry about this issue at all.

 2. Create a p4 client on Windows against that depot, and sync it; unless
    the previous step failed, we will see what happens (I would imagine it
    either dies or mangles the pathname and warns), so that we have
    something to emulate.

and then the quoted part can be further refined in a separate patch later.
I tried this myself in a VM when Tor Arvid pointed out the
problem with Windows:

http://article.gmane.org/gmane.comp.version-control.git/166374

1.  "*" is acceptable in filenames, but users must use "p4 add -f"
   to indicate that they really want that wildcard character in
   the filename.

2.  Windows clients fail to create the file in "p4 sync".  The
   error is:

   open for write: c:\Documents and Settings\Administrator\Desktop\file*star:
   The filename, directory name, or volume label syntax is incorrect.

The behavior for git-p4 I chose is to sync the file but leave
the name with its encoded %2A.  If we think it is better to
duplicate p4's failure, we can simply try to create the file
and let the OS produce the same error message.
Yeah, I was thinking... what happens now if we do:

1) Create "my*file" in linux, and submit.
2) git-p4 sync from windows, and get my%2Afile on windows.
3) modify my%2Afile and do git commit.
4) git-p4 submit

I haven't had time to test right now, but maybe p4 will not recognise
my%2Afile (or try to check it in as my%252Afile (replacing the '%'
character) or something like that? (Or maybe I just haven't had enough
coffee today :-/ )

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