@@ -630,68 +630,100 @@
630 630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&dirsList);
631 631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zEmptyDirs);
632 632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
633 633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
634 634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Get the contents of a file within the check-in "revision". If
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** revision==NULL then get the file content for the current checkout.
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int historical_version_of_file(
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *revision, /* The check-in containing the file */
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *file, /* Full treename of the file */
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob *content, /* Put the content here */
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pIsLink, /* Set to true if file is link. */
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pIsExe, /* Set to true if file is executable */
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pIsBin, /* Set to true if file is binary */
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int errCode /* Error code if file not found. Panic if <= 0. */
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Manifest *pManifest;
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ManifestFile *pFile;
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rid=0;
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( revision ){
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = name_to_typed_rid(revision,"ci");
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( !g.localOpen ){
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = name_to_typed_rid(db_get("main-branch","trunk"),"ci");
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = db_lget_int("checkout", 0);
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( !is_a_version(rid) ){
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( errCode>0 ) return errCode;
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_fatal("no such check-in: %s", revision);
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pManifest = manifest_get(rid, CFTYPE_MANIFEST, 0);
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pManifest ){
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile = manifest_file_find(pManifest, file);
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile ){
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = uuid_to_rid(pFile->zUuid, 0);
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIsExe ) *pIsExe = ( manifest_file_mperm(pFile)==PERM_EXE );
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIsLink ) *pIsLink = ( manifest_file_mperm(pFile)==PERM_LNK );
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- manifest_destroy(pManifest);
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = content_get(rid, content);
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc && pIsBin ){
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pIsBin = looks_like_binary(content);
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- manifest_destroy(pManifest);
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( errCode<=0 ){
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_fatal("file %s does not exist in check-in: %s", file, revision);
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( errCode<=0 ){
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( revision==0 ){
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- revision = db_text("current", "SELECT uuid FROM blob WHERE rid=%d", rid);
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_fatal("could not parse manifest for check-in: %s", revision);
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return errCode;
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Get the manifest record for a given revision, or the current checkout if
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zRevision is NULL.
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *historical_manifest(
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zRevision /* The check-in to query, or NULL for current */
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int vid;
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pManifest;
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine the check-in manifest artifact ID. Panic on failure. */
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRevision ){
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vid = name_to_typed_rid(zRevision, "ci");
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( !g.localOpen ){
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vid = name_to_typed_rid(db_get("main-branch", "trunk"), "ci");
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vid = db_lget_int("checkout", 0);
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !is_a_version(vid) ){
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRevision ){
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("checkout artifact is not a check-in: %s", zRevision);
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("invalid checkout artifact ID: %d", vid);
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Parse the manifest, given its artifact ID. Panic on failure. */
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !(pManifest = manifest_get(vid, CFTYPE_MANIFEST, 0)) ){
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRevision ){
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("could not parse manifest for check-in: %s", zRevision);
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("could not parse manifest for current checkout");
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return the manifest pointer. The caller must use manifest_destroy() to
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * clean up when finished using the manifest. */
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pManifest;
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Get the contents of a file within the check-in "zRevision". If
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zRevision==NULL then get the file content for the current checkout.
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int historical_blob(
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zRevision, /* The check-in containing the file */
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFile, /* Full treename of the file */
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pBlob, /* Put the content here */
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fatal /* If nonzero, panic if file/artifact not found */
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int result = 0;
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Get the manifest for the requested check-in version. This call unavoidably
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * panics on failure even if fatal is not set. */
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pManifest = historical_manifest(zRevision);
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Try to find the file record within the manifest. */
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ManifestFile *pFile = manifest_file_find(pManifest, zFile);
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pFile ){
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Process file-not-found errors. */
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fatal ){
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRevision ){
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("file %s does not exist in check-in %s", zFile, zRevision);
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("no such file: %s", zFile);
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Get the file's contents. */
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ result = content_get(fast_uuid_to_rid(pFile->zUuid), pBlob);
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Process artifact-not-found errors. */
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !result && fatal ){
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRevision ){
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("missing artifact %s for file %s in check-in %s",
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->zUuid, zFile, zRevision);
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_fatal("missing artifact %s for file %s", pFile->zUuid, zFile);
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Deallocate the parsed manifest structure. */
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ manifest_destroy(pManifest);
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return 1 on success and (assuming fatal is not set) 0 if not found. */
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return result;
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
693 725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
694 726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
695 727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: revert
696 728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
697 729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: %fossil revert ?-r REVISION? ?FILE ...?
@@ -712,15 +744,18 @@
712 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -r REVISION revert given FILE(s) back to given REVISION
713 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
714 746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: redo, undo, update
715 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
716 748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void revert_cmd(void){
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zFile;
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zRevision;
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob record;
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pCoManifest; /* Manifest of current checkout */
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Manifest *pRvManifest; /* Manifest of selected revert version */
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ManifestFile *pCoFile; /* File within current checkout manifest */
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ManifestFile *pRvFile; /* File within revert version manifest */
753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFile; /* Filename relative to checkout root */
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zRevision; /* Selected revert version, NULL if current */
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob record = BLOB_INITIALIZER; /* Contents of each reverted file */
720 756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int errCode;
722 757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
723 758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
724 759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
undo_capture_command_line();
725 760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zRevision = find_option("revision", "r", 1);
726 761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
verify_all_options();
@@ -730,10 +765,15 @@
730 765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
731 766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRevision && g.argc<3 ){
732 767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("the --revision option does not work for the entire tree");
733 768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
734 769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Get manifests of revert version and (if different) current checkout. */
772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRvManifest = historical_manifest(zRevision);
773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCoManifest = zRevision ? historical_manifest(0) : 0;
774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
735 775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
736 776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
undo_begin();
737 777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("CREATE TEMP TABLE torevert(name UNIQUE);");
738 778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
739 779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc>2 ){
@@ -775,18 +815,15 @@
775 815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRevision==0 ){
776 816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int vid = db_lget_int("checkout", 0);
777 817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
778 818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
779 819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isExe = 0;
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isLink = 0;
782 820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFull;
783 821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFile = db_column_text(&q, 0);
784 822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFull = mprintf("%/%/", g.zLocalRoot, zFile);
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- errCode = historical_version_of_file(zRevision, zFile, &record,
786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &isLink, &isExe, 0, 2);
787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( errCode==2 ){
823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRvFile = manifest_file_find(pRvManifest, zFile);
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pRvFile ){
788 825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db_int(0, "SELECT rid FROM vfile WHERE pathname=%Q OR origname=%Q",
789 826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFile, zFile)==0 ){
790 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("UNMANAGE %s\n", zFile);
791 828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
792 829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
undo_save(zFile);
@@ -800,31 +837,47 @@
800 837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM vfile WHERE pathname=%Q",
801 838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFile, zFile
802 839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
803 840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
804 841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 mtime;
842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rvChnged = 0;
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rvPerm = manifest_file_mperm(pRvFile);
844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine if reverted-to file is different than checked out file. */
846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCoManifest && (pCoFile = manifest_file_find(pCoManifest, zFile)) ){
847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rvChnged = manifest_file_mperm(pRvFile)!=rvPerm
848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || fossil_strcmp(pRvFile->zUuid, pCoFile->zUuid)!=0;
849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Get contents of reverted-to file. */
852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ content_get(fast_uuid_to_rid(pRvFile->zUuid), &record);
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
805 854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
undo_save(zFile);
806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( file_wd_size(zFull)>=0 && (isLink || file_wd_islink(0)) ){
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( file_wd_size(zFull)>=0 && (rvPerm==PERM_LNK || file_wd_islink(0)) ){
807 856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_delete(zFull);
808 857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isLink ){
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rvPerm==PERM_LNK ){
810 859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
symlink_create(blob_str(&record), zFull);
811 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
812 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(&record, zFull);
813 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- file_wd_setexe(zFull, isExe);
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ file_wd_setexe(zFull, rvPerm==PERM_EXE);
815 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("REVERT %s\n", zFile);
816 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mtime = file_wd_mtime(zFull);
817 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
818 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"UPDATE vfile"
819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " SET mtime=%lld, chnged=0, deleted=0, isexe=%d, islink=%d,mrid=rid"
868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " SET mtime=%lld, chnged=%d, deleted=0, isexe=%d, islink=%d,mrid=rid"
820 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE pathname=%Q OR origname=%Q",
821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mtime, isExe, isLink, zFile, zFile
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mtime, rvChnged, rvPerm==PERM_EXE, rvPerm==PERM_LNK, zFile, zFile
822 871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
823 872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
824 873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&record);
825 874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zFull);
826 875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
827 876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
828 877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
undo_finish();
829 878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Deallocate parsed manifest structures. */
881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ manifest_destroy(pRvManifest);
882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ manifest_destroy(pCoManifest);
830 883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
831 884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!