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.
Commit
c27f646f2542e4a6275e8819d51071e828b45e61144ce11e569d1effe1dcf6b2
Parent
a9dda382bf1bce4…
2 files changed
+26
+2
-1
+26
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -32,10 +32,36 @@ | ||
| 32 | 32 | char *zBr = 0; |
| 33 | 33 | static Stmt q; |
| 34 | 34 | db_static_prepare(&q, |
| 35 | 35 | "SELECT value FROM tagxref" |
| 36 | 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" | |
| 37 | 63 | " AND tagtype>0", TAG_BRANCH); |
| 38 | 64 | db_bind_int(&q, "$rid", rid); |
| 39 | 65 | if( db_step(&q)==SQLITE_ROW ){ |
| 40 | 66 | zBr = fossil_strdup(db_column_text(&q,0)); |
| 41 | 67 | } |
| 42 | 68 |
| --- 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 @@ | ||
| 2245 | 2245 | const char *zIp = db_column_text(&q,2); |
| 2246 | 2246 | @ <p>Received on %s(zDate) from %h(zUser) at %h(zIp).</p> |
| 2247 | 2247 | } |
| 2248 | 2248 | db_finalize(&q); |
| 2249 | 2249 | } |
| 2250 | - zBr = branch_of_rid(rid); | |
| 2250 | + zBr = branch_of_file_rid(rid); | |
| 2251 | 2251 | if( zBr && zBr[0] ){ |
| 2252 | 2252 | style_submenu_element("View", "%R/doc/%T/%T", |
| 2253 | 2253 | zBr, blob_str(&downloadName)); |
| 2254 | 2254 | style_submenu_element("Tip", "%R/file/%%?ci=%T", |
| 2255 | 2255 | blob_str(&downloadName), zBr); |
| 2256 | + fossil_free((void *)zBr); | |
| 2256 | 2257 | } |
| 2257 | 2258 | style_submenu_element("Download", "%R/raw/%T?name=%s", |
| 2258 | 2259 | blob_str(&downloadName), zUuid); |
| 2259 | 2260 | if( db_exists("SELECT 1 FROM mlink WHERE fid=%d", rid) ){ |
| 2260 | 2261 | style_submenu_element("Check-ins Using", "%R/timeline?n=200&uf=%s", zUuid); |
| 2261 | 2262 |
| --- 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 |