Fossil SCM
Add submenu links to trunk/tip when browsing files of a non-trunk/tip check-in.
Commit
b5b0f1b3fc8c623f783e49c8bd905359a8a6c683
Parent
8b17c2360a5bc76…
1 file changed
+17
-18
+17
-18
| --- src/browse.c | ||
| +++ src/browse.c | ||
| @@ -118,10 +118,11 @@ | ||
| 118 | 118 | int rid = 0; |
| 119 | 119 | char *zUuid = 0; |
| 120 | 120 | Blob dirname; |
| 121 | 121 | Manifest *pM = 0; |
| 122 | 122 | const char *zSubdirLink; |
| 123 | + int linkTrunk = 1, linkTip = 1; | |
| 123 | 124 | |
| 124 | 125 | login_check_credentials(); |
| 125 | 126 | if( !g.perm.Read ){ login_needed(); return; } |
| 126 | 127 | while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; } |
| 127 | 128 | style_header("File List"); |
| @@ -136,26 +137,41 @@ | ||
| 136 | 137 | ** files from all check-ins to be displayed. |
| 137 | 138 | */ |
| 138 | 139 | if( zCI ){ |
| 139 | 140 | pM = manifest_get_by_name(zCI, &rid); |
| 140 | 141 | if( pM ){ |
| 142 | + int trunkRid = symbolic_name_to_rid("tag:trunk", "ci"); | |
| 143 | + linkTrunk = trunkRid && rid != trunkRid; | |
| 144 | + linkTip = rid != symbolic_name_to_rid("tip", "ci"); | |
| 141 | 145 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 142 | 146 | }else{ |
| 143 | 147 | zCI = 0; |
| 144 | 148 | } |
| 145 | 149 | } |
| 146 | - | |
| 147 | 150 | |
| 148 | 151 | /* Compute the title of the page */ |
| 149 | 152 | blob_zero(&dirname); |
| 150 | 153 | if( zD ){ |
| 151 | 154 | blob_append(&dirname, "in directory ", -1); |
| 152 | 155 | hyperlinked_path(zD, &dirname, zCI); |
| 153 | 156 | zPrefix = mprintf("%s/", zD); |
| 157 | + if( linkTrunk ){ | |
| 158 | + style_submenu_element("Trunk", "Trunk", "%R/dir?name=%t&ci=trunk", | |
| 159 | + zD); | |
| 160 | + } | |
| 161 | + if ( linkTip ){ | |
| 162 | + style_submenu_element("Tip", "Tip", "%R/dir?name=%t&ci=tip", zD); | |
| 163 | + } | |
| 154 | 164 | }else{ |
| 155 | 165 | blob_append(&dirname, "in the top-level directory", -1); |
| 156 | 166 | zPrefix = ""; |
| 167 | + if( linkTrunk ){ | |
| 168 | + style_submenu_element("Trunk", "Trunk", "%R/dir?ci=trunk"); | |
| 169 | + } | |
| 170 | + if ( linkTip ){ | |
| 171 | + style_submenu_element("Tip", "Tip", "%R/dir?ci=tip"); | |
| 172 | + } | |
| 157 | 173 | } |
| 158 | 174 | if( zCI ){ |
| 159 | 175 | char zShort[20]; |
| 160 | 176 | memcpy(zShort, zUuid, 10); |
| 161 | 177 | zShort[10] = 0; |
| @@ -169,30 +185,13 @@ | ||
| 169 | 185 | style_submenu_element("All", "All", "%R/dir"); |
| 170 | 186 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%S", |
| 171 | 187 | zUuid); |
| 172 | 188 | } |
| 173 | 189 | }else{ |
| 174 | - int hasTrunk; | |
| 175 | 190 | @ <h2>The union of all files from all check-ins |
| 176 | 191 | @ %s(blob_str(&dirname))</h2> |
| 177 | - hasTrunk = db_exists( | |
| 178 | - "SELECT 1 FROM tagxref WHERE tagid=%d AND value='trunk'", | |
| 179 | - TAG_BRANCH); | |
| 180 | 192 | zSubdirLink = mprintf("%R/dir?name=%T", zPrefix); |
| 181 | - if( zD ){ | |
| 182 | - style_submenu_element("Top", "Top", "%R/dir"); | |
| 183 | - style_submenu_element("Tip", "Tip", "%R/dir?name=%t&ci=tip", zD); | |
| 184 | - if( hasTrunk ){ | |
| 185 | - style_submenu_element("Trunk", "Trunk", "%R/dir?name=%t&ci=trunk", | |
| 186 | - zD); | |
| 187 | - } | |
| 188 | - }else{ | |
| 189 | - style_submenu_element("Tip", "Tip", "%R/dir?ci=tip"); | |
| 190 | - if( hasTrunk ){ | |
| 191 | - style_submenu_element("Trunk", "Trunk", "%R/dir?ci=trunk"); | |
| 192 | - } | |
| 193 | - } | |
| 194 | 193 | } |
| 195 | 194 | |
| 196 | 195 | /* Compute the temporary table "localfiles" containing the names |
| 197 | 196 | ** of all files and subdirectories in the zD[] directory. |
| 198 | 197 | ** |
| 199 | 198 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -118,10 +118,11 @@ | |
| 118 | int rid = 0; |
| 119 | char *zUuid = 0; |
| 120 | Blob dirname; |
| 121 | Manifest *pM = 0; |
| 122 | const char *zSubdirLink; |
| 123 | |
| 124 | login_check_credentials(); |
| 125 | if( !g.perm.Read ){ login_needed(); return; } |
| 126 | while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; } |
| 127 | style_header("File List"); |
| @@ -136,26 +137,41 @@ | |
| 136 | ** files from all check-ins to be displayed. |
| 137 | */ |
| 138 | if( zCI ){ |
| 139 | pM = manifest_get_by_name(zCI, &rid); |
| 140 | if( pM ){ |
| 141 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 142 | }else{ |
| 143 | zCI = 0; |
| 144 | } |
| 145 | } |
| 146 | |
| 147 | |
| 148 | /* Compute the title of the page */ |
| 149 | blob_zero(&dirname); |
| 150 | if( zD ){ |
| 151 | blob_append(&dirname, "in directory ", -1); |
| 152 | hyperlinked_path(zD, &dirname, zCI); |
| 153 | zPrefix = mprintf("%s/", zD); |
| 154 | }else{ |
| 155 | blob_append(&dirname, "in the top-level directory", -1); |
| 156 | zPrefix = ""; |
| 157 | } |
| 158 | if( zCI ){ |
| 159 | char zShort[20]; |
| 160 | memcpy(zShort, zUuid, 10); |
| 161 | zShort[10] = 0; |
| @@ -169,30 +185,13 @@ | |
| 169 | style_submenu_element("All", "All", "%R/dir"); |
| 170 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%S", |
| 171 | zUuid); |
| 172 | } |
| 173 | }else{ |
| 174 | int hasTrunk; |
| 175 | @ <h2>The union of all files from all check-ins |
| 176 | @ %s(blob_str(&dirname))</h2> |
| 177 | hasTrunk = db_exists( |
| 178 | "SELECT 1 FROM tagxref WHERE tagid=%d AND value='trunk'", |
| 179 | TAG_BRANCH); |
| 180 | zSubdirLink = mprintf("%R/dir?name=%T", zPrefix); |
| 181 | if( zD ){ |
| 182 | style_submenu_element("Top", "Top", "%R/dir"); |
| 183 | style_submenu_element("Tip", "Tip", "%R/dir?name=%t&ci=tip", zD); |
| 184 | if( hasTrunk ){ |
| 185 | style_submenu_element("Trunk", "Trunk", "%R/dir?name=%t&ci=trunk", |
| 186 | zD); |
| 187 | } |
| 188 | }else{ |
| 189 | style_submenu_element("Tip", "Tip", "%R/dir?ci=tip"); |
| 190 | if( hasTrunk ){ |
| 191 | style_submenu_element("Trunk", "Trunk", "%R/dir?ci=trunk"); |
| 192 | } |
| 193 | } |
| 194 | } |
| 195 | |
| 196 | /* Compute the temporary table "localfiles" containing the names |
| 197 | ** of all files and subdirectories in the zD[] directory. |
| 198 | ** |
| 199 |
| --- src/browse.c | |
| +++ src/browse.c | |
| @@ -118,10 +118,11 @@ | |
| 118 | int rid = 0; |
| 119 | char *zUuid = 0; |
| 120 | Blob dirname; |
| 121 | Manifest *pM = 0; |
| 122 | const char *zSubdirLink; |
| 123 | int linkTrunk = 1, linkTip = 1; |
| 124 | |
| 125 | login_check_credentials(); |
| 126 | if( !g.perm.Read ){ login_needed(); return; } |
| 127 | while( nD>1 && zD[nD-2]=='/' ){ zD[(--nD)-1] = 0; } |
| 128 | style_header("File List"); |
| @@ -136,26 +137,41 @@ | |
| 137 | ** files from all check-ins to be displayed. |
| 138 | */ |
| 139 | if( zCI ){ |
| 140 | pM = manifest_get_by_name(zCI, &rid); |
| 141 | if( pM ){ |
| 142 | int trunkRid = symbolic_name_to_rid("tag:trunk", "ci"); |
| 143 | linkTrunk = trunkRid && rid != trunkRid; |
| 144 | linkTip = rid != symbolic_name_to_rid("tip", "ci"); |
| 145 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 146 | }else{ |
| 147 | zCI = 0; |
| 148 | } |
| 149 | } |
| 150 | |
| 151 | /* Compute the title of the page */ |
| 152 | blob_zero(&dirname); |
| 153 | if( zD ){ |
| 154 | blob_append(&dirname, "in directory ", -1); |
| 155 | hyperlinked_path(zD, &dirname, zCI); |
| 156 | zPrefix = mprintf("%s/", zD); |
| 157 | if( linkTrunk ){ |
| 158 | style_submenu_element("Trunk", "Trunk", "%R/dir?name=%t&ci=trunk", |
| 159 | zD); |
| 160 | } |
| 161 | if ( linkTip ){ |
| 162 | style_submenu_element("Tip", "Tip", "%R/dir?name=%t&ci=tip", zD); |
| 163 | } |
| 164 | }else{ |
| 165 | blob_append(&dirname, "in the top-level directory", -1); |
| 166 | zPrefix = ""; |
| 167 | if( linkTrunk ){ |
| 168 | style_submenu_element("Trunk", "Trunk", "%R/dir?ci=trunk"); |
| 169 | } |
| 170 | if ( linkTip ){ |
| 171 | style_submenu_element("Tip", "Tip", "%R/dir?ci=tip"); |
| 172 | } |
| 173 | } |
| 174 | if( zCI ){ |
| 175 | char zShort[20]; |
| 176 | memcpy(zShort, zUuid, 10); |
| 177 | zShort[10] = 0; |
| @@ -169,30 +185,13 @@ | |
| 185 | style_submenu_element("All", "All", "%R/dir"); |
| 186 | style_submenu_element("File Ages", "File Ages", "%R/fileage?name=%S", |
| 187 | zUuid); |
| 188 | } |
| 189 | }else{ |
| 190 | @ <h2>The union of all files from all check-ins |
| 191 | @ %s(blob_str(&dirname))</h2> |
| 192 | zSubdirLink = mprintf("%R/dir?name=%T", zPrefix); |
| 193 | } |
| 194 | |
| 195 | /* Compute the temporary table "localfiles" containing the names |
| 196 | ** of all files and subdirectories in the zD[] directory. |
| 197 | ** |
| 198 |