any interest in this simple patch?
hmm, on Tue, Feb 07, 2012 at 07:48:30PM +0100, frantisek holop said that > hi there, > > the motivation for this patch was that the zip and tarball links > from the web ui get a filename and checkout "for free", while they > are a mandatory parameters for the command line. > > so i tried to unify it a bit: the default archive name is now both > from web and cli the same, a lowercased project name followed by the > artifact ID. spaces are substituted with '-'. > > $ fossil zip > fossil-030035345c.zip: 2944427 bytes > > $ fossil zip tip > fossil-030035345c.zip: 2944427 bytes > > $ fossil zip -o f.zip > f.zip: 2944427 bytes > > $ fossil zip -o f.zip tip > f.zip: 2944427 bytes > > $ fossil tar > fossil-030035345c.tgz: 2944427 bytes > > $ fossil tar tip > fossil-030035345c.tgz: 2944427 bytes > > $ fossil tar -o f.tgz > f.zip: 2944427 bytes > > $ fossil tar -o f.tgz tip > f.zip: 2944427 bytes > > > $ fossil help zip > Usage: fossil zip [--name DIRECTORY] [-o OUTPUTFILE] > [-R REPOSITORY] [VERSION] > > Generate a ZIP archive containing VERSION of the checkout. > If VERSION is omitted, the current checkout is used. > > The name of the resulting archive can be set using the -o option, > otherwise it will be derived from the project name followed by the > check-in's artifact ID. Unless the --name option is specified, the > the top-level directory inside the archive will have the same name. > > Options: > --name DIRECTORY Name of the top-level directory inside > the archive. > -o OUTPUTFILE Name of the archive. > -R|--repository FILE Use the repository in FILE. > > See also: tarball > > > > --- src/info.c > +++ src/info.c > @@ -500,11 +500,18 @@ > @ <td>%h(zUser) @ %h(zIpAddr) on %s(zDate)</td></tr> > } > db_finalize(&q); > } > if( g.perm.History ){ > - const char *zProjName = db_get("project-name", "unnamed"); > + char *zProjName = db_get("project-name", "unnamed"); > + int i; > + for(i=0; i<strlen(zProjName); i++){ > + zProjName[i] = fossil_tolower(zProjName[i]); > + if( zProjName[i]==' ' ){ > + zProjName[i] = '-'; > + } > + } > @ <tr><th>Timelines:</th><td> > @ <a href="%s(g.zTop)/timeline?f=%S(zUuid)">family</a> > if( zParent ){ > @ | <a href="%s(g.zTop)/timeline?p=%S(zUuid)">ancestors</a> > } > @@ -526,16 +533,14 @@ > @ </td></tr> > @ <tr><th>Other Links:</th> > @ <td> > @ <a href="%s(g.zTop)/dir?ci=%S(zUuid)">files</a> > if( g.perm.Zip ){ > - char *zUrl = mprintf("%s/tarball/%s-%S.tar.gz?uuid=%s", > - g.zTop, zProjName, zUuid, zUuid); > - @ | <a href="%s(zUrl)">Tarball</a> > + @ | <a > href="%s(g.zTop)/tarball/%s(zProjName)-%S(zUuid).tgz=%s(zUuid)"> > + @ Tarball</a> > @ | <a > href="%s(g.zTop)/zip/%s(zProjName)-%S(zUuid).zip?uuid=%s(zUuid)"> > @ ZIP archive</a> > - fossil_free(zUrl); > } > @ | <a href="%s(g.zTop)/artifact/%S(zUuid)">manifest</a> > if( g.perm.Write ){ > @ | <a href="%s(g.zTop)/ci_edit?r=%S(zUuid)">edit</a> > } > > --- src/tar.c > +++ src/tar.c > @@ -525,42 +525,63 @@ > } > > /* > ** COMMAND: tarball* > ** > -** Usage: %fossil tarball VERSION OUTPUTFILE [--name DIRECTORYNAME] > [-R|--repository REPO] > +** Usage: %fossil tarball [--name DIRECTORY] [-o OUTPUTFILE] > +** [-R REPOSITORY] VERSION > +** > +** Generate a compressed tarball archive containing VERSION of the > +** project. If VERSION is omitted, the current checkout is used. > +** > +** The name of the resulting archive can be set using the -o option, > +** otherwise it will be derived from the project name followed by the > +** check-in's artifact ID. Unless the --name option is specified, the > +** the top-level directory inside the archive will have the same name. > +** > +** Options: > +** --name DIRECTORY Name of the top-level directory inside > +** the archive. > +** -o OUTPUTFILE Name of the archive. > +** -R|--repository FILE Use the repository in FILE. > ** > -** Generate a compressed tarball for a specified version. If the --name > -** option is used, its argument becomes the name of the top-level directory > -** in the resulting tarball. If --name is omitted, the top-level directory > -** named is derived from the project name, the check-in date and time, and > -** the artifact ID of the check-in. > +** See also: zip > */ > void tarball_cmd(void){ > int rid; > Blob tarball; > const char *zName; > + const char *fName; > + int wrote; > zName = find_option("name", 0, 1); > + fName = find_option("o", "o", 1); > db_find_and_open_repository(0, 0); > - if( g.argc!=4 ){ > - usage("VERSION OUTPUTFILE"); > + if( g.argc!=2 && g.argc!=3 ){ > + usage("[--name DIRECTORY] [-o OUTPUTFILE] [-R REPOSITORY] [VERSION]"); > } > - rid = name_to_typed_rid(g.argv[2], "ci"); > + if( g.argc==3 ){ > + rid = name_to_typed_rid(g.argv[2], "ci"); > + }else{ > + rid = db_lget_int("checkout",0); > + } > if( zName==0 ){ > - zName = db_text("default-name", > - "SELECT replace(%Q,' ','_') " > - " || strftime('_%%Y-%%m-%%d_%%H%%M%%S_', event.mtime) " > + zName = db_text("unnamed", > + "SELECT lower(replace(%Q,' ','-')) " > + " || '-' " > " || substr(blob.uuid, 1, 10)" > " FROM event, blob" > " WHERE event.objid=%d" > " AND blob.rid=%d", > db_get("project-name", "unnamed"), rid, rid > ); > } > + if( fName==0 ){ > + fName = mprintf("%s.tgz", zName); > + } > tarball_of_checkin(rid, &tarball, zName); > - blob_write_to_file(&tarball, g.argv[3]); > - blob_reset(&tarball); > + wrote = blob_write_to_file(&tarball, fName); > + fossil_print("%s: %d bytes\n", fName, wrote); > } > > /* > ** WEBPAGE: tarball > ** URL: /tarball/RID.tar.gz > @@ -578,16 +599,16 @@ > if( !g.perm.Zip ){ login_needed(); return; } > zName = mprintf("%s", PD("name","")); > nName = strlen(zName); > zRid = mprintf("%s", PD("uuid","")); > nRid = strlen(zRid); > - if( nName>7 && fossil_strcmp(&zName[nName-7], ".tar.gz")==0 ){ > - /* Special case: Remove the ".tar.gz" suffix. */ > - nName -= 7; > + if( nName>4 && fossil_strcmp(&zName[nName-4], ".tgz")==0 ){ > + /* Special case: Remove the ".tgz" suffix. */ > + nName -= 4; > zName[nName] = 0; > }else{ > - /* If the file suffix is not ".tar.gz" then just remove the > + /* If the file suffix is not ".tgz" then just remove the > ** suffix up to and including the last "." */ > for(nName=strlen(zName)-1; nName>5; nName--){ > if( zName[nName]=='.' ){ > zName[nName] = 0; > break; > > --- src/zip.c > +++ src/zip.c > @@ -379,41 +379,63 @@ > } > > /* > ** COMMAND: zip* > ** > -** Usage: %fossil zip VERSION OUTPUTFILE [--name DIRECTORYNAME] > [-R|--repository REPO] > +** Usage: %fossil zip [--name DIRECTORY] [-o OUTPUTFILE] > +** [-R REPOSITORY] [VERSION] > +** > +** Generate a ZIP archive containing VERSION of the checkout. > +** If VERSION is omitted, the current checkout is used. > +** > +** The name of the resulting archive can be set using the -o option, > +** otherwise it will be derived from the project name followed by the > +** check-in's artifact ID. Unless the --name option is specified, the > +** the top-level directory inside the archive will have the same name. > +** > +** Options: > +** --name DIRECTORY Name of the top-level directory inside > +** the archive. > +** -o OUTPUTFILE Name of the archive. > +** -R|--repository FILE Use the repository in FILE. > ** > -** Generate a ZIP archive for a specified version. If the --name option is > -** used, it argument becomes the name of the top-level directory in the > -** resulting ZIP archive. If --name is omitted, the top-level directory > -** named is derived from the project name, the check-in date and time, and > -** the artifact ID of the check-in. > +** See also: tarball > */ > void baseline_zip_cmd(void){ > int rid; > Blob zip; > const char *zName; > + const char *fName; > + int wrote; > zName = find_option("name", 0, 1); > + fName = find_option("o", "o", 1); > db_find_and_open_repository(0, 0); > - if( g.argc!=4 ){ > - usage("VERSION OUTPUTFILE"); > + if( g.argc!=2 && g.argc!=3 ){ > + usage("[--name DIRECTORY] [-o OUTPUTFILE] [-R REPOSITORY] [VERSION]"); > } > - rid = name_to_typed_rid(g.argv[2],"ci"); > + if( g.argc==3 ){ > + rid = name_to_typed_rid(g.argv[2], "ci"); > + }else{ > + rid = db_lget_int("checkout",0); > + } > if( zName==0 ){ > - zName = db_text("default-name", > - "SELECT replace(%Q,' ','_') " > - " || strftime('_%%Y-%%m-%%d_%%H%%M%%S_', event.mtime) " > + zName = db_text("unnamed", > + "SELECT lower(replace(%Q,' ','-')) " > + " || '-' " > " || substr(blob.uuid, 1, 10)" > " FROM event, blob" > " WHERE event.objid=%d" > " AND blob.rid=%d", > db_get("project-name", "unnamed"), rid, rid > ); > } > + if( fName==0 ){ > + fName = mprintf("%s.zip", zName); > + } > zip_of_baseline(rid, &zip, zName); > - blob_write_to_file(&zip, g.argv[3]); > + wrote = blob_write_to_file(&zip, fName); > + fossil_print("%s: %d bytes\n", fName, wrote); > } > > /* > ** WEBPAGE: zip > ** URL: /zip/RID.zip > > > -- > Introibo ad altare Dei. > _______________________________________________ > fossil-users mailing list > fossil-users@lists.fossil-scm.org > http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users -- the devil can cite scripture for his purpose. _______________________________________________ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users