@@ -646,18 +646,55 @@
646 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
glob_free(pInclude);
647 647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
glob_free(pExclude);
648 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(&tarball, g.argv[3]);
649 649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&tarball);
650 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check to see if the input string is of the form:
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** checkin-name/filename.ext
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In other words, check to see if the input contains a single '/'
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** character that separates a valid check-in name from a filename.
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the condition is true, return the check-in name and set the
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** input string to be the filename.
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the condition is false, return NULL
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *tar_uuid_from_name(char **pzName){
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zName = *pzName;
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, n;
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=n=0; zName[i]; i++){
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName[i]=='/' ){
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n==0 ) n = i;
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else return 0;
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n==0 ) return 0;
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName[n+1]==0 ) return 0;
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zName[n] = 0;
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pzName = fossil_strdup(&zName[n+1]);
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zName;
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
651 680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
652 681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
653 682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WEBPAGE: tarball
654 683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** URL: /tarball
655 684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
656 685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate a compressed tarball for the check-in specified by the "r"
657 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** query parameter. Return that compressed tarball as the HTTP reply
658 687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** content.
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The r= and name= query parameters can be specified as extensions to the
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** URI. Example, the following URIs are all equivalent:
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** /tarball/release/xyz.tar.gz
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** /tarball?r=release&name=xyz.tar.gz
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** /tarball/xyz.tar.gz?r=release
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** /tarball?name=release/xyz.tar.gz
659 696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
660 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Query parameters:
661 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
662 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name=NAME[.tar.gz] The base name of the output file. The default
663 700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value is a configuration parameter in the project
@@ -665,12 +702,15 @@
665 702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** extension, is used as the top-most directory name.
666 703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
667 704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** r=TAG The check-in that is turned into a compressed tarball.
668 705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Defaults to "trunk". This query parameter used to
669 706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be called "uuid" and "uuid" is still accepted for
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** backwards compatibility. If omitted, the default
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** check-in name is "trunk".
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** backwards compatibility. If the name= query parameter
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains one "/" character then the part before the /
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is the TAG and the part after the / is the true name.
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no TAG is specified by any of the above means, then
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "trunk" is used as the default.
672 712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
673 713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in=PATTERN Only include files that match the comma-separate
674 714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** list of GLOB patterns in PATTERN, as with ex=
675 715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
676 716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ex=PATTERN Omit any file that match PATTERN. PATTERN is a
@@ -691,21 +731,22 @@
691 731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
692 732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
693 733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
694 734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Zip ){ login_needed(g.anon.Zip); return; }
695 735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
load_control();
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName = mprintf("%s", PD("name",""));
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nName = strlen(zName);
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zName = fossil_strdup(PD("name",""));
698 737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = P("r");
699 738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z==0 ) z = P("uuid");
739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ) z = tar_uuid_from_name(&zName);
700 740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z==0 ) z = "trunk";
701 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zOpenRevision = zRid = fossil_strdup(z);
702 742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRid = strlen(zRid);
703 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zInclude = P("in");
704 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zInclude ) pInclude = glob_create(zInclude);
705 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zExclude = P("ex");
706 746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zExclude ) pExclude = glob_create(zExclude);
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nName = strlen(zName);
707 748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nName>7 && fossil_strcmp(&zName[nName-7], ".tar.gz")==0 ){
708 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Special case: Remove the ".tar.gz" suffix. */
709 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nName -= 7;
710 751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName[nName] = 0;
711 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
712 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!