Fossil SCM

Add "blame" WEBPAGE, just as "annotate" but giving comparable output as "fossil blame".

jan.nijtmans 2013-11-20 08:57 trunk
Commit d7160dc1953da495d6eb43051803c690fa1585ee
3 files changed +26 -9 +5 -3 +3 -1
+26 -9
--- src/diff.c
+++ src/diff.c
@@ -2123,10 +2123,11 @@
21232123
return c;
21242124
}
21252125
21262126
/*
21272127
** WEBPAGE: annotate
2128
+** WEBPAGE: blame
21282129
**
21292130
** Query parameters:
21302131
**
21312132
** checkin=ID The manifest ID at which to start the annotation
21322133
** filename=FILENAME The filename.
@@ -2145,10 +2146,11 @@
21452146
const char *zCI; /* The check-in containing zFilename */
21462147
Annotator ann;
21472148
HQuery url;
21482149
struct AnnVers *p;
21492150
unsigned clr1, clr2, clr;
2151
+ int bBlame = g.zPath[0]=='b';/* True for BLAME output. False for ANNOTATE. */
21502152
21512153
/* Gather query parameters */
21522154
showLog = atoi(PD("log","1"));
21532155
login_check_credentials();
21542156
if( !g.perm.Read ){ login_needed(); return; }
@@ -2251,20 +2253,35 @@
22512253
char *z = (char*)ann.aOrig[i].z;
22522254
int n = ann.aOrig[i].n;
22532255
char zPrefix[300];
22542256
z[n] = 0;
22552257
if( iLimit>ann.nVers && iVers<0 ) iVers = ann.nVers-1;
2256
- if( iVers>=0 ){
2257
- struct AnnVers *p = ann.aVers+iVers;
2258
- char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2259
- sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2260
- "<span style='background-color:%s'>"
2261
- "%s%.10s</a> %s</span> %4d:",
2262
- p->zBgColor, zLink, p->zMUuid, p->zDate, i+1);
2263
- fossil_free(zLink);
2258
+
2259
+ if( bBlame ){
2260
+ if( iVers>=0 ){
2261
+ struct AnnVers *p = ann.aVers+iVers;
2262
+ char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2263
+ sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2264
+ "<span style='background-color:%s'>"
2265
+ "%s%.10s</a> %s</span> %13.13s:",
2266
+ p->zBgColor, zLink, p->zMUuid, p->zDate, p->zUser);
2267
+ fossil_free(zLink);
2268
+ }else{
2269
+ sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%36s", "");
2270
+ }
22642271
}else{
2265
- sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%22s%4d:", "", i+1);
2272
+ if( iVers>=0 ){
2273
+ struct AnnVers *p = ann.aVers+iVers;
2274
+ char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2275
+ sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2276
+ "<span style='background-color:%s'>"
2277
+ "%s%.10s</a> %s</span> %4d:",
2278
+ p->zBgColor, zLink, p->zMUuid, p->zDate, i+1);
2279
+ fossil_free(zLink);
2280
+ }else{
2281
+ sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%22s%4d:", "", i+1);
2282
+ }
22662283
}
22672284
@ %s(zPrefix) %h(z)
22682285
22692286
}
22702287
@ </pre>
22712288
--- src/diff.c
+++ src/diff.c
@@ -2123,10 +2123,11 @@
2123 return c;
2124 }
2125
2126 /*
2127 ** WEBPAGE: annotate
 
2128 **
2129 ** Query parameters:
2130 **
2131 ** checkin=ID The manifest ID at which to start the annotation
2132 ** filename=FILENAME The filename.
@@ -2145,10 +2146,11 @@
2145 const char *zCI; /* The check-in containing zFilename */
2146 Annotator ann;
2147 HQuery url;
2148 struct AnnVers *p;
2149 unsigned clr1, clr2, clr;
 
2150
2151 /* Gather query parameters */
2152 showLog = atoi(PD("log","1"));
2153 login_check_credentials();
2154 if( !g.perm.Read ){ login_needed(); return; }
@@ -2251,20 +2253,35 @@
2251 char *z = (char*)ann.aOrig[i].z;
2252 int n = ann.aOrig[i].n;
2253 char zPrefix[300];
2254 z[n] = 0;
2255 if( iLimit>ann.nVers && iVers<0 ) iVers = ann.nVers-1;
2256 if( iVers>=0 ){
2257 struct AnnVers *p = ann.aVers+iVers;
2258 char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2259 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2260 "<span style='background-color:%s'>"
2261 "%s%.10s</a> %s</span> %4d:",
2262 p->zBgColor, zLink, p->zMUuid, p->zDate, i+1);
2263 fossil_free(zLink);
 
 
 
 
 
2264 }else{
2265 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%22s%4d:", "", i+1);
 
 
 
 
 
 
 
 
 
 
2266 }
2267 @ %s(zPrefix) %h(z)
2268
2269 }
2270 @ </pre>
2271
--- src/diff.c
+++ src/diff.c
@@ -2123,10 +2123,11 @@
2123 return c;
2124 }
2125
2126 /*
2127 ** WEBPAGE: annotate
2128 ** WEBPAGE: blame
2129 **
2130 ** Query parameters:
2131 **
2132 ** checkin=ID The manifest ID at which to start the annotation
2133 ** filename=FILENAME The filename.
@@ -2145,10 +2146,11 @@
2146 const char *zCI; /* The check-in containing zFilename */
2147 Annotator ann;
2148 HQuery url;
2149 struct AnnVers *p;
2150 unsigned clr1, clr2, clr;
2151 int bBlame = g.zPath[0]=='b';/* True for BLAME output. False for ANNOTATE. */
2152
2153 /* Gather query parameters */
2154 showLog = atoi(PD("log","1"));
2155 login_check_credentials();
2156 if( !g.perm.Read ){ login_needed(); return; }
@@ -2251,20 +2253,35 @@
2253 char *z = (char*)ann.aOrig[i].z;
2254 int n = ann.aOrig[i].n;
2255 char zPrefix[300];
2256 z[n] = 0;
2257 if( iLimit>ann.nVers && iVers<0 ) iVers = ann.nVers-1;
2258
2259 if( bBlame ){
2260 if( iVers>=0 ){
2261 struct AnnVers *p = ann.aVers+iVers;
2262 char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2263 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2264 "<span style='background-color:%s'>"
2265 "%s%.10s</a> %s</span> %13.13s:",
2266 p->zBgColor, zLink, p->zMUuid, p->zDate, p->zUser);
2267 fossil_free(zLink);
2268 }else{
2269 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%36s", "");
2270 }
2271 }else{
2272 if( iVers>=0 ){
2273 struct AnnVers *p = ann.aVers+iVers;
2274 char *zLink = xhref("target='infowindow'", "%R/info/%S", p->zMUuid);
2275 sqlite3_snprintf(sizeof(zPrefix), zPrefix,
2276 "<span style='background-color:%s'>"
2277 "%s%.10s</a> %s</span> %4d:",
2278 p->zBgColor, zLink, p->zMUuid, p->zDate, i+1);
2279 fossil_free(zLink);
2280 }else{
2281 sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%22s%4d:", "", i+1);
2282 }
2283 }
2284 @ %s(zPrefix) %h(z)
2285
2286 }
2287 @ </pre>
2288
+5 -3
--- src/finfo.c
+++ src/finfo.c
@@ -463,16 +463,18 @@
463463
@ %w(zCom) (user:
464464
hyperlink_to_user(zUser, zDate, "");
465465
@ branch: %h(zBr))
466466
if( g.perm.Hyperlink && zUuid ){
467467
const char *z = zFilename;
468
+ @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
469
+ @ [annotate]</a>
470
+ @ %z(href("%R/blame?checkin=%S&filename=%h",zCkin,z))
471
+ @ [blame]</a>
472
+ @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
468473
if( fpid ){
469474
@ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zPUuid,zUuid))[diff]</a>
470475
}
471
- @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
472
- @ [annotate]</a>
473
- @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
474476
}
475477
if( fDebug & FINFO_DEBUG_MLINK ){
476478
int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
477479
int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
478480
@ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz)
479481
--- src/finfo.c
+++ src/finfo.c
@@ -463,16 +463,18 @@
463 @ %w(zCom) (user:
464 hyperlink_to_user(zUser, zDate, "");
465 @ branch: %h(zBr))
466 if( g.perm.Hyperlink && zUuid ){
467 const char *z = zFilename;
 
 
 
 
 
468 if( fpid ){
469 @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zPUuid,zUuid))[diff]</a>
470 }
471 @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
472 @ [annotate]</a>
473 @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
474 }
475 if( fDebug & FINFO_DEBUG_MLINK ){
476 int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
477 int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
478 @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz)
479
--- src/finfo.c
+++ src/finfo.c
@@ -463,16 +463,18 @@
463 @ %w(zCom) (user:
464 hyperlink_to_user(zUser, zDate, "");
465 @ branch: %h(zBr))
466 if( g.perm.Hyperlink && zUuid ){
467 const char *z = zFilename;
468 @ %z(href("%R/annotate?checkin=%S&filename=%h",zCkin,z))
469 @ [annotate]</a>
470 @ %z(href("%R/blame?checkin=%S&filename=%h",zCkin,z))
471 @ [blame]</a>
472 @ %z(href("%R/timeline?n=200&uf=%S",zUuid))[checkins&nbsp;using]</a>
473 if( fpid ){
474 @ %z(href("%R/fdiff?v1=%S&v2=%S&sbs=1",zPUuid,zUuid))[diff]</a>
475 }
 
 
 
476 }
477 if( fDebug & FINFO_DEBUG_MLINK ){
478 int srcid = db_int(0, "SELECT srcid FROM delta WHERE rid=%d", frid);
479 int sz = db_int(0, "SELECT length(content) FROM blob WHERE rid=%d", frid);
480 @ <br>fid=%d(frid) pid=%d(fpid) mid=%d(fmid) sz=%d(sz)
481
+3 -1
--- src/info.c
+++ src/info.c
@@ -1128,13 +1128,15 @@
11281128
@ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
11291129
}
11301130
@ - %!w(zCom) (user:
11311131
hyperlink_to_user(zUser,zDate,")");
11321132
if( g.perm.Hyperlink ){
1133
+ @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
11331134
@ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
11341135
@ [annotate]</a>
1135
- @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
1136
+ @ %z(href("%R/blame?checkin=%S&filename=%T",zVers,zName))
1137
+ @ [blame]</a>
11361138
}
11371139
cnt++;
11381140
if( pDownloadName && blob_size(pDownloadName)==0 ){
11391141
blob_append(pDownloadName, zName, -1);
11401142
}
11411143
--- src/info.c
+++ src/info.c
@@ -1128,13 +1128,15 @@
1128 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1129 }
1130 @ - %!w(zCom) (user:
1131 hyperlink_to_user(zUser,zDate,")");
1132 if( g.perm.Hyperlink ){
 
1133 @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1134 @ [annotate]</a>
1135 @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
 
1136 }
1137 cnt++;
1138 if( pDownloadName && blob_size(pDownloadName)==0 ){
1139 blob_append(pDownloadName, zName, -1);
1140 }
1141
--- src/info.c
+++ src/info.c
@@ -1128,13 +1128,15 @@
1128 @ on branch %z(href("%R/timeline?r=%T",zBr))%h(zBr)</a>
1129 }
1130 @ - %!w(zCom) (user:
1131 hyperlink_to_user(zUser,zDate,")");
1132 if( g.perm.Hyperlink ){
1133 @ %z(href("%R/finfo?name=%T&ci=%S",zName,zVers))[ancestry]</a>
1134 @ %z(href("%R/annotate?checkin=%S&filename=%T",zVers,zName))
1135 @ [annotate]</a>
1136 @ %z(href("%R/blame?checkin=%S&filename=%T",zVers,zName))
1137 @ [blame]</a>
1138 }
1139 cnt++;
1140 if( pDownloadName && blob_size(pDownloadName)==0 ){
1141 blob_append(pDownloadName, zName, -1);
1142 }
1143

Keyboard Shortcuts

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