Fossil SCM

The new /artifact View and Tip buttons were always referring to "trunk" because we were passing a file RID to a function that expected a commit RID. Added a new branch_of_file_rid() function to parallel the branch_of_rid() function we were incorrectly calling to fix it. Also squished a memory leak.

wyoung 2020-05-06 08:20 artifact-view-links
Commit c27f646f2542e4a6275e8819d51071e828b45e61144ce11e569d1effe1dcf6b2
2 files changed +26 +2 -1
+26
--- src/branch.c
+++ src/branch.c
@@ -32,10 +32,36 @@
3232
char *zBr = 0;
3333
static Stmt q;
3434
db_static_prepare(&q,
3535
"SELECT value FROM tagxref"
3636
" WHERE rid=$rid AND tagid=%d"
37
+ " AND tagtype>0", TAG_BRANCH);
38
+ db_bind_int(&q, "$rid", rid);
39
+ if( db_step(&q)==SQLITE_ROW ){
40
+ zBr = fossil_strdup(db_column_text(&q,0));
41
+ }
42
+ db_reset(&q);
43
+ if( zBr==0 ){
44
+ static char *zMain = 0;
45
+ if( zMain==0 ) zMain = db_get("main-branch",0);
46
+ zBr = fossil_strdup(zMain);
47
+ }
48
+ return zBr;
49
+}
50
+
51
+/*
52
+** Same as branch_of_rid() except that it takes a file RID, not a
53
+** check-in RID.
54
+*/
55
+char *branch_of_file_rid(int rid){
56
+ char *zBr = 0;
57
+ static Stmt q;
58
+ db_static_prepare(&q,
59
+ "SELECT value FROM tagxref, mlink"
60
+ " WHERE rid=mlink.mid"
61
+ " AND mlink.fid=$rid"
62
+ " AND tagid=%d"
3763
" AND tagtype>0", TAG_BRANCH);
3864
db_bind_int(&q, "$rid", rid);
3965
if( db_step(&q)==SQLITE_ROW ){
4066
zBr = fossil_strdup(db_column_text(&q,0));
4167
}
4268
--- src/branch.c
+++ src/branch.c
@@ -32,10 +32,36 @@
32 char *zBr = 0;
33 static Stmt q;
34 db_static_prepare(&q,
35 "SELECT value FROM tagxref"
36 " WHERE rid=$rid AND tagid=%d"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37 " AND tagtype>0", TAG_BRANCH);
38 db_bind_int(&q, "$rid", rid);
39 if( db_step(&q)==SQLITE_ROW ){
40 zBr = fossil_strdup(db_column_text(&q,0));
41 }
42
--- src/branch.c
+++ src/branch.c
@@ -32,10 +32,36 @@
32 char *zBr = 0;
33 static Stmt q;
34 db_static_prepare(&q,
35 "SELECT value FROM tagxref"
36 " WHERE rid=$rid AND tagid=%d"
37 " AND tagtype>0", TAG_BRANCH);
38 db_bind_int(&q, "$rid", rid);
39 if( db_step(&q)==SQLITE_ROW ){
40 zBr = fossil_strdup(db_column_text(&q,0));
41 }
42 db_reset(&q);
43 if( zBr==0 ){
44 static char *zMain = 0;
45 if( zMain==0 ) zMain = db_get("main-branch",0);
46 zBr = fossil_strdup(zMain);
47 }
48 return zBr;
49 }
50
51 /*
52 ** Same as branch_of_rid() except that it takes a file RID, not a
53 ** check-in RID.
54 */
55 char *branch_of_file_rid(int rid){
56 char *zBr = 0;
57 static Stmt q;
58 db_static_prepare(&q,
59 "SELECT value FROM tagxref, mlink"
60 " WHERE rid=mlink.mid"
61 " AND mlink.fid=$rid"
62 " AND tagid=%d"
63 " AND tagtype>0", TAG_BRANCH);
64 db_bind_int(&q, "$rid", rid);
65 if( db_step(&q)==SQLITE_ROW ){
66 zBr = fossil_strdup(db_column_text(&q,0));
67 }
68
+2 -1
--- src/info.c
+++ src/info.c
@@ -2245,16 +2245,17 @@
22452245
const char *zIp = db_column_text(&q,2);
22462246
@ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p>
22472247
}
22482248
db_finalize(&q);
22492249
}
2250
- zBr = branch_of_rid(rid);
2250
+ zBr = branch_of_file_rid(rid);
22512251
if( zBr && zBr[0] ){
22522252
style_submenu_element("View", "%R/doc/%T/%T",
22532253
zBr, blob_str(&downloadName));
22542254
style_submenu_element("Tip", "%R/file/%%?ci=%T",
22552255
blob_str(&downloadName), zBr);
2256
+ fossil_free((void *)zBr);
22562257
}
22572258
style_submenu_element("Download", "%R/raw/%T?name=%s",
22582259
blob_str(&downloadName), zUuid);
22592260
if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
22602261
style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
22612262
--- src/info.c
+++ src/info.c
@@ -2245,16 +2245,17 @@
2245 const char *zIp = db_column_text(&q,2);
2246 @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p>
2247 }
2248 db_finalize(&q);
2249 }
2250 zBr = branch_of_rid(rid);
2251 if( zBr && zBr[0] ){
2252 style_submenu_element("View", "%R/doc/%T/%T",
2253 zBr, blob_str(&downloadName));
2254 style_submenu_element("Tip", "%R/file/%%?ci=%T",
2255 blob_str(&downloadName), zBr);
 
2256 }
2257 style_submenu_element("Download", "%R/raw/%T?name=%s",
2258 blob_str(&downloadName), zUuid);
2259 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
2260 style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
2261
--- src/info.c
+++ src/info.c
@@ -2245,16 +2245,17 @@
2245 const char *zIp = db_column_text(&q,2);
2246 @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p>
2247 }
2248 db_finalize(&q);
2249 }
2250 zBr = branch_of_file_rid(rid);
2251 if( zBr && zBr[0] ){
2252 style_submenu_element("View", "%R/doc/%T/%T",
2253 zBr, blob_str(&downloadName));
2254 style_submenu_element("Tip", "%R/file/%%?ci=%T",
2255 blob_str(&downloadName), zBr);
2256 fossil_free((void *)zBr);
2257 }
2258 style_submenu_element("Download", "%R/raw/%T?name=%s",
2259 blob_str(&downloadName), zUuid);
2260 if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){
2261 style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid);
2262

Keyboard Shortcuts

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