aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorgny Nyblom <nyblom@kde.org>2012-11-23 15:55:26 +0100
committerTorgny Nyblom <nyblom@kde.org>2012-11-23 15:55:26 +0100
commitc9376cfbe605a5bad26b76d113f9060d5cdf8753 (patch)
tree20a79fbe0121efb0f1cc8fe4957a6ef403a0da47
parent2baedda2b06277544e3356670fd03e7e020d2abc (diff)
parent8f8d4c770ac4884dc6c7909a342b27b28f23cbd9 (diff)
downloadsvn2git-c9376cfbe605a5bad26b76d113f9060d5cdf8753.tar
svn2git-c9376cfbe605a5bad26b76d113f9060d5cdf8753.tar.gz
svn2git-c9376cfbe605a5bad26b76d113f9060d5cdf8753.tar.bz2
svn2git-c9376cfbe605a5bad26b76d113f9060d5cdf8753.tar.xz
svn2git-c9376cfbe605a5bad26b76d113f9060d5cdf8753.zip
Merge commit 'refs/merge-requests/20' of gitorious.org:svn2git/svn2git into mr/20
-rw-r--r--src/main.cpp10
-rw-r--r--src/repository.cpp15
-rw-r--r--src/svn.cpp24
-rw-r--r--src/svn.h1
4 files changed, 32 insertions, 18 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 681824f..ec969c5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -127,6 +127,7 @@ QSet<int> loadRevisionsFile( const QString &fileName, Svn &svn )
static const CommandLineOption options[] = {
{"--identity-map FILENAME", "provide map between svn username and email"},
+ {"--identity-domain DOMAIN", "provide user domain if no map was given"},
{"--revisions-file FILENAME", "provide a file with revision number that should be processed"},
{"--rules FILENAME[,FILENAME]", "the rules file(s) that determines what goes where"},
{"--add-metadata", "if passed, each git commit will have svn commit info"},
@@ -178,9 +179,9 @@ int main(int argc, char **argv)
out << "svn-all-fast-export failed: please specify the rules using the 'rules' argument\n";
return 11;
}
- if (!args->contains("identity-map")) {
+ if (!args->contains("identity-map") && !args->contains("identity-domain")) {
QTextStream out(stderr);
- out << "WARNING; no identity-map specified, all commits will be without email address\n\n";
+ out << "WARNING; no identity-map or -domain specified, all commits will use default @localhost email address\n\n";
}
QCoreApplication app(argc, argv);
@@ -246,6 +247,11 @@ int main(int argc, char **argv)
svn.setMatchRules(rulesList.allMatchRules());
svn.setRepositories(repositories);
svn.setIdentityMap(loadIdentityMapFile(args->optionArgument("identity-map")));
+ // Massage user input a little, no guarantees that input makes sense.
+ QString domain = args->optionArgument("identity-domain").simplified().remove(QChar('@'));
+ if (domain.isEmpty())
+ domain = QString("localhost");
+ svn.setIdentityDomain(domain);
if (max_rev < 1)
max_rev = svn.youngestRevision();
diff --git a/src/repository.cpp b/src/repository.cpp
index 44ec629..4d23cab 100644
--- a/src/repository.cpp
+++ b/src/repository.cpp
@@ -26,7 +26,7 @@
static const int maxSimultaneousProcesses = 100;
-static const int maxMark = (1 << 20) - 1; // some versions of git-fast-import are buggy for larger values of maxMark
+static const int maxMark = (1 << 20) - 2; // some versions of git-fast-import are buggy for larger values of maxMark
class ProcessCache: QLinkedList<Repository *>
{
@@ -271,12 +271,15 @@ void Repository::closeFastImport()
void Repository::reloadBranches()
{
+ bool reset_notes = false;
foreach (QString branch, branches.keys()) {
Branch &br = branches[branch];
if (br.marks.isEmpty() || !br.marks.last())
continue;
+ reset_notes = true;
+
QByteArray branchRef = branch.toUtf8();
if (!branchRef.startsWith("refs/"))
branchRef.prepend("refs/heads/");
@@ -285,6 +288,13 @@ void Repository::reloadBranches()
"\nfrom :" + QByteArray::number(br.marks.last()) + "\n\n"
"progress Branch " + branchRef + " reloaded\n");
}
+
+ if (reset_notes &&
+ CommandLineParser::instance()->contains("add-metadata-notes")) {
+ fastImport.write("reset refs/notes/commits\nfrom :" +
+ QByteArray::number(maxMark + 1) +
+ "\n");
+ }
}
int Repository::markFrom(const QString &branchFrom, int branchRevNum, QByteArray &branchFromDesc)
@@ -674,7 +684,8 @@ void Repository::Transaction::commitNote(const QByteArray &noteText, bool append
QTextStream s(&repository->fastImport);
s << "commit refs/notes/commits" << endl
- << "committer " << QString::fromUtf8(author) << ' ' << datetime << " -0000" << endl
+ << "mark :" << QByteArray::number(maxMark + 1) << endl
+ << "committer " << QString::fromUtf8(author) << ' ' << datetime << " +0000" << endl
<< "data " << message.length() << endl
<< message << endl
<< "N inline " << commitRef << endl
diff --git a/src/svn.cpp b/src/svn.cpp
index 6c61e3c..d95ccb3 100644
--- a/src/svn.cpp
+++ b/src/svn.cpp
@@ -79,6 +79,7 @@ public:
QList<MatchRuleList> allMatchRules;
RepositoryHash repositories;
IdentityHash identities;
+ QString userdomain;
SvnPrivate(const QString &pathToRepository);
~SvnPrivate();
@@ -130,6 +131,11 @@ void Svn::setIdentityMap(const IdentityHash &identityMap)
d->identities = identityMap;
}
+void Svn::setIdentityDomain(const QString &identityDomain)
+{
+ d->userdomain = identityDomain;
+}
+
int Svn::youngestRevision()
{
return d->youngestRevision();
@@ -388,6 +394,7 @@ public:
QList<MatchRuleList> allMatchRules;
RepositoryHash repositories;
IdentityHash identities;
+ QString userdomain;
svn_fs_t *fs;
svn_fs_root_t *fs_root;
@@ -436,6 +443,7 @@ int SvnPrivate::exportRevision(int revnum)
rev.allMatchRules = allMatchRules;
rev.repositories = repositories;
rev.identities = identities;
+ rev.userdomain = userdomain;
// open this revision:
printf("Exporting revision %d ", revnum);
@@ -506,8 +514,8 @@ int SvnRevision::fetchRevProps()
if (!svnauthor || svn_string_isempty(svnauthor))
authorident = "nobody <nobody@localhost>";
else
- authorident = svnauthor->data + QByteArray(" <") +
- svnauthor->data + QByteArray("@localhost>");
+ authorident = svnauthor->data + QByteArray(" <") + svnauthor->data +
+ QByteArray("@") + userdomain.toUtf8() + QByteArray(">");
}
propsFetched = true;
return EXIT_SUCCESS;
@@ -771,18 +779,6 @@ int SvnRevision::exportInternal(const char *key, const svn_fs_path_change_t *cha
transactions.insert(repository + branch, txn);
}
- //
- // If this path was copied from elsewhere, use it to infer _some_
- // merge points. This heuristic is fairly useful for tracking
- // changes across directory re-organizations and wholesale branch
- // imports.
- //
- if (path_from != NULL && prevrepository == repository && prevbranch != branch) {
- if(ruledebug)
- qDebug() << "copy from branch" << prevbranch << "to branch" << branch << "@rev" << rev_from;
- txn->noteCopyFromBranch (prevbranch, rev_from);
- }
-
if (change->change_kind == svn_fs_path_change_replace && path_from == NULL) {
if(ruledebug)
qDebug() << "replaced with empty path (" << branch << path << ")";
diff --git a/src/svn.h b/src/svn.h
index 5fb3245..b0ada88 100644
--- a/src/svn.h
+++ b/src/svn.h
@@ -36,6 +36,7 @@ public:
void setMatchRules(const QList<QList<Rules::Match> > &matchRules);
void setRepositories(const QHash<QString, Repository *> &repositories);
void setIdentityMap(const QHash<QByteArray, QByteArray> &identityMap);
+ void setIdentityDomain(const QString &identityDomain);
int youngestRevision();
bool exportRevision(int revnum);