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

Re: git-p4 fails when cloning a p4 depo.

From
SLScott Lamb <slamb@slamb.org>
Date
Jun 8, 2007, 21:31 UTC
Message-ID
<4669CAB4.5080507@slamb.org>
In-Reply-To
<1621f9fa0706081113w7bb765ebx74f03a7407b753cb@mail.gmail.com>
Benjamin Sergeant wrote:
Show 8 quoted lines
> A perforce command with all the files in the repo is generated to get
> all the file content.
> Here is a patch to break it into multiple successive perforce command
> who uses 4K of parameter max, and collect the output for later.
> 
> It works, but not for big depos, because the whole perforce depo
> content is stored in memory in P4Sync.run(), and it looks like mine is
> bigger than 2 Gigs, so I had to kill the process.

Hmm. I tried git-p4 out on Sunday, and it definitely didn't do this then...this commit must have showed up since:

     commit 6460cf12df4556f889888b5f0b49e07040747e6f
     Author: Han-Wen Nienhuys <hanwen@google.com>
     Date:   Wed May 23 18:49:35 2007 -0300
         Read p4 files in one batch.
I believe HEAD at the time was this:
     commit 458e0545cb3dd03af9cd1a61480cbb764639043a
     Author: Simon Hausmann <simon@lst.de>
     Date:   Mon May 28 19:24:57 2007 +0200
         Fix typo in listExistingP4Branches that broke sync.

so you might try checking out an old version, and I'll go RTFM on reading merge history, because I can't figure out when this happened.

Show 19 quoted lines
> 
> 
> diff --git a/git-p4 b/git-p4
> index 36fe69a..906b193 100755
> --- a/git-p4
> +++ b/git-p4
> @@ -703,9 +703,22 @@ class P4Sync(Command):
>         if not files:
>             return
> 
> -        filedata = p4CmdList('print %s' % ' '.join(['"%s#%s"' % 
> (f['path'],
> -                                                                 f['rev'])
> -                                                    for f in files]))
> +        # We cannot put all the files on the command line
> +        # OS have limitations on the max lenght of arguments
> +        # POSIX says it's 4096 bytes, default for Linux seems to be 130 K.
> +        # and all OS from the table below seems to be higher than POSIX.
> +        # See http://www.in-ulm.de/~mascheck/various/argmax/

No need to hardcode - from Python this is os.sysconf(os.sysconf_names['SC_ARG_MAX'])

Show 21 quoted lines
> +        chunk = ''
> +        filedata = []
> +        for i in xrange(len(files)):
> +            f = files[i]
> +            chunk += '"%s#%s" ' % (f['path'], f['rev'])
> +            if len(chunk) > 4000 or i == len(files)-1:
> +                data = p4CmdList('print %s' % chunk)
> +                if "p4ExitCode" in data[0]:
> +                    die("Problems executing p4. Error: [%d]." %
> (data[0]['p4ExitCode']));
> +                filedata.extend(data)
> +                chunk = ''
> 
>         j = 0;
>         contents = {}
> @@ -1486,3 +1499,5 @@ def main():
> 
> if __name__ == '__main__':
>     main()
> +
> +# vim: set filetype=python sts=4 sw=4 et si :
Previous: Benjamin SergeantNext: Scott Lamb
Message 3 of 14 in “git-p4 fails when cloning a p4 depo.”
  1. Benjamin SergeantJun 8, 2007
  2. Benjamin SergeantJun 8, 2007
  3. Scott LambJun 8, 2007
  4. Scott LambJun 8, 2007
  5. Benjamin SergeantJun 8, 2007
  6. Benjamin SergeantJun 8, 2007
  7. Han-Wen NienhuysJun 8, 2007
  8. Benjamin SergeantJun 9, 2007
  9. Simon HausmannJun 8, 2007
  10. Han-Wen NienhuysJun 12, 2007
  11. Han-Wen NienhuysJun 12, 2007
  12. Han-Wen NienhuysJun 12, 2007
  13. Simon HausmannJun 17, 2007
  14. Benjamin SergeantJun 17, 2007

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.