@@ -619,10 +619,24 @@
619 619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
620 620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The basic difference engine is above. What follows is the annotation
621 621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** engine. Both are in the same file since they share many components.
622 622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
623 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Linked list of strings, labels used in the annotator code.
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The elements of the list and the pointed string (str)
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be freed once they become totally unreferenced
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (nref == 0).
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *prev; /* previous element */
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *next; /* next element */
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *str; /* The label string */
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nref; /* Number of references to the string */
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
624 638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
625 639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The status of an annotation operation is recorded by an instance
626 640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the following structure.
627 641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
628 642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Annotator Annotator;
@@ -630,29 +644,31 @@
630 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DContext c; /* The diff-engine context */
631 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AnnLine { /* Lines of the original files... */
632 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z; /* The text of the line */
633 647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
short int n; /* Number of bytes (omitting trailing space and \n) */
634 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
short int iLevel; /* Level at which tag was set */
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSrc; /* Tag showing origin of this line */
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *zSrc; /* Tag showing origin of this line */
636 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} *aOrig;
637 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOrig; /* Number of elements in aOrig[] */
638 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNoSrc; /* Number of entries where aOrig[].zSrc==NULL */
639 653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLevel; /* Current level */
640 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVers; /* Number of versions analyzed */
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char **azVers; /* Names of versions analyzed */
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label **azVers; /* Names of versions analyzed */
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob toAnnotate;
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *firstLabel;
642 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
643 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
644 660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
645 661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize the annotation process by specifying the file that is
646 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be annotated. The annotator takes control of the input Blob and
647 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will release it when it is finished with it.
648 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int annotation_start(Annotator *p, Blob *pInput){
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int annotation_start(Annotator *p){
650 666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
651 667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(p, 0, sizeof(*p));
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->c.aTo = break_into_lines(blob_str(pInput), blob_size(pInput),&p->c.nTo,1);
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->c.aTo = break_into_lines(blob_str(&p->toAnnotate),
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_size(&p->toAnnotate),&p->c.nTo,1);
654 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->c.aTo==0 ){
655 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
656 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
657 673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOrig = fossil_malloc( sizeof(p->aOrig[0])*p->c.nTo );
658 674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->c.nTo; i++){
@@ -669,20 +685,21 @@
669 685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** being annotated. Do another step of the annotation. Return true
670 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if additional annotation is required. zPName is the tag to insert
671 687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on each line of the file being annotated that was contributed by
672 688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pParent. Memory to hold zPName is leaked.
673 689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int annotation_step(Annotator *p, Blob *pParent, char *zPName){
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int annotation_step(Annotator *p, Blob *pParent, struct Label *zPName){
675 691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j;
676 692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lnTo;
677 693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPrevLevel;
678 694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iThisLevel;
679 695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
680 696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Prepare the parent file to be diffed */
681 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->c.aFrom = break_into_lines(blob_str(pParent), blob_size(pParent),
682 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&p->c.nFrom, 1);
683 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->c.aFrom==0 ){
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(p->c.aFrom);
684 701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
685 702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
686 703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
687 704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compute the differences going from pParent to the file being
688 705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** annotated. */
@@ -696,11 +713,24 @@
696 713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iThisLevel = p->iLevel;
697 714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=lnTo=0; i<p->c.nEdit; i+=3){
698 715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AnnLine *x = &p->aOrig[lnTo];
699 716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<p->c.aEdit[i]; j++, lnTo++, x++){
700 717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x->zSrc==0 || x->iLevel==iPrevLevel ){
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (x->zSrc!=0)
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(--x->zSrc->nref == 0)
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(x->zSrc->str);
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (x->zSrc->prev)
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->zSrc->prev->next = x->zSrc->next;
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (x->zSrc->next)
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->zSrc->next->prev = x->zSrc->prev;
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(x->zSrc);
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
701 730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x->zSrc = zPName;
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++zPName->nref;
702 732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x->iLevel = iThisLevel;
703 733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
704 734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
705 735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnTo += p->c.aEdit[i+2];
706 736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -711,11 +741,11 @@
711 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->c.nEdit = 0;
712 742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->c.nEditAlloc = 0;
713 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
714 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Clear out the from file */
715 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(p->c.aFrom);
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_zero(pParent);
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(pParent);
717 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
718 748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Return no errors */
719 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
720 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
721 751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -722,32 +752,49 @@
722 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
723 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
724 754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-annotate-step
725 755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
726 756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_annotate_step_cmd(void){
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob orig, b;
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob b = empty_blob;
728 758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Annotator x;
729 759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
730 760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
731 761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<4 ) usage("RID1 RID2 ...");
732 762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_zero(&b);
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- content_get(name_to_rid(g.argv[2]), &orig);
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( annotation_start(&x, &orig) ){
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&x, 0, sizeof(x));
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x.toAnnotate = empty_blob;
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ content_get(name_to_rid(g.argv[2]), &x.toAnnotate);
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( annotation_start(&x) ){
736 767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("binary file");
737 768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
738 769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=3; i<g.argc; i++){
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *l;
739 771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&b);
740 772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_get(name_to_rid(g.argv[i]), &b);
741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( annotation_step(&x, &b, g.argv[i-1]) ){
773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = fossil_malloc(sizeof(*l));
774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->str = g.argv[i-1];
775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->nref = 0;
776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->next = x.firstLabel;
777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (x.firstLabel)
778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x.firstLabel->prev = l;
779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x.firstLabel = l;
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( annotation_step(&x, &b, l) ){
742 781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("binary file");
743 782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
744 783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
745 784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<x.nOrig; i++){
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSrc = x.aOrig[i].zSrc;
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zSrc = x.aOrig[i].zSrc->str;
747 786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zSrc==0 ) zSrc = g.argv[g.argc-1];
748 787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%10s: %.*s\n", zSrc, x.aOrig[i].n, x.aOrig[i].z);
788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(x.firstLabel) {
790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *l;
791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = x.firstLabel->next;
792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(x.firstLabel->nref > 0);
793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(x.firstLabel->str);
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(x.firstLabel);
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x.firstLabel = l;
749 796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
750 797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
751 798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
752 799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Annotation flags */
753 800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ANN_FILE_VERS 0x001 /* Show file version rather than commit version */
@@ -763,28 +810,28 @@
763 810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mid, /* Use the version of the file in this check-in */
764 811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int webLabel, /* Use web-style annotations if true */
765 812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLimit, /* Limit the number of levels if greater than zero */
766 813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int annFlags /* Flags to alter the annotation */
767 814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob toAnnotate; /* Text of the final (mid) version of the file */
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob step; /* Text of previous revision */
815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob step = empty_blob; /* Text of previous revision */
770 816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid; /* Artifact ID of the file being annotated */
771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zLabel; /* Label to apply to a line */
772 817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q; /* Query returning all ancestor versions */
773 818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
774 819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize the annotation */
775 820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = db_int(0, "SELECT fid FROM mlink WHERE mid=%d AND fnid=%d",mid,fnid);
776 821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid==0 ){
777 822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("file #%d is unchanged in manifest #%d", fnid, mid);
778 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !content_get(rid, &toAnnotate) ){
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(p, 0, sizeof(*p));
825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->toAnnotate = empty_blob;
826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !content_get(rid, &p->toAnnotate) ){
780 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("unable to retrieve content of artifact #%d", rid);
781 828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
782 829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("CREATE TEMP TABLE ok(rid INTEGER PRIMARY KEY)");
783 830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iLimit<=0 ) iLimit = 1000000000;
784 831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
compute_direct_ancestors(mid, iLimit);
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- annotation_start(p, &toAnnotate);
832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ annotation_start(p);
786 833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
787 834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
788 835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT mlink.fid,"
789 836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" (SELECT uuid FROM blob WHERE rid=mlink.%s),"
790 837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" date(event.mtime), "
@@ -802,26 +849,42 @@
802 849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
803 850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pid = db_column_int(&q, 0);
804 851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUuid = db_column_text(&q, 1);
805 852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDate = db_column_text(&q, 2);
806 853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUser = db_column_text(&q, 3);
854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *l = fossil_malloc(sizeof(*l));
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->nref = 0;
856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->next = p->firstLabel;
857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->prev = 0;
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (p->firstLabel)
859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->firstLabel->prev = l;
807 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( webLabel ){
808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLabel = mprintf(
861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->str = mprintf(
809 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"<a href='%s/info/%s' target='infowindow'>%.10s</a> %s %9.9s",
810 863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zTop, zUuid, zUuid, zDate, zUser
811 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
812 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLabel = mprintf("%.10s %s %9.9s", zUuid, zDate, zUser);
866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->str = mprintf("%.10s %s %9.9s", zUuid, zDate, zUser);
814 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->firstLabel = l;
815 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nVers++;
816 870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->azVers = fossil_realloc(p->azVers, p->nVers*sizeof(p->azVers[0]) );
817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->azVers[p->nVers-1] = zLabel;
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->azVers[p->nVers-1] = l;
818 872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_get(pid, &step);
819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- annotation_step(p, &step, zLabel);
873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ annotation_step(p, &step, l);
874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (l->nref == 0)
875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(l->str);
877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->firstLabel = l->next;
878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if (l->next)
879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l->next->prev = 0;
880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(l);
881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
820 882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&step);
821 883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
822 884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(p->c.aTo);
823 886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
824 887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
825 888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
826 889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WEBPAGE: annotate
827 890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -853,23 +916,35 @@
853 916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("log") ){
854 917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
855 918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Versions analyzed:</h2>
856 919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <ol>
857 920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ann.nVers; i++){
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li><tt>%s(ann.azVers[i])</tt></li>
921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li><tt>%s(ann.azVers[i]->str)</tt></li>
859 922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
860 923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </ol>
861 924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <hr>
862 925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Annotation:</h2>
863 926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
864 927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <pre>
865 928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ann.nOrig; i++){
866 929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((char*)ann.aOrig[i].z)[ann.aOrig[i].n] = 0;
867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ %s(ann.aOrig[i].zSrc): %h(ann.aOrig[i].z)
930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %s(ann.aOrig[i].zSrc->str): %h(ann.aOrig[i].z)
868 931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
869 932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </pre>
870 933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_footer();
934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.azVers);
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.aOrig);
937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&ann.toAnnotate);
938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(ann.firstLabel) {
939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *l;
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = ann.firstLabel->next;
941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(ann.firstLabel->nref > 0);
942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.firstLabel->str);
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.firstLabel);
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ann.firstLabel = l;
945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
871 946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
872 947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
873 948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
874 949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: annotate
875 950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -885,11 +960,11 @@
885 960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
886 961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void annotate_cmd(void){
887 962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fnid; /* Filename ID */
888 963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fid; /* File instance ID */
889 964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mid; /* Manifest where file was checked in */
890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob treename; /* FILENAME translated to canonical form */
965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob treename = empty_blob; /* FILENAME translated to canonical form */
891 966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFilename; /* Cannonical filename */
892 967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Annotator ann; /* The annotation of the file */
893 968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Loop counter */
894 969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zLimit; /* The value to the --limit option */
895 970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLimit; /* How far back in time to look */
@@ -914,22 +989,34 @@
914 989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
915 990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fid = db_int(0, "SELECT rid FROM vfile WHERE pathname=%Q", zFilename);
916 991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fid==0 ){
917 992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("not part of current checkout: %s", zFilename);
918 993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&treename);
919 995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mid = db_int(0, "SELECT mid FROM mlink WHERE fid=%d AND fnid=%d", fid, fnid);
920 996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mid==0 ){
921 997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_panic("unable to find manifest");
922 998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
923 999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fileVers ) annFlags |= ANN_FILE_VERS;
924 1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
annotate_file(&ann, fnid, mid, 0, iLimit, annFlags);
925 1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showLog ){
926 1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ann.nVers; i++){
927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("version %3d: %s\n", i+1, ann.azVers[i]);
1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("version %3d: %s\n", i+1, ann.azVers[i]->str);
928 1004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
929 1005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("---------------------------------------------------\n");
930 1006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
931 1007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ann.nOrig; i++){
932 1008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("%s: %.*s\n",
933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ann.aOrig[i].zSrc, ann.aOrig[i].n, ann.aOrig[i].z);
1009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ann.aOrig[i].zSrc->str, ann.aOrig[i].n, ann.aOrig[i].z);
1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.azVers);
1012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.aOrig);
1013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&ann.toAnnotate);
1014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(ann.firstLabel) {
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Label *l;
1016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = ann.firstLabel->next;
1017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(ann.firstLabel->nref > 0);
1018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.firstLabel->str);
1019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(ann.firstLabel);
1020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ann.firstLabel = l;
934 1021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
935 1022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
936 1023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!