Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Deal with windows filename aliasing in the "all" command. Ticket [974618fe5a8]. Also display the home directory for windows users with the "info" command since the home directory is non-obvious in windows. |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
d5695157d0caade4fc251dcfbeb1ac8e |
User & Date: | drh 2009-11-11 16:21:19.000 |
References
2010-01-13
| ||
14:39 | • New ticket [a9722a15d2] Fossil leaves files in inconsistent state after error. artifact: f1c27f1d22 user: anonymous | |
2009-11-25
| ||
22:28 | • New ticket [66de526498] tickets; new report format; Syntax error: no such function; functions user(), aux(), wiki().... artifact: c04ad1ffe3 user: anonymous | |
2009-11-16
| ||
19:58 | • New ticket [3f2cb270b2] Assertion on "fossil update" when trying to merge a binary file. artifact: 02c0e7937b user: anonymous | |
2009-11-11
| ||
16:21 | • Fixed ticket [974618fe5a]: fossil all rebuild does redundant rebuilds on windows plus 2 other changes artifact: 5428775198 user: drh | |
Context
2009-11-14
| ||
14:38 | In the file_isdir() routine, make sure the filename is simplified (has no "/../" or "/./" components and does not end with "/") in order to work around bugs in mingw. check-in: a7822bcc00 user: drh tags: trunk | |
2009-11-11
| ||
16:21 | Deal with windows filename aliasing in the "all" command. Ticket [974618fe5a8]. Also display the home directory for windows users with the "info" command since the home directory is non-obvious in windows. check-in: d5695157d0 user: drh tags: trunk | |
14:59 | Better error messages when "sync" fails due to server problems. Ticket [bfb8427cdd5] check-in: 0690aa18a4 user: drh tags: trunk | |
Changes
Changes to src/allrepo.c.
︙ | ︙ | |||
109 110 111 112 113 114 115 | zCmd = "sync -autourl -R"; }else{ fossil_fatal("\"all\" subcommand should be one of: " "list ls push pull rebuild sync"); } zFossil = quoteFilename(g.argv[0]); nMissing = 0; | | > > | > > | > > > > > > > > > | 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | zCmd = "sync -autourl -R"; }else{ fossil_fatal("\"all\" subcommand should be one of: " "list ls push pull rebuild sync"); } zFossil = quoteFilename(g.argv[0]); nMissing = 0; db_prepare(&q, "SELECT DISTINCT substr(name, 6) COLLATE nocase" " FROM global_config" " WHERE substr(name, 1, 5)=='repo:' ORDER BY 1" ); while( db_step(&q)==SQLITE_ROW ){ const char *zFilename = db_column_text(&q, 0); if( access(zFilename, 0) ){ nMissing++; continue; } if( !file_is_canonical(zFilename) ) nMissing++; if( zCmd[0]=='l' ){ printf("%s\n", zFilename); continue; } zQFilename = quoteFilename(zFilename); zSyscmd = mprintf("%s %s %s", zFossil, zCmd, zQFilename); printf("%s\n", zSyscmd); fflush(stdout); portable_system(zSyscmd); free(zSyscmd); free(zQFilename); } /* If any repositories whose names appear in the ~/.fossil file could not ** be found, remove those names from the ~/.fossil file. */ if( nMissing ){ db_begin_transaction(); db_reset(&q); while( db_step(&q)==SQLITE_ROW ){ const char *zFilename = db_column_text(&q, 0); if( access(zFilename, 0) ){ char *zRepo = mprintf("repo:%s", zFilename); db_unset(zRepo, 1); free(zRepo); }else if( !file_is_canonical(zFilename) ){ Blob cname; char *zRepo = mprintf("repo:%s", zFilename); db_unset(zRepo, 1); free(zRepo); file_canonical_name(zFilename, &cname); zRepo = mprintf("repo:%s", blob_str(&cname)); db_set(zRepo, "1", 1); free(zRepo); } } db_reset(&q); db_end_transaction(0); } db_finalize(&q); |
︙ | ︙ |
Changes to src/db.c.
︙ | ︙ | |||
699 700 701 702 703 704 705 706 707 708 709 710 711 712 | #else zHome = getenv("HOME"); if( zHome==0 ){ db_err("cannot locate home directory - " "please set the HOME environment variable"); } #endif #ifdef __MINGW32__ /* . filenames give some window systems problems and many apps problems */ zDbName = mprintf("%//_fossil", zHome); #else zDbName = mprintf("%s/.fossil", zHome); #endif if( file_size(zDbName)<1024*3 ){ | > | 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 | #else zHome = getenv("HOME"); if( zHome==0 ){ db_err("cannot locate home directory - " "please set the HOME environment variable"); } #endif g.zHome = mprintf("%/", zHome); #ifdef __MINGW32__ /* . filenames give some window systems problems and many apps problems */ zDbName = mprintf("%//_fossil", zHome); #else zDbName = mprintf("%s/.fossil", zHome); #endif if( file_size(zDbName)<1024*3 ){ |
︙ | ︙ |
Changes to src/file.c.
︙ | ︙ | |||
211 212 213 214 215 216 217 218 219 220 221 222 223 224 | ** * removing /./ ** * removing /A/../ ** ** Changes are made in-place. Return the new name length. */ int file_simplify_name(char *z, int n){ int i, j; while( n>1 && z[n-1]=='/' ){ n--; } for(i=j=0; i<n; i++){ if( z[i]=='/' ){ if( z[i+1]=='/' ) continue; if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){ i += 1; continue; | > > > > > | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | ** * removing /./ ** * removing /A/../ ** ** Changes are made in-place. Return the new name length. */ int file_simplify_name(char *z, int n){ int i, j; #ifdef __MINGW32__ for(i=0; i<n; i++){ if( z[i]=='\\' ) z[i] = '/'; } #endif while( n>1 && z[n-1]=='/' ){ n--; } for(i=j=0; i<n; i++){ if( z[i]=='/' ){ if( z[i+1]=='/' ) continue; if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){ i += 1; continue; |
︙ | ︙ | |||
276 277 278 279 280 281 282 283 284 285 286 287 288 289 | blob_zero(&x); for(i=2; i<g.argc; i++){ file_canonical_name(g.argv[i], &x); printf("%s\n", blob_buffer(&x)); blob_reset(&x); } } /* ** Compute a pathname for a file or directory that is relative ** to the current directory. */ void file_relative_name(const char *zOrigName, Blob *pOut){ char *zPath; | > > > > > > > > > > > > > > > > > > > > > > > > > > | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 | blob_zero(&x); for(i=2; i<g.argc; i++){ file_canonical_name(g.argv[i], &x); printf("%s\n", blob_buffer(&x)); blob_reset(&x); } } /* ** Return TRUE if the given filename is canonical. ** ** Canonical names are full pathnames using "/" not "\" and which ** contain no "/./" or "/../" terms. */ int file_is_canonical(const char *z){ int i; if( z[0]!='/' #ifdef __MINGW32__ && (z[0]==0 || z[1]!=':' || z[2]!='/') #endif ) return 0; for(i=0; z[i]; i++){ if( z[i]=='\\' ) return 0; if( z[i]=='/' ){ if( z[i+1]=='.' ){ if( z[i+2]=='/' || z[i+2]==0 ) return 0; if( z[i+2]=='.' && (z[i+3]=='/' || z[i+3]==0) ) return 0; } } } return 1; } /* ** Compute a pathname for a file or directory that is relative ** to the current directory. */ void file_relative_name(const char *zOrigName, Blob *pOut){ char *zPath; |
︙ | ︙ |
Changes to src/info.c.
︙ | ︙ | |||
125 126 127 128 129 130 131 132 133 134 135 136 137 138 | if( g.argc==2 ){ int vid; /* 012345678901234 */ db_record_repository_filename(0); printf("project-name: %s\n", db_get("project-name", "<unnamed>")); printf("repository: %s\n", db_lget("repository", "")); printf("local-root: %s\n", g.zLocalRoot); printf("project-code: %s\n", db_get("project-code", "")); printf("server-code: %s\n", db_get("server-code", "")); vid = db_lget_int("checkout", 0); if( vid==0 ){ printf("checkout: nil\n"); }else{ show_common_info(vid, "checkout:", 1); | > > > > > | 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | if( g.argc==2 ){ int vid; /* 012345678901234 */ db_record_repository_filename(0); printf("project-name: %s\n", db_get("project-name", "<unnamed>")); printf("repository: %s\n", db_lget("repository", "")); printf("local-root: %s\n", g.zLocalRoot); #ifdef __MINGW32__ if( g.zHome ){ printf("user-home: : %s\n", g.zHome); } #endif printf("project-code: %s\n", db_get("project-code", "")); printf("server-code: %s\n", db_get("server-code", "")); vid = db_lget_int("checkout", 0); if( vid==0 ){ printf("checkout: nil\n"); }else{ show_common_info(vid, "checkout:", 1); |
︙ | ︙ |
Changes to src/main.c.
︙ | ︙ | |||
59 60 61 62 63 64 65 66 67 68 69 70 71 72 | sqlite3 *db; /* The connection to the databases */ sqlite3 *dbConfig; /* Separate connection for global_config table */ int useAttach; /* True if global_config is attached to repository */ int configOpen; /* True if the config database is open */ long long int now; /* Seconds since 1970 */ int repositoryOpen; /* True if the main repository database is open */ char *zRepositoryName; /* Name of the repository database */ int localOpen; /* True if the local database is open */ char *zLocalRoot; /* The directory holding the local database */ int minPrefix; /* Number of digits needed for a distinct UUID */ int fSqlTrace; /* True if -sqltrace flag is present */ int fSqlPrint; /* True if -sqlprint flag is present */ int fHttpTrace; /* Trace outbound HTTP requests */ int fNoSync; /* Do not do an autosync even. --nosync */ | > | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | sqlite3 *db; /* The connection to the databases */ sqlite3 *dbConfig; /* Separate connection for global_config table */ int useAttach; /* True if global_config is attached to repository */ int configOpen; /* True if the config database is open */ long long int now; /* Seconds since 1970 */ int repositoryOpen; /* True if the main repository database is open */ char *zRepositoryName; /* Name of the repository database */ const char *zHome; /* Name of user home directory */ int localOpen; /* True if the local database is open */ char *zLocalRoot; /* The directory holding the local database */ int minPrefix; /* Number of digits needed for a distinct UUID */ int fSqlTrace; /* True if -sqltrace flag is present */ int fSqlPrint; /* True if -sqlprint flag is present */ int fHttpTrace; /* Trace outbound HTTP requests */ int fNoSync; /* Do not do an autosync even. --nosync */ |
︙ | ︙ |