Store the modified files in git-fast-import format already.
authorThiago Macieira <thiago.macieira@trolltech.com>
Sun, 24 Aug 2008 12:45:08 +0000 (24 14:45 +0200)
committerThiago Macieira <thiago.macieira@trolltech.com>
Sun, 24 Aug 2008 12:45:08 +0000 (24 14:45 +0200)
I don't know what went wrong, but importing KDE revision 296047 there was a mixup with the marks. So instead avoid the trouble and store the thing in in cooked format already

src/repository.cpp
src/repository.h

index e74ab20..890c10c 100644 (file)
@@ -212,19 +212,26 @@ void Repository::Transaction::deleteFile(const QString &path)
 
 QIODevice *Repository::Transaction::addFile(const QString &path, int mode, qint64 length)
 {
-    FileProperties fp;
-    fp.mode = mode;
-    fp.mark = ++lastmark;
+    int mark = ++lastmark;
+
+    if (modifiedFiles.capacity() == 0)
+        modifiedFiles.reserve(2048);
+    modifiedFiles.append("M ");
+    modifiedFiles.append(QByteArray::number(mode, 8));
+    modifiedFiles.append(" :");
+    modifiedFiles.append(QByteArray::number(mark));
+    modifiedFiles.append(' ');
+    modifiedFiles.append(path.toUtf8());
+    modifiedFiles.append("\n");
 
 #ifndef DRY_RUN
     repository->fastImport.write("blob\nmark :");
-    repository->fastImport.write(QByteArray::number(fp.mark));
+    repository->fastImport.write(QByteArray::number(mark));
     repository->fastImport.write("\ndata ");
     repository->fastImport.write(QByteArray::number(length));
     repository->fastImport.write("\n", 1);
 #endif
 
-    modifiedFiles.insert(path, fp);
     return &repository->fastImport;
 }
 
@@ -269,16 +276,7 @@ void Repository::Transaction::commit()
             repository->fastImport.write("D " + df.toUtf8() + "\n");
 
     // write the file modifications
-    QHash<QString, FileProperties>::ConstIterator it = modifiedFiles.constBegin();
-    for ( ; it != modifiedFiles.constEnd(); ++it) {
-        repository->fastImport.write("M ", 2);
-        repository->fastImport.write(QByteArray::number(it->mode, 8));
-        repository->fastImport.write(" :", 2);
-        repository->fastImport.write(QByteArray::number(it->mark));
-        repository->fastImport.write(" ", 1);
-        repository->fastImport.write(it.key().toUtf8());
-        repository->fastImport.write("\n", 1);
-    }
+    repository->fastImport.write(modifiedFiles);
 
     repository->fastImport.write("\nprogress Commit #" +
                                  QByteArray::number(repository->commitCount) +
index d837599..9a49040 100644 (file)
@@ -30,10 +30,6 @@ public:
     {
         Q_DISABLE_COPY(Transaction)
         friend class Repository;
-        struct FileProperties {
-            int mode;
-            int mark;
-        };
 
         Repository *repository;
         QByteArray branch;
@@ -45,7 +41,7 @@ public:
         int lastmark;
 
         QStringList deletedFiles;
-        QHash<QString, FileProperties> modifiedFiles;
+        QByteArray modifiedFiles;
 
         inline Transaction() {}
     public: