Fossil

Diff
Login

Differences From Artifact [d974aa256e]:

To Artifact [793c4eec9e]:


896
897
898
899
900
901
902










903
904
905
906
907
908
909
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919







+
+
+
+
+
+
+
+
+
+







      );
    }
  }else{
    rec->contentFlag = 0;
  }
  return 1;
}

/*
** Returns the UUID for the RID, or NULL if not found.
** The returned string is allocated via db_text() and must be
** free()d by the caller.
*/
char * rid_to_uuid(int rid)
{
  return db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
}

static void svn_finish_revision(){
  Blob manifest;
  static Stmt getChanges;
  static Stmt getFiles;
  static Stmt setRid;
  Blob mcksum;
936
937
938
939
940
941
942
943


944
945
946

947

948




949
950
951
952
953
954
955

956
957
958
959
960
961
962
963
964
965

966
967
968
969
970
971
972
946
947
948
949
950
951
952

953
954
955
956

957
958
959

960
961
962
963
964
965
966
967
968
969

970
971
972
973
974
975
976
977
978
979

980
981
982
983
984
985
986
987







-
+
+


-
+

+
-
+
+
+
+






-
+









-
+







        const char *zUuid = db_column_text(&getFiles, 1);
        const char *zPerm = db_column_text(&getFiles, 2);
        blob_appendf(&manifest, "F %F %s %s\n", zFile, zUuid, zPerm);
      }
      db_reset(&getFiles);
      if( !bag_find(&gsvn.newBranches, branchId) ){
        parentRid = db_int(0, "SELECT trid, max(trev) FROM xrevisions"
                              " WHERE trev<%d AND tbranch=%d", gsvn.rev, branchId);
                              " WHERE trev<%d AND tbranch=%d",
                           gsvn.rev, branchId);
      }
      if( parentRid>0 ){
        const char *zParentUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", parentRid);
        const char *zParentUuid = rid_to_uuid(parentRid);
        if( parentRid==mergeRid || mergeRid==0){
          const char *zParentBranch =
          const char *zParentBranch = db_text(0, "SELECT tname FROM xbranches WHERE tid=(SELECT tbranch FROM xrevisions WHERE trid=%d)", parentRid);
            db_text(0, "SELECT tname FROM xbranches WHERE tid="
                       " (SELECT tbranch FROM xrevisions WHERE trid=%d)",
                    parentRid
            );
          blob_appendf(&manifest, "P %s\n", zParentUuid);
          blob_appendf(&manifest, "T *branch * %F\n", zBranch);
          blob_appendf(&manifest, "T *sym-%F *\n", zBranch);
          blob_appendf(&manifest, "T +sym-svn-rev-%d *\n", gsvn.rev);
          blob_appendf(&manifest, "T -sym-%F *\n", zParentBranch);
        }else{
          const char *zMergeUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", mergeRid);
          const char *zMergeUuid = rid_to_uuid(mergeRid);
          blob_appendf(&manifest, "P %s %s\n", zParentUuid, zMergeUuid);
          blob_appendf(&manifest, "T +sym-svn-rev-%d *\n", gsvn.rev);
        }
      }else{
        blob_appendf(&manifest, "T *branch * %F\n", zBranch);
        blob_appendf(&manifest, "T *sym-%F *\n", zBranch);
        blob_appendf(&manifest, "T +sym-svn-rev-%d *\n", gsvn.rev);
      }
    }else{
      const char *zParentUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", parentRid);
      const char *zParentUuid = rid_to_uuid(parentRid);
      blob_appendf(&manifest, "D %s\n", gsvn.zDate);
      blob_appendf(&manifest, "T +sym-%F %s\n", zBranch, zParentUuid);
    }
    if( gsvn.zUser ){
      blob_appendf(&manifest, "U %F\n", gsvn.zUser);
    }else{
      const char *zUserOvrd = find_option("user-override",0,1);
1148
1149
1150
1151
1152
1153
1154
1155



1156
1157
1158


1159
1160
1161
1162
1163
1164
1165
1163
1164
1165
1166
1167
1168
1169

1170
1171
1172
1173
1174

1175
1176
1177
1178
1179
1180
1181
1182
1183







-
+
+
+


-
+
+







  db_prepare(&addRev,
    "INSERT OR IGNORE INTO xrevisions (trev, tbranch) VALUES(:rev, :branch)"
  );
  db_prepare(&cpyPath,
    "INSERT INTO xfiles (tpath, tbranch, tuuid, tperm)"
    " SELECT :path||substr(filename, length(:srcpath)+1), :branch, uuid, perm"
    " FROM xfoci"
    " WHERE checkinID=:rid AND filename>:srcpath||'/' AND filename<:srcpath||'0'"
    " WHERE checkinID=:rid"
    "   AND filename>:srcpath||'/'"
    "   AND filename<:srcpath||'0'"
  );
  db_prepare(&revSrc,
    "UPDATE xrevisions SET tparent=:parent WHERE trev=:rev AND tbranch=:branch AND tparent<:parent"
    "UPDATE xrevisions SET tparent=:parent"
    " WHERE trev=:rev AND tbranch=:branch AND tparent<:parent"
  );
  gsvn.rev = -1;
  bag_init(&gsvn.newBranches);
  while( svn_read_rec(pIn, &rec) ){
    if( (zTemp = svn_find_header(rec, "Revision-number")) ){ /* revision node */
      /* finish previous revision */
      char *zDate = NULL;