@@ -113,10 +113,11 @@
113 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nEditAlloc; /* Space allocated for aEdit[] */
114 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *aFrom; /* File on left side of the diff */
115 115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFrom; /* Number of lines in aFrom[] */
116 116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *aTo; /* File on right side of the diff */
117 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTo; /* Number of lines in aTo[] */
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*same_fn)(const DLine *, const DLine *); /* Function to be used for comparing */
118 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
119 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
121 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return an array of DLine objects containing a pointer to the
122 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** start of each line and a hash of that line. The lower
@@ -175,16 +176,26 @@
175 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s = 0;
176 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_IGNORE_EOLWS ){
177 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( k>0 && fossil_isspace(z[k-1]) ){ k--; }
178 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
179 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (diffFlags & DIFF_IGNORE_ALLWS)==DIFF_IGNORE_ALLWS ){
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int numws = 0;
180 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( s<k && fossil_isspace(z[s]) ){ s++; }
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(h=0, x=s; x<k; x++){
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_isspace(z[x]) ){
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++numws;
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = h ^ (h<<2) ^ z[x];
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ k -= numws;
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(h=0, x=s; x<k; x++){
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = h ^ (h<<2) ^ z[x];
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
181 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
182 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[i].indent = s;
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(h=0, x=s; x<k; x++){
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- h = h ^ (h<<2) ^ z[x];
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
186 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[i].h = h = (h<<LENGTH_MASK_SZ) | (k-s);
187 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h2 = h % nLine;
188 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[i].iNext = a[h2].iHash;
189 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[h2].iHash = i+1;
190 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z += j+1;
@@ -196,13 +207,31 @@
196 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
197 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
198 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
199 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if two DLine elements are identical.
200 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int same_dline(DLine *pA, DLine *pB){
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return pA->h==pB->h && memcmp(pA->z+pA->indent,pB->z+pB->indent,
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pA->h & LENGTH_MASK)==0;
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int same_dline(const DLine *pA, const DLine *pB){
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pA->h==pB->h && memcmp(pA->z,pB->z, pA->h&LENGTH_MASK)==0;
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if two DLine elements are identical, ignoring
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all whitespace. The indent field of pA/pB already points
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the first non-space character in the string.
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int same_dline_ignore_allws(const DLine *pA, const DLine *pB){
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int a = pA->indent, b = pB->indent;
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pA->h==pB->h ){
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( a<pA->n && b<pB->n ){
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pA->z[a++] != pB->z[b++] ) return 0;
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( a<pA->n && fossil_isspace(pA->z[a])) ++a;
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( b<pB->n && fossil_isspace(pB->z[b])) ++b;
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pA->n-a == b<pB->n-b;
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
204 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
205 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
206 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
207 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the regular expression *pRe matches any of the
208 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** N dlines
@@ -1354,16 +1383,16 @@
1354 1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSXb = iS1; /* Best match so far */
1355 1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSYb = iS2; /* Best match so far */
1356 1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1357 1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=iS1; i<iE1-mxLength; i++){
1358 1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=iS2; j<iE2-mxLength; j++){
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !same_dline(&p->aFrom[i], &p->aTo[j]) ) continue;
1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( mxLength && !same_dline(&p->aFrom[i+mxLength], &p->aTo[j+mxLength]) ){
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !p->same_fn(&p->aFrom[i], &p->aTo[j]) ) continue;
1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( mxLength && !p->same_fn(&p->aFrom[i+mxLength], &p->aTo[j+mxLength]) ){
1361 1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
1362 1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1363 1392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = 1;
1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i+k<iE1 && j+k<iE2 && same_dline(&p->aFrom[i+k],&p->aTo[j+k]) ){
1393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i+k<iE1 && j+k<iE2 && p->same_fn(&p->aFrom[i+k],&p->aTo[j+k]) ){
1365 1394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k++;
1366 1395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1367 1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( k>mxLength ){
1368 1397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSXb = i;
1369 1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSYb = j;
@@ -1425,11 +1454,11 @@
1425 1454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mid = (iE1 + iS1)/2;
1426 1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=iS1; i<iE1; i++){
1427 1456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int limit = 0;
1428 1457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = p->aTo[p->aFrom[i].h % p->nTo].iHash;
1429 1458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( j>0
1430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (j-1<iS2 || j>=iE2 || !same_dline(&p->aFrom[i], &p->aTo[j-1]))
1459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (j-1<iS2 || j>=iE2 || !p->same_fn(&p->aFrom[i], &p->aTo[j-1]))
1431 1460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1432 1461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( limit++ > 10 ){
1433 1462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = 0;
1434 1463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1435 1464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1442,19 +1471,19 @@
1442 1471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSX = i;
1443 1472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSY = j-1;
1444 1473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pA = &p->aFrom[iSX-1];
1445 1474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pB = &p->aTo[iSY-1];
1446 1475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = minInt(iSX-iS1, iSY-iS2);
1447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(k=0; k<n && same_dline(pA,pB); k++, pA--, pB--){}
1476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(k=0; k<n && p->same_fn(pA,pB); k++, pA--, pB--){}
1448 1477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSX -= k;
1449 1478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSY -= k;
1450 1479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEX = i+1;
1451 1480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEY = j;
1452 1481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pA = &p->aFrom[iEX];
1453 1482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pB = &p->aTo[iEY];
1454 1483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = minInt(iE1-iEX, iE2-iEY);
1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(k=0; k<n && same_dline(pA,pB); k++, pA++, pB++){}
1484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(k=0; k<n && p->same_fn(pA,pB); k++, pA++, pB++){}
1456 1485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEX += k;
1457 1486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iEY += k;
1458 1487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
skew = (iSX-iS1) - (iSY-iS2);
1459 1488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( skew<0 ) skew = -skew;
1460 1489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dist = (iSX+iEX)/2 - mid;
@@ -1591,16 +1620,16 @@
1591 1620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mnE, iS, iE1, iE2;
1592 1621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1593 1622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Carve off the common header and footer */
1594 1623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iE1 = p->nFrom;
1595 1624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iE2 = p->nTo;
1596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( iE1>0 && iE2>0 && same_dline(&p->aFrom[iE1-1], &p->aTo[iE2-1]) ){
1625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( iE1>0 && iE2>0 && p->same_fn(&p->aFrom[iE1-1], &p->aTo[iE2-1]) ){
1597 1626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iE1--;
1598 1627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iE2--;
1599 1628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1600 1629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mnE = iE1<iE2 ? iE1 : iE2;
1601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(iS=0; iS<mnE && same_dline(&p->aFrom[iS],&p->aTo[iS]); iS++){}
1630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iS=0; iS<mnE && p->same_fn(&p->aFrom[iS],&p->aTo[iS]); iS++){}
1602 1631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1603 1632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* do the difference */
1604 1633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iS>0 ){
1605 1634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
appendTriple(p, iS, 0, 0);
1606 1635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1665,11 +1694,11 @@
1665 1694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1666 1695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shift insertions toward the beginning of the file */
1667 1696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( cpy>0 && del==0 && ins>0 ){
1668 1697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pTop = &p->aFrom[lnFrom-1]; /* Line before start of insert */
1669 1698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pBtm = &p->aTo[lnTo+ins-1]; /* Last line inserted */
1670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( same_dline(pTop, pBtm)==0 ) break;
1699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->same_fn(pTop, pBtm)==0 ) break;
1671 1700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( LENGTH(pTop+1)+LENGTH(pBtm)<=LENGTH(pTop)+LENGTH(pBtm-1) ) break;
1672 1701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnFrom--;
1673 1702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnTo--;
1674 1703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r]--;
1675 1704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r+3]++;
@@ -1678,11 +1707,11 @@
1678 1707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1679 1708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shift insertions toward the end of the file */
1680 1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( r+3<p->nEdit && p->aEdit[r+3]>0 && del==0 && ins>0 ){
1681 1710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pTop = &p->aTo[lnTo]; /* First line inserted */
1682 1711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pBtm = &p->aTo[lnTo+ins]; /* First line past end of insert */
1683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( same_dline(pTop, pBtm)==0 ) break;
1712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->same_fn(pTop, pBtm)==0 ) break;
1684 1713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( LENGTH(pTop)+LENGTH(pBtm-1)<=LENGTH(pTop+1)+LENGTH(pBtm) ) break;
1685 1714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnFrom++;
1686 1715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnTo++;
1687 1716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r]++;
1688 1717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r+3]--;
@@ -1691,11 +1720,11 @@
1691 1720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1692 1721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shift deletions toward the beginning of the file */
1693 1722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( cpy>0 && del>0 && ins==0 ){
1694 1723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pTop = &p->aFrom[lnFrom-1]; /* Line before start of delete */
1695 1724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pBtm = &p->aFrom[lnFrom+del-1]; /* Last line deleted */
1696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( same_dline(pTop, pBtm)==0 ) break;
1725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->same_fn(pTop, pBtm)==0 ) break;
1697 1726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( LENGTH(pTop+1)+LENGTH(pBtm)<=LENGTH(pTop)+LENGTH(pBtm-1) ) break;
1698 1727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnFrom--;
1699 1728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnTo--;
1700 1729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r]--;
1701 1730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r+3]++;
@@ -1704,11 +1733,11 @@
1704 1733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1705 1734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shift deletions toward the end of the file */
1706 1735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( r+3<p->nEdit && p->aEdit[r+3]>0 && del>0 && ins==0 ){
1707 1736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pTop = &p->aFrom[lnFrom]; /* First line deleted */
1708 1737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DLine *pBtm = &p->aFrom[lnFrom+del]; /* First line past end of delete */
1709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( same_dline(pTop, pBtm)==0 ) break;
1738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->same_fn(pTop, pBtm)==0 ) break;
1710 1739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( LENGTH(pTop)+LENGTH(pBtm-1)<=LENGTH(pTop)+LENGTH(pBtm) ) break;
1711 1740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnFrom++;
1712 1741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lnTo++;
1713 1742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r]++;
1714 1743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aEdit[r+3]--;
@@ -1784,10 +1813,15 @@
1784 1813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_to_utf8_no_bom(pA_Blob, 0);
1785 1814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_to_utf8_no_bom(pB_Blob, 0);
1786 1815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1787 1816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Prepare the input files */
1788 1817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&c, 0, sizeof(c));
1818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (diffFlags & DIFF_IGNORE_ALLWS)==DIFF_IGNORE_ALLWS ){
1819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c.same_fn = same_dline_ignore_allws;
1820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c.same_fn = same_dline;
1822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1789 1823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c.aFrom = break_into_lines(blob_str(pA_Blob), blob_size(pA_Blob),
1790 1824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&c.nFrom, diffFlags);
1791 1825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c.aTo = break_into_lines(blob_str(pB_Blob), blob_size(pB_Blob),
1792 1826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&c.nTo, diffFlags);
1793 1827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c.aFrom==0 || c.aTo==0 ){
@@ -1854,20 +1888,30 @@
1854 1888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -c|--context N N lines of context. DIFF_CONTEXT_MASK
1855 1889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --html Format for HTML DIFF_HTML
1856 1890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --invert Invert the diff DIFF_INVERT
1857 1891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -n|--linenum Show line numbers DIFF_LINENO
1858 1892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --noopt Disable optimization DIFF_NOOPT
1893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --strip-trailing-cr Strip trailing CR DIFF_STRIP_EOLCR
1859 1894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --unified Unified diff. ~DIFF_SIDEBYSIDE
1860 1895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -w|--ignore-all-space Ignore all whitespaces DIFF_IGNORE_ALLWS
1861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** --width|-W N N character lines. DIFF_WIDTH_MASK
1896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -W|--width N N character lines. DIFF_WIDTH_MASK
1862 1897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -y|--side-by-side Side-by-side diff. DIFF_SIDEBYSIDE
1863 1898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -Z|--ignore-trailing-space Ignore eol-whitespaces DIFF_IGNORE_EOLWS
1864 1899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1865 1900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diff_options(void){
1866 1901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags = 0;
1867 1902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
1868 1903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int f;
1904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("ignore-trailing-space","Z",0)!=0 ){
1905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags = DIFF_IGNORE_EOLWS;
1906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("ignore-all-space","w",0)!=0 ){
1908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags = DIFF_IGNORE_ALLWS; /* stronger than DIFF_IGNORE_EOLWS */
1909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("strip-trailing-cr",0,0)!=0 ){
1911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags |= DIFF_STRIP_EOLCR;
1912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1869 1913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("side-by-side","y",0)!=0 ) diffFlags |= DIFF_SIDEBYSIDE;
1870 1914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("unified",0,0)!=0 ) diffFlags &= ~DIFF_SIDEBYSIDE;
1871 1915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (z = find_option("context","c",1))!=0 && (f = atoi(z))>=0 ){
1872 1916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( f > DIFF_CONTEXT_MASK ) f = DIFF_CONTEXT_MASK;
1873 1917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diffFlags |= f + DIFF_CONTEXT_EX;
@@ -1876,12 +1920,10 @@
1876 1920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f *= DIFF_CONTEXT_MASK+1;
1877 1921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( f > DIFF_WIDTH_MASK ) f = DIFF_CONTEXT_MASK;
1878 1922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diffFlags |= f;
1879 1923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1880 1924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("html",0,0)!=0 ) diffFlags |= DIFF_HTML;
1881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("ignore-trailing-space","Z",0)!=0 ) diffFlags |= DIFF_IGNORE_EOLWS;
1882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("ignore-all-space","w",0)!=0 ) diffFlags |= DIFF_IGNORE_ALLWS;
1883 1925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO;
1884 1926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT;
1885 1927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT;
1886 1928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF;
1887 1929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return diffFlags;
@@ -1984,10 +2026,15 @@
1984 2026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1985 2027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int annotation_start(Annotator *p, Blob *pInput, u64 diffFlags){
1986 2028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
1987 2029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1988 2030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(p, 0, sizeof(*p));
2031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (diffFlags & DIFF_IGNORE_ALLWS)==DIFF_IGNORE_ALLWS ){
2032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->c.same_fn = same_dline_ignore_allws;
2033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->c.same_fn = same_dline;
2035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1989 2036 { 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,
1990 2037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diffFlags);
1991 2038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->c.aTo==0 ){
1992 2039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
1993 2040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2353,12 +2400,12 @@
2353 2400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2354 2401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Options:
2355 2402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --filevers Show file version numbers rather than check-in versions
2356 2403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -l|--log List all versions analyzed
2357 2404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -n|--limit N Only look backwards in time by N versions
2358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** -Z|--ignore-trailing-space Ignore eol-whitespaces
2359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** -w|--ignore-all-space Ignore all whitespaces
2405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -w|--ignore-all-space Ignore white space when comparing lines
2406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -Z|--ignore-trailing-space Ignore whitespace at line end
2360 2407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2361 2408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: info, finfo, timeline
2362 2409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2363 2410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void annotate_cmd(void){
2364 2411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fnid; /* Filename ID */
@@ -2379,12 +2426,16 @@
2379 2426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bBlame = g.argv[1][0]!='a';
2380 2427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zLimit = find_option("limit","n",1);
2381 2428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zLimit==0 || zLimit[0]==0 ) zLimit = "-1";
2382 2429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLimit = atoi(zLimit);
2383 2430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
showLog = find_option("log","l",0)!=0;
2384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("ignore-trailing-space","Z",0)!=0 ) annFlags |= DIFF_IGNORE_EOLWS;
2385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( find_option("ignore-all-space","w",0)!=0 ) annFlags |= DIFF_IGNORE_ALLWS;
2431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("ignore-trailing-space","Z",0)!=0 ){
2432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ annFlags = DIFF_IGNORE_EOLWS;
2433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("ignore-all-space","w",0)!=0 ){
2435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ annFlags = DIFF_IGNORE_ALLWS; /* stronger than DIFF_IGNORE_EOLWS */
2436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2386 2437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fileVers = find_option("filevers",0,0)!=0;
2387 2438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
2388 2439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<3 ) {
2389 2440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("FILENAME");
2390 2441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2391 2442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!