https://www.mail-archive.com/fossil-users@lists.fossil-scm.org/msg24574.html


bug export --git : error: multiple updates for ref ... not allowed

Git generates errors due to fossil inappropriate export code.


Index: src/export.c
==================================================================
--- src/export.c
+++ src/export.c
@@ -695,37 +695,59 @@
   db_finalize(&q);
   manifest_cache_clear();
 
 
   /* Output tags */
+  int allow_multiple_tag = 1;
+  int current_tag_count = 0;
+  char *zCurrentTagName = 0;
   db_prepare(&q,
      "SELECT tagname, rid, strftime('%%s',mtime),"
      "       (SELECT coalesce(euser, user) FROM event WHERE objid=rid),"
      "       value"
      "  FROM tagxref JOIN tag USING(tagid)"
      " WHERE tagtype=1 AND tagname GLOB 'sym-*'"
+     " ORDER BY tagname ASC, mtime DESC"
   );
   while( db_step(&q)==SQLITE_ROW ){
     const char *zTagname = db_column_text(&q, 0);
     int rid = db_column_int(&q, 1);
     char *zMark = mark_name_from_rid(rid, &unused_mark);
     const char *zSecSince1970 = db_column_text(&q, 2);
     const char *zUser = db_column_text(&q, 3);
     const char *zValue = db_column_text(&q, 4);
+    if ( fossil_strcmp(zCurrentTagName, zTagname)!=0 ){
+      fossil_free(zCurrentTagName);
+      zCurrentTagName = mprintf("%s", zTagname);
+      current_tag_count = 0;
+    }
+    current_tag_count++;
+    if( !allow_multiple_tag && current_tag_count!=1 )
+       continue;
     if( rid==0 || !bag_find(&vers, rid) ) continue;
     zTagname += 4;
     printf("tag ");
-    print_ref(zTagname);
+    if( current_tag_count>1 ){
+      char *p = db_text(0, "SELECT %Q ||'@'||substr(uuid,1,10)"
+                           " FROM blob WHERE rid=%d",
+                           zTagname, rid);
+      print_ref(p);
+      fossil_free(p);
+    }else{
+      print_ref(zTagname);
+    }
     printf("\nfrom %s\n", zMark);
     free(zMark);
     printf("tagger");
     print_person(zUser);
     printf(" %s +0000\n", zSecSince1970);
     printf("data %d\n", zValue==NULL?0:(int)strlen(zValue)+1);
     if( zValue!=NULL ) printf("%s\n",zValue);
+    printf("\n");
   }
   db_finalize(&q);
+  fossil_free(zCurrentTagName);
 
   if( markfile_out!=0 ){
     FILE *f;
     f = fossil_fopen(markfile_out, "w");
     if( f == 0 ){
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to