From: Michael Haggerty <mhagger@alum.mit.edu>
To: git@vger.kernel.org
Cc: "Stefan Beller" <sbeller@google.com>,
"Junio C Hamano" <gitster@pobox.com>, "Jeff King" <peff@peff.net>,
"Jakub Narębski" <jnareb@gmail.com>,
"Jacob Keller" <jacob.keller@gmail.com>,
"Michael Haggerty" <mhagger@alum.mit.edu>
Subject: [PATCH 3/8] xdl_change_compact(): rename i to end
Date: Thu, 4 Aug 2016 00:00:31 +0200 [thread overview]
Message-ID: <625e39916051e2ea5e09e1c0d3c4f6c25e61302d.1470259583.git.mhagger@alum.mit.edu> (raw)
In-Reply-To: <cover.1470259583.git.mhagger@alum.mit.edu>
Rename i to end, and alternate between using start and end as the
indexing variable as appropriate.
Rename ixref to end_matching_other.
Add some more comments.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
xdiff/xdiffi.c | 70 ++++++++++++++++++++++++++++++++--------------------------
1 file changed, 39 insertions(+), 31 deletions(-)
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c
index a0a485c..0f235bc 100644
--- a/xdiff/xdiffi.c
+++ b/xdiff/xdiffi.c
@@ -414,7 +414,7 @@ static int recs_match(xrecord_t **recs, long ixs, long ix, long flags)
}
int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
- long i, io, start, ixref, groupsize, nrec = xdf->nrec;
+ long start, end, io, end_matching_other, groupsize, nrec = xdf->nrec;
char *rchg = xdf->rchg, *rchgo = xdfo->rchg;
unsigned int blank_lines;
xrecord_t **recs = xdf->recs;
@@ -424,7 +424,8 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* change groups for a consistent and pretty diff output. This also
* helps in finding joinable change groups and reduce the diff size.
*/
- for (i = io = 0;;) {
+ end = io = 0;
+ while (1) {
/*
* Find the first changed line in the to-be-compacted file.
* We need to keep track of both indexes, so if we find a
@@ -434,7 +435,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* not need index bounding since the array is prepared with
* a zero at position -1 and N.
*/
- for (; i < nrec && !rchg[i]; i++) {
+ for (start = end; start < nrec && !rchg[start]; start++) {
/* skip over any changed lines in the other file... */
while (rchgo[io])
io++;
@@ -442,24 +443,29 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
/* ...plus one non-changed line. */
io++;
}
- if (i == nrec)
+ if (start == nrec)
break;
/*
- * Record the start of a changed-group in the to-be-compacted file
- * and find the end of it, on both to-be-compacted and other file
- * indexes (i and io).
+ * That's the start of a changed-group in the to-be-compacted
+ * file. Now find its end.
*/
- start = i++;
-
- while (rchg[i])
- i++;
+ end = start + 1;
+ while (rchg[end])
+ end++;
while (rchgo[io])
io++;
+ /*
+ * Now shift the change up and then down as far as possible in
+ * each direction. If it bumps into any other changes, merge them.
+ * If there are any changes in the other file that this change
+ * could line up with, set end_matching_other to the end position
+ * of this change that would leave them aligned.
+ */
do {
- groupsize = i - start;
+ groupsize = end - start;
/*
* Are there any blank lines that could appear as the last
@@ -472,9 +478,9 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* to the last line of the current change group, shift the
* group backward.
*/
- while (start > 0 && recs_match(recs, start - 1, i - 1, flags)) {
+ while (start > 0 && recs_match(recs, start - 1, end - 1, flags)) {
rchg[--start] = 1;
- rchg[--i] = 0;
+ rchg[--end] = 0;
/*
* This change might have joined two change groups.
@@ -501,13 +507,13 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* the other file. Record the end-of-group
* position:
*/
- ixref = i;
+ end_matching_other = end;
} else {
/*
* Otherwise, set a value to signify that there
* are no matched changes in the other file:
*/
- ixref = nrec;
+ end_matching_other = -1;
}
/*
@@ -515,11 +521,11 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* of the current change group is equal to the line after
* the current change group.
*/
- while (i < nrec && recs_match(recs, start, i, flags)) {
- blank_lines += is_blank_line(recs, i, flags);
+ while (end < nrec && recs_match(recs, start, end, flags)) {
+ blank_lines += is_blank_line(recs, end, flags);
rchg[start++] = 0;
- rchg[i++] = 1;
+ rchg[end++] = 1;
/*
* This change might have joined two change
@@ -529,29 +535,31 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
* are shifting together with a corresponding
* group of changes in the other file.
*/
- while (rchg[i])
- i++;
+ while (rchg[end])
+ end++;
io++;
if (rchgo[io]) {
- ixref = i;
+ end_matching_other = end;
while (rchgo[io])
io++;
}
}
- } while (groupsize != i - start);
+ } while (groupsize != end - start);
/*
* Try to move back the possibly merged group of changes, to match
* the recorded position in the other file.
*/
- while (ixref < i) {
- rchg[--start] = 1;
- rchg[--i] = 0;
+ if (end_matching_other != -1) {
+ while (end_matching_other < end) {
+ rchg[--start] = 1;
+ rchg[--end] = 0;
- io--;
- while (rchgo[io])
io--;
+ while (rchgo[io])
+ io--;
+ }
}
/*
@@ -564,10 +572,10 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
*/
if ((flags & XDF_COMPACTION_HEURISTIC) && blank_lines) {
while (start > 0 &&
- !is_blank_line(recs, i - 1, flags) &&
- recs_match(recs, start - 1, i - 1, flags)) {
+ !is_blank_line(recs, end - 1, flags) &&
+ recs_match(recs, start - 1, end - 1, flags)) {
rchg[--start] = 1;
- rchg[--i] = 0;
+ rchg[--end] = 0;
}
}
}
--
2.8.1
next prev parent reply other threads:[~2016-08-03 22:08 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-03 22:00 [PATCH 0/8] Better heuristics make prettier diffs Michael Haggerty
2016-08-03 22:00 ` [PATCH 1/8] xdl_change_compact(): rename some local variables for clarity Michael Haggerty
2016-08-04 7:06 ` Jeff King
2016-08-04 18:24 ` Junio C Hamano
2016-08-13 19:38 ` Michael Haggerty
2016-08-14 12:26 ` Jeff King
2016-08-03 22:00 ` [PATCH 2/8] xdl_change_compact(): clarify code Michael Haggerty
2016-08-03 22:11 ` Stefan Beller
2016-08-03 23:14 ` Michael Haggerty
2016-08-03 23:50 ` Stefan Beller
2016-08-04 7:13 ` Jeff King
2016-08-10 16:39 ` Michael Haggerty
2016-08-10 16:58 ` Stefan Beller
2016-08-03 22:00 ` Michael Haggerty [this message]
2016-08-04 7:16 ` [PATCH 3/8] xdl_change_compact(): rename i to end Jeff King
2016-08-03 22:00 ` [PATCH 4/8] xdl_change_compact(): do one final shift or the other, not both Michael Haggerty
2016-08-03 22:00 ` [PATCH 5/8] xdl_change_compact(): fix compaction heuristic to adjust io Michael Haggerty
2016-08-04 7:27 ` Jeff King
2016-08-10 16:58 ` Michael Haggerty
2016-08-10 17:09 ` Michael Haggerty
2016-08-11 4:16 ` Jeff King
2016-08-04 18:43 ` Junio C Hamano
2016-08-10 17:13 ` Michael Haggerty
2016-08-03 22:00 ` [PATCH 6/8] xdl_change_compact(): keep track of the earliest end Michael Haggerty
2016-08-04 18:46 ` Junio C Hamano
2016-08-10 17:16 ` Michael Haggerty
2016-08-03 22:00 ` [PATCH 7/8] is_blank_line: take a single xrecord_t as argument Michael Haggerty
2016-08-04 18:48 ` Junio C Hamano
2016-08-03 22:00 ` [PATCH 8/8] diff: improve positioning of add/delete blocks in diffs Michael Haggerty
2016-08-03 22:29 ` Jacob Keller
2016-08-03 22:36 ` Michael Haggerty
2016-08-04 4:47 ` Jacob Keller
2016-08-04 19:39 ` Junio C Hamano
2016-08-10 19:01 ` Michael Haggerty
2016-08-10 21:28 ` Junio C Hamano
2016-08-03 22:30 ` Stefan Beller
2016-08-03 22:41 ` Michael Haggerty
2016-08-03 22:51 ` Stefan Beller
2016-08-03 23:30 ` Michael Haggerty
2016-08-04 0:04 ` Stefan Beller
2016-08-10 19:12 ` Michael Haggerty
2016-08-04 7:56 ` Jeff King
2016-08-04 16:55 ` Stefan Beller
2016-08-04 19:47 ` Junio C Hamano
2016-08-13 0:09 ` Michael Haggerty
2016-08-12 23:25 ` Michael Haggerty
2016-08-13 8:59 ` Jeff King
2016-08-13 15:59 ` Junio C Hamano
2016-08-14 7:21 ` Jacob Keller
2016-08-15 6:33 ` Stefan Beller
2016-08-15 20:24 ` Junio C Hamano
2016-08-04 19:52 ` Junio C Hamano
2016-08-13 0:11 ` Michael Haggerty
2016-08-03 22:08 ` [PATCH 0/8] Better heuristics make prettier diffs Michael Haggerty
2016-08-04 7:38 ` Jeff King
2016-08-04 19:54 ` Junio C Hamano
2016-08-04 20:01 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=625e39916051e2ea5e09e1c0d3c4f6c25e61302d.1470259583.git.mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jacob.keller@gmail.com \
--cc=jnareb@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).