From: Dmitry Kakurin <dmitry.kakurin@gmail.com>
To: "David Brown" <git@davidb.org>
Cc: "Git" <git@vger.kernel.org>
Subject: Re: State of Perforce importing.
Date: Wed, 19 Sep 2007 23:12:52 -0700 [thread overview]
Message-ID: <5BC36977390A4E61B826613630DF0BBC@ntdev.corp.microsoft.com> (raw)
In-Reply-To: <20070918154918.GA19106@old.davidb.org>
[-- Attachment #1: Type: text/plain, Size: 3005 bytes --]
I had to import quite a big Perforce depot too. And after some struggle it
went fine.
For case mismatch:
http://kb.perforce.com/AdminTasks/SuperuserTasks/CrossPlatfor..erMigration,
bullet 10. It requires server access.
For a@b and for excluding one p4 path during migration you could use my
quick-and-dirty fix (attached).
You can easily extend it to include and exclude multiple paths. Then it
becomes as flexible as p4 client mapping.
- Dmitry
----- Original Message -----
From: "David Brown" <git@davidb.org>
Newsgroups: gmane.comp.version-control.git
To: "Sam Vilain" <sam@vilain.net>
Cc: "Git" <git@vger.kernel.org>
Sent: Tuesday, 18 September 2007 8:49
Subject: Re: State of Perforce importing.
> On Tue, Sep 18, 2007 at 07:27:13PM +1200, Sam Vilain wrote:
>
>>I'm pretty close to giving a newer one a spin, that actually imports
>>from the raw perforce back-end files without needing the perforce
>>server. I am hoping that this should give a very clean import and will
>>be very fast and efficient, sending files that share ancestry to gfi in
>>sequence so that the on-the-fly delta system works.
>
> Unfortunately, this isn't something I'm going to be able to use. The
> Perforce server will remain live, and resides on a machine I don't have
> access to.
>
>>It could possibly be adapted to use the p4 client (though I'd expect
>>that to be relatively slow per-revision), and possibly be extended to be
>>bidirectional as all of the upstream change number information is
>>recorded, a la git-svn.
>
> I was able to get 'git-p4' to work a lot better by using @all, but it
> still
> has some problems, at least bad interactions with P4.
>
> - It doesn't use any client spec. Our P4 server space is a complete
> mismash and has to be fixed up to get a sane directory layout. For
> example, some revisions have hundred-MB tar files sitting in the root
> directory and I don't want that in the repo. I also need to exclude
> directories, and in some cases completely rearrange the directory
> layout.
>
> - Our P4 server is set to be case insensitive. 'git-p4' ignores paths
> that come back from the server that are specified using a different
> case. Unfortunately, this means that a handful of files just get
> randomly dropped from each revision.
>
> I tried importing a client path instead of a depot path, but the names
> that come back from 'p4 files' are depot based so none ever match. I
> end up with a nice revision history of entirely empty trees.
>
> I'm probably going to end up writing an importer that uses an actual
> client
> workspace to let Perforce do the client mapping. I'm also going to have
> to
> put some work into some code to clean up the log messages, since most of
> our changes have as a first line "New Features:", which makes for a rather
> uninformative shortlog.
>
> But, I did learn about 'p4 -G' from git-p4 so that will help in getting
> information from the repository.
>
> Thanks,
> David
[-- Attachment #2: 0001-git-p4-Added-exclude-option-and-use-P4-client-nam.patch --]
[-- Type: application/octet-stream, Size: 2664 bytes --]
>From a089b02239c3bc310956964d61075b093d26549f Mon Sep 17 00:00:00 2001
From: Dmitry Kakurin <Dmitry.Kakurin@gmail.com>
Date: Sun, 9 Sep 2007 13:58:12 -0700
Subject: [PATCH] git-p4: Added --exclude option and use P4 client name in commits
---
contrib/fast-import/git-p4 | 19 +++++++++++++++----
1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index adaaae6..337854f 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -769,6 +769,7 @@ class P4Sync(Command):
self.keepRepoPath = False
self.depotPaths = None
self.p4BranchesInGit = []
+ self.cloneExclude = None
if gitConfig("git-p4.syncFromOrigin") == "false":
self.syncWithOrigin = False
@@ -779,8 +780,12 @@ class P4Sync(Command):
while commit.has_key("depotFile%s" % fnum):
path = commit["depotFile%s" % fnum]
- found = [p for p in self.depotPaths
- if path.startswith (p)]
+ if self.cloneExclude and path.startswith( self.cloneExclude ):
+ found = False
+ else:
+ found = [p for p in self.depotPaths
+ if path.startswith (p)]
+
if not found:
fnum = fnum + 1
continue
@@ -905,6 +910,8 @@ class P4Sync(Command):
else:
committer = "%s <a@b> %s %s" % (author, epoch, self.tz)
+ committer = "%s <%s@%s> %s %s" % (author, details["user"], details["client"], epoch, self.tz)
+
self.gitStream.write("committer %s\n" % committer)
self.gitStream.write("data <<EOT\n")
@@ -1540,10 +1547,14 @@ class P4Clone(P4Sync):
P4Sync.__init__(self)
self.description = "Creates a new git repository and imports from Perforce into it"
self.usage = "usage: %prog [options] //depot/path[@revRange]"
- self.options.append(
+ self.options += [
optparse.make_option("--destination", dest="cloneDestination",
action='store', default=None,
- help="where to leave result of the clone"))
+ help="where to leave result of the clone"),
+ optparse.make_option("--exclude", dest="cloneExclude",
+ action='store', default=None,
+ help="exclude depot path")
+ ]
self.cloneDestination = None
self.needsGit = False
--
1.5.3.mingw.1.1.g01e3a1
next prev parent reply other threads:[~2007-09-20 6:13 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-17 19:30 State of Perforce importing David Brown
2007-09-18 6:58 ` Simon Hausmann
2007-09-18 7:27 ` Sam Vilain
2007-09-18 15:49 ` David Brown
2007-09-18 17:53 ` Reece Dunn
2007-09-18 23:19 ` David Brown
2007-09-19 0:20 ` Sam Vilain
2007-09-19 0:26 ` David Brown
2007-09-19 0:23 ` Sam Vilain
2007-09-19 21:20 ` Reece Dunn
2007-09-20 6:12 ` Dmitry Kakurin [this message]
2007-09-18 23:37 ` David Brown
2007-09-19 0:23 ` Sam Vilain
2007-09-19 0:27 ` David Brown
2007-09-19 6:19 ` Simon Hausmann
2007-09-19 17:12 ` David Brown
2007-09-19 18:23 ` Reece Dunn
2007-09-19 18:25 ` David Brown
2007-09-19 18:56 ` Reece Dunn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5BC36977390A4E61B826613630DF0BBC@ntdev.corp.microsoft.com \
--to=dmitry.kakurin@gmail.com \
--cc=git@davidb.org \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.