Fossil SCM

Match committer / tag name <email> with a user's contact info record. If not found, then use the email address as the user name.

roy.marples 2017-02-12 15:17 UTC roy-export
Commit 8f901ff570953cc68b22273c0743e3632a1f547d
1 file changed +16 -9
+16 -9
--- src/import.c
+++ src/import.c
@@ -623,21 +623,28 @@
623623
fossil_free(gg.zMark);
624624
gg.zMark = fossil_strdup(&zLine[5]);
625625
}else
626626
if( strncmp(zLine, "tagger ", 7)==0 || strncmp(zLine, "committer ",10)==0 ){
627627
sqlite3_int64 secSince1970;
628
- for(i=0; zLine[i] && zLine[i]!='<'; i++){}
629
- if( zLine[i]==0 ) goto malformed_line;
630
- z = &zLine[i+1];
631
- for(i=i+1; zLine[i] && zLine[i]!='>'; i++){}
632
- if( zLine[i]==0 ) goto malformed_line;
633
- zLine[i] = 0;
628
+ z = strchr(zLine, ' ');
629
+ while( fossil_isspace(*z) ) z++;
630
+ if( (zTo=strchr(z, '>'))==NULL ) goto malformed_line;
631
+ *(++zTo) = '\0';
632
+ /* Lookup user by contact info. */
634633
fossil_free(gg.zUser);
635
- gg.zUser = fossil_strdup(z);
634
+ gg.zUser = db_text(0, "SELECT login FROM user WHERE info=%Q", z);
635
+ if( gg.zUser==NULL ){
636
+ /* If there is no user with this contact info,
637
+ * then use the email address as the username. */
638
+ if ( (z=strchr(z, '<'))==NULL ) goto malformed_line;
639
+ z++;
640
+ *(zTo-1) = '\0';
641
+ gg.zUser = fossil_strdup(z);
642
+ }
636643
secSince1970 = 0;
637
- for(i=i+2; fossil_isdigit(zLine[i]); i++){
638
- secSince1970 = secSince1970*10 + zLine[i] - '0';
644
+ for(zTo++; fossil_isdigit(*zTo); zTo++){
645
+ secSince1970 = secSince1970*10 + *zTo - '0';
639646
}
640647
fossil_free(gg.zDate);
641648
gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
642649
gg.zDate[10] = 'T';
643650
}else
644651
--- src/import.c
+++ src/import.c
@@ -623,21 +623,28 @@
623 fossil_free(gg.zMark);
624 gg.zMark = fossil_strdup(&zLine[5]);
625 }else
626 if( strncmp(zLine, "tagger ", 7)==0 || strncmp(zLine, "committer ",10)==0 ){
627 sqlite3_int64 secSince1970;
628 for(i=0; zLine[i] && zLine[i]!='<'; i++){}
629 if( zLine[i]==0 ) goto malformed_line;
630 z = &zLine[i+1];
631 for(i=i+1; zLine[i] && zLine[i]!='>'; i++){}
632 if( zLine[i]==0 ) goto malformed_line;
633 zLine[i] = 0;
634 fossil_free(gg.zUser);
635 gg.zUser = fossil_strdup(z);
 
 
 
 
 
 
 
 
636 secSince1970 = 0;
637 for(i=i+2; fossil_isdigit(zLine[i]); i++){
638 secSince1970 = secSince1970*10 + zLine[i] - '0';
639 }
640 fossil_free(gg.zDate);
641 gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
642 gg.zDate[10] = 'T';
643 }else
644
--- src/import.c
+++ src/import.c
@@ -623,21 +623,28 @@
623 fossil_free(gg.zMark);
624 gg.zMark = fossil_strdup(&zLine[5]);
625 }else
626 if( strncmp(zLine, "tagger ", 7)==0 || strncmp(zLine, "committer ",10)==0 ){
627 sqlite3_int64 secSince1970;
628 z = strchr(zLine, ' ');
629 while( fossil_isspace(*z) ) z++;
630 if( (zTo=strchr(z, '>'))==NULL ) goto malformed_line;
631 *(++zTo) = '\0';
632 /* Lookup user by contact info. */
 
633 fossil_free(gg.zUser);
634 gg.zUser = db_text(0, "SELECT login FROM user WHERE info=%Q", z);
635 if( gg.zUser==NULL ){
636 /* If there is no user with this contact info,
637 * then use the email address as the username. */
638 if ( (z=strchr(z, '<'))==NULL ) goto malformed_line;
639 z++;
640 *(zTo-1) = '\0';
641 gg.zUser = fossil_strdup(z);
642 }
643 secSince1970 = 0;
644 for(zTo++; fossil_isdigit(*zTo); zTo++){
645 secSince1970 = secSince1970*10 + *zTo - '0';
646 }
647 fossil_free(gg.zDate);
648 gg.zDate = db_text(0, "SELECT datetime(%lld, 'unixepoch')", secSince1970);
649 gg.zDate[10] = 'T';
650 }else
651

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button