git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: is git-p4 compatible with p4/linux?

From
ATAlexander Tomlinson <alex@aivor.com>
Date
Apr 19, 2013, 01:34 UTC
Message-ID
<14D98038-C656-47B9-ABF2-CC12914F0C75@aivor.com>
In-Reply-To
<20130419000947.GB9048@padd.com>
On Apr 18, 2013, at 7:09 PM, Pete Wyckoff <pw@padd.com> wrote:
Show 80 quoted lines
> alex@aivor.com wrote on Tue, 16 Apr 2013 23:31 -0500:
>> git-p4.py (1.8.2.1.418.gaec3f77) has at least two behaviors that
>> seem to be incompatible with the version of p4 that I recently
>> downloaded from perforce.com (P4/LINUX26X86_64/2013.1/610569).
>> 
>> TLDR: Is git-p4 written for an old version of p4 CLI with different
>> behavior?  Or for a windows or mac release of p4?  Or am I missing
>> something?
> 
> I had not done any testing beyond p4 12.2 (linux).  But running
> the unit tests through 13.1 just now, they all pass.
> 
>    $ p4 -V
>    Perforce - The Fast Software Configuration Management System.
>    Copyright 1995-2013 Perforce Software.  All rights reserved.
>    This product includes software developed by the OpenSSL Project
>    for use in the OpenSSL Toolkit (http://www.openssl.org/)
>    See 'p4 help legal' for full OpenSSL license information
>    Version of OpenSSL Libraries: OpenSSL 1.0.1c 10 May 2012
>    Rev. P4/LINUX26X86_64/2013.1/610569 (2013/03/19).
> 
> I'm using python 2.7.3.
> 
>> First issue
>> -----------
>> 
>> git-p4 assumes the output of 'p4 print' adds a newline to the
>> target.  To work around this, git-p4.py strips the last char from
>> symlinks as shown in the following snippet:
>> 
>>    if type_base =3D=3D "symlink":
>>        git_mode =3D "120000"
>>        # p4 print on a symlink contains "target\n"; remove the newline
>>        data =3D ''.join(contents)
>>        contents =3D [data[:-1]]
>> 
>> But my 'p4 print' does not output the newline:
>> 
>>    $ ls -l pcre
>>    lrwxrwxrwx 1 user group 12 Apr 16 10:27 pcre -> ../libs/pcre
>> 
>>    $ p4 print -q pcre | od -t x1a
>>    0000000  2e  2e  2f  6c  69  62  73  2f  70  63  72  65
>>             .   .   /   l   i   b   s   /   p   c   r   e
>>    0000014
>> 
>> If I use 'git p4 clone' the above file shows up in git as a
>> symlink to '../libs/pcr'.  I had another symlink whose target had
>> a strlen of 1 and the 'git p4 clone' failed b/c after stripping
>> the last char the result was an empty string.
> 
> There wasn't an explict test for symlinks, but I threw
> one together quickly and it seems to work.  Can you show
> a bit more information about anything that potentially might
> be odd with your install?
> 
>    arf-git-test$ ls -l symlink
>    lrwxrwxrwx 1 pw pw 14 Apr 18 20:02 symlink -> symlink-target
> 
>    $ p4 fstat symlink
>    ... depotFile //depot/symlink
>    ... clientFile /run/shm/trash directory.t9802-git-p4-filetype/cli/symlink
>    ... isMapped 
>    ... headAction add
>    ... headType symlink
>    ... headTime 1366329740
>    ... headRev 1
>    ... headChange 6
>    ... headModTime 1366329740
>    ... haveRev 1
> 
>    $ p4 print -q symlink | od -t x1a
>    0000000  73  79  6d  6c  69  6e  6b  2d  74  61  72  67  65  74  0a
> 	      s   y   m   l   i   n   k   -   t   a   r   g   e   t  nl
>    0000017
> 
> No idea why I get an "nl" but you do not.  If you run _without_
> the "| od ...", then the shell prompt ends up on the same line
> as the output?  Any interesting shell or shell settings?
> 
Yes.  The shell prompt is on the same line as the output:

$ PS1="FOOBAR$" FOOBAR$p4 print -q pcre ../libs/pcreFOOBAR$

Perhaps it is a configuration item on the server and/or client. It seems we are running the same version of p4. But just to be sure, check yours against mine:

$ cksum $(which p4) 3254530484 2420552 /usr/bin/p4

If yours if different, can you email a copy of your p4 executable to me so I can check if it works differently than mine?

I will also check with coworkers here to see how their client behaves.
Show 41 quoted lines
>> Second issue
>> ------------
>> 
>> git-p4 uses 'p4 print -q -o o FILE' to print a file to stdout.
>> At least that is how I interpret this snippet:
>> 
>>    text = p4_read_pipe(['print', '-q', '-o', '-', file['depotFile']])
>> 
>> However, p4/Linux prints to stdout by default and '-o -' will save
>> the output in a file named '-'.
>> 
>> My git and p4 versions:
>> 
>>    $ git --version
>>    git version 1.8.2.1.418.gaec3f77
>> 
>>    $ p4 -V
>>    Perforce - The Fast Software Configuration Management System.
>>    Copyright 1995-2013 Perforce Software.  All rights reserved.
>>    This product includes software developed by the OpenSSL Project
>>    for use in the OpenSSL Toolkit (http://www.openssl.org/)
>>    See 'p4 help legal' for full OpenSSL license information
>>    Version of OpenSSL Libraries: OpenSSL 1.0.1c 10 May 2012
>>    Rev. P4/LINUX26X86_64/2013.1/610569 (2013/03/19).
> 
> This code only happens on utf16 files.  But running it by hand,
> I cannot reproduce the different behavior:
> 
>    $ p4 print -q //depot/f-ascii
>    three
>    line
>    text
> 
>    $ p4 print -o - -q //depot/f-ascii
>    three
>    line
> 
>    $ ls ./-
>    ls: cannot access ./-: No such file or directory
> 
> I'm again confused.  Any hints you can give would be helpful.

This "second issue" is a non-issue. It seems "-o -" does send to stdout for files. For symlinks, it creates a symlink named "-". Example:

$ ls -l pcre lrwxrwxrwx 1 atomlinson atomlinson 12 Apr 18 17:17 pcre -> ../libs/pcre/ $ ls -l ./- ./xxx /bin/ls: cannot access ./-: No such file or directory /bin/ls: cannot access ./xxx: No such file or directory $ p4 print -q -o - pcre $ p4 print -q -o xxx pcre $ ls -l ./- ./xxx lrwxrwxrwx 1 atomlinson atomlinson 12 Apr 18 20:25 ./- -> ../libs/pcre/ lrwxrwxrwx 1 atomlinson atomlinson 12 Apr 18 20:25 ./xxx -> ../libs/pcre/

Show 6 quoted lines
> 
> 		-- Pete
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Thanks, Alex

Previous: Pete WyckoffNext: Pete Wyckoff
Message 4 of 8 in “is git-p4 compatible with p4/linux?”
  1. Alexander TomlinsonApr 17, 2013
  2. Alexander TomlinsonApr 17, 2013
  3. Pete WyckoffApr 19, 2013
  4. Alexander TomlinsonApr 19, 2013
  5. Pete WyckoffApr 19, 2013
  6. Alex TomlinsonApr 19, 2013
  7. David AguilarApr 20, 2013
  8. Pete WyckoffApr 20, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.