* [PATCH 0/3] prepare for histogram diff
@ 2011-07-06 6:15 Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 1/3] xdiff/xprepare: use memset Tay Ray Chuan
0 siblings, 1 reply; 6+ messages in thread
From: Tay Ray Chuan @ 2011-07-06 6:15 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano, Shawn O. Pearce
Tay Ray Chuan (3):
xdiff/xprepare: use memset
xdiff/xpatience: factor out fall-back-diff function
t4033-diff-patience: factor out tests
t/lib-diff-patience.sh | 162 ++++++++++++++++++++++++++++++++++++++++++++++
t/t4033-diff-patience.sh | 162 +---------------------------------------------
xdiff/xpatience.c | 27 +-------
xdiff/xprepare.c | 10 +--
xdiff/xutils.c | 31 +++++++++
xdiff/xutils.h | 2 +
6 files changed, 203 insertions(+), 191 deletions(-)
create mode 100644 t/lib-diff-patience.sh
--
1.7.3.4.678.g170bd
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] xdiff/xprepare: use memset
2011-07-06 6:15 [PATCH 0/3] prepare for histogram diff Tay Ray Chuan
@ 2011-07-06 6:15 ` Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 2/3] xdiff/xpatience: factor out fall-back-diff function Tay Ray Chuan
0 siblings, 1 reply; 6+ messages in thread
From: Tay Ray Chuan @ 2011-07-06 6:15 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano, Shawn O. Pearce
---
xdiff/xprepare.c | 10 +++-------
1 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
index 1689085..783631a 100644
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -64,8 +64,6 @@ static int xdl_optimize_ctxs(xdfile_t *xdf1, xdfile_t *xdf2);
static int xdl_init_classifier(xdlclassifier_t *cf, long size, long flags) {
- long i;
-
cf->flags = flags;
cf->hbits = xdl_hashbits((unsigned int) size);
@@ -80,8 +78,7 @@ static int xdl_init_classifier(xdlclassifier_t *cf, long size, long flags) {
xdl_cha_free(&cf->ncha);
return -1;
}
- for (i = 0; i < cf->hsize; i++)
- cf->rchash[i] = NULL;
+ memset(cf->rchash, 0, cf->hsize * sizeof(xdlclass_t *));
cf->count = 0;
@@ -136,7 +133,7 @@ static int xdl_classify_record(xdlclassifier_t *cf, xrecord_t **rhash, unsigned
static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
xdlclassifier_t *cf, xdfile_t *xdf) {
unsigned int hbits;
- long i, nrec, hsize, bsize;
+ long nrec, hsize, bsize;
unsigned long hav;
char const *blk, *cur, *top, *prev;
xrecord_t *crec;
@@ -164,8 +161,7 @@ static int xdl_prepare_ctx(mmfile_t *mf, long narec, xpparam_t const *xpp,
xdl_cha_free(&xdf->rcha);
return -1;
}
- for (i = 0; i < hsize; i++)
- rhash[i] = NULL;
+ memset(rhash, 0, hsize * sizeof(xrecord_t *));
nrec = 0;
if ((cur = blk = xdl_mmfile_first(mf, &bsize)) != NULL) {
--
1.7.3.4.678.g170bd
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] xdiff/xpatience: factor out fall-back-diff function
2011-07-06 6:15 ` [PATCH 1/3] xdiff/xprepare: use memset Tay Ray Chuan
@ 2011-07-06 6:15 ` Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 3/3] t4033-diff-patience: factor out tests Tay Ray Chuan
0 siblings, 1 reply; 6+ messages in thread
From: Tay Ray Chuan @ 2011-07-06 6:15 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano, Shawn O. Pearce
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
xdiff/xpatience.c | 27 ++-------------------------
xdiff/xutils.c | 31 +++++++++++++++++++++++++++++++
xdiff/xutils.h | 2 ++
3 files changed, 35 insertions(+), 25 deletions(-)
diff --git a/xdiff/xpatience.c b/xdiff/xpatience.c
index e42c16a..fdd7d02 100644
--- a/xdiff/xpatience.c
+++ b/xdiff/xpatience.c
@@ -287,34 +287,11 @@ static int walk_common_sequence(struct hashmap *map, struct entry *first,
static int fall_back_to_classic_diff(struct hashmap *map,
int line1, int count1, int line2, int count2)
{
- /*
- * This probably does not work outside Git, since
- * we have a very simple mmfile structure.
- *
- * Note: ideally, we would reuse the prepared environment, but
- * the libxdiff interface does not (yet) allow for diffing only
- * ranges of lines instead of the whole files.
- */
- mmfile_t subfile1, subfile2;
xpparam_t xpp;
- xdfenv_t env;
-
- subfile1.ptr = (char *)map->env->xdf1.recs[line1 - 1]->ptr;
- subfile1.size = map->env->xdf1.recs[line1 + count1 - 2]->ptr +
- map->env->xdf1.recs[line1 + count1 - 2]->size - subfile1.ptr;
- subfile2.ptr = (char *)map->env->xdf2.recs[line2 - 1]->ptr;
- subfile2.size = map->env->xdf2.recs[line2 + count2 - 2]->ptr +
- map->env->xdf2.recs[line2 + count2 - 2]->size - subfile2.ptr;
xpp.flags = map->xpp->flags & ~XDF_PATIENCE_DIFF;
- if (xdl_do_diff(&subfile1, &subfile2, &xpp, &env) < 0)
- return -1;
- memcpy(map->env->xdf1.rchg + line1 - 1, env.xdf1.rchg, count1);
- memcpy(map->env->xdf2.rchg + line2 - 1, env.xdf2.rchg, count2);
-
- xdl_free_env(&env);
-
- return 0;
+ return xdl_fall_back_diff(map->env, &xpp,
+ line1, count1, line2, count2);
}
/*
diff --git a/xdiff/xutils.c b/xdiff/xutils.c
index ab65034..ded7c32 100644
--- a/xdiff/xutils.c
+++ b/xdiff/xutils.c
@@ -402,3 +402,34 @@ int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
return 0;
}
+
+int xdl_fall_back_diff(xdfenv_t *diff_env, xpparam_t const *xpp,
+ int line1, int count1, int line2, int count2)
+{
+ /*
+ * This probably does not work outside Git, since
+ * we have a very simple mmfile structure.
+ *
+ * Note: ideally, we would reuse the prepared environment, but
+ * the libxdiff interface does not (yet) allow for diffing only
+ * ranges of lines instead of the whole files.
+ */
+ mmfile_t subfile1, subfile2;
+ xdfenv_t env;
+
+ subfile1.ptr = (char *)diff_env->xdf1.recs[line1 - 1]->ptr;
+ subfile1.size = diff_env->xdf1.recs[line1 + count1 - 2]->ptr +
+ diff_env->xdf1.recs[line1 + count1 - 2]->size - subfile1.ptr;
+ subfile2.ptr = (char *)diff_env->xdf2.recs[line2 - 1]->ptr;
+ subfile2.size = diff_env->xdf2.recs[line2 + count2 - 2]->ptr +
+ diff_env->xdf2.recs[line2 + count2 - 2]->size - subfile2.ptr;
+ if (xdl_do_diff(&subfile1, &subfile2, xpp, &env) < 0)
+ return -1;
+
+ memcpy(diff_env->xdf1.rchg + line1 - 1, env.xdf1.rchg, count1);
+ memcpy(diff_env->xdf2.rchg + line2 - 1, env.xdf2.rchg, count2);
+
+ xdl_free_env(&env);
+
+ return 0;
+}
diff --git a/xdiff/xutils.h b/xdiff/xutils.h
index d5de829..674a657 100644
--- a/xdiff/xutils.h
+++ b/xdiff/xutils.h
@@ -41,6 +41,8 @@ int xdl_num_out(char *out, long val);
long xdl_atol(char const *str, char const **next);
int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
const char *func, long funclen, xdemitcb_t *ecb);
+int xdl_fall_back_diff(xdfenv_t *diff_env, xpparam_t const *xpp,
+ int line1, int count1, int line2, int count2);
--
1.7.3.4.678.g170bd
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] t4033-diff-patience: factor out tests
2011-07-06 6:15 ` [PATCH 2/3] xdiff/xpatience: factor out fall-back-diff function Tay Ray Chuan
@ 2011-07-06 6:15 ` Tay Ray Chuan
2011-07-06 7:29 ` Ramkumar Ramachandra
0 siblings, 1 reply; 6+ messages in thread
From: Tay Ray Chuan @ 2011-07-06 6:15 UTC (permalink / raw)
To: Git Mailing List; +Cc: Junio C Hamano, Shawn O. Pearce
---
t/lib-diff-patience.sh | 162 ++++++++++++++++++++++++++++++++++++++++++++++
t/t4033-diff-patience.sh | 162 +---------------------------------------------
2 files changed, 165 insertions(+), 159 deletions(-)
create mode 100644 t/lib-diff-patience.sh
diff --git a/t/lib-diff-patience.sh b/t/lib-diff-patience.sh
new file mode 100644
index 0000000..ab04646
--- /dev/null
+++ b/t/lib-diff-patience.sh
@@ -0,0 +1,162 @@
+test_diff_frobnitz() {
+ cat >file1 <<\EOF
+#include <stdio.h>
+
+// Frobs foo heartily
+int frobnitz(int foo)
+{
+ int i;
+ for(i = 0; i < 10; i++)
+ {
+ printf("Your answer is: ");
+ printf("%d\n", foo);
+ }
+}
+
+int fact(int n)
+{
+ if(n > 1)
+ {
+ return fact(n-1) * n;
+ }
+ return 1;
+}
+
+int main(int argc, char **argv)
+{
+ frobnitz(fact(10));
+}
+EOF
+
+ cat >file2 <<\EOF
+#include <stdio.h>
+
+int fib(int n)
+{
+ if(n > 2)
+ {
+ return fib(n-1) + fib(n-2);
+ }
+ return 1;
+}
+
+// Frobs foo heartily
+int frobnitz(int foo)
+{
+ int i;
+ for(i = 0; i < 10; i++)
+ {
+ printf("%d\n", foo);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ frobnitz(fib(10));
+}
+EOF
+
+ cat >expect <<\EOF
+diff --git a/file1 b/file2
+index 6faa5a3..e3af329 100644
+--- a/file1
++++ b/file2
+@@ -1,26 +1,25 @@
+ #include <stdio.h>
+
++int fib(int n)
++{
++ if(n > 2)
++ {
++ return fib(n-1) + fib(n-2);
++ }
++ return 1;
++}
++
+ // Frobs foo heartily
+ int frobnitz(int foo)
+ {
+ int i;
+ for(i = 0; i < 10; i++)
+ {
+- printf("Your answer is: ");
+ printf("%d\n", foo);
+ }
+ }
+
+-int fact(int n)
+-{
+- if(n > 1)
+- {
+- return fact(n-1) * n;
+- }
+- return 1;
+-}
+-
+ int main(int argc, char **argv)
+ {
+- frobnitz(fact(10));
++ frobnitz(fib(10));
+ }
+EOF
+
+ STRATEGY=$1
+
+ test_expect_success "$STRATEGY diff" '
+ test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&
+ test_cmp expect output
+ '
+
+ test_expect_success "$STRATEGY diff output is valid" '
+ mv file2 expect &&
+ git apply < output &&
+ test_cmp expect file2
+ '
+}
+
+test_diff_unique() {
+ cat >uniq1 <<\EOF
+1
+2
+3
+4
+5
+6
+EOF
+
+ cat >uniq2 <<\EOF
+a
+b
+c
+d
+e
+f
+EOF
+
+ cat >expect <<\EOF
+diff --git a/uniq1 b/uniq2
+index b414108..0fdf397 100644
+--- a/uniq1
++++ b/uniq2
+@@ -1,6 +1,6 @@
+-1
+-2
+-3
+-4
+-5
+-6
++a
++b
++c
++d
++e
++f
+EOF
+
+ STRATEGY=$1
+
+ test_expect_success 'completely different files' '
+ test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&
+ test_cmp expect output
+ '
+}
\ No newline at end of file
diff --git a/t/t4033-diff-patience.sh b/t/t4033-diff-patience.sh
index 1eb1498..9fe9921 100755
--- a/t/t4033-diff-patience.sh
+++ b/t/t4033-diff-patience.sh
@@ -3,166 +3,10 @@
test_description='patience diff algorithm'
. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-diff-patience.sh
-cat >file1 <<\EOF
-#include <stdio.h>
+test_diff_frobnitz "patience"
-// Frobs foo heartily
-int frobnitz(int foo)
-{
- int i;
- for(i = 0; i < 10; i++)
- {
- printf("Your answer is: ");
- printf("%d\n", foo);
- }
-}
-
-int fact(int n)
-{
- if(n > 1)
- {
- return fact(n-1) * n;
- }
- return 1;
-}
-
-int main(int argc, char **argv)
-{
- frobnitz(fact(10));
-}
-EOF
-
-cat >file2 <<\EOF
-#include <stdio.h>
-
-int fib(int n)
-{
- if(n > 2)
- {
- return fib(n-1) + fib(n-2);
- }
- return 1;
-}
-
-// Frobs foo heartily
-int frobnitz(int foo)
-{
- int i;
- for(i = 0; i < 10; i++)
- {
- printf("%d\n", foo);
- }
-}
-
-int main(int argc, char **argv)
-{
- frobnitz(fib(10));
-}
-EOF
-
-cat >expect <<\EOF
-diff --git a/file1 b/file2
-index 6faa5a3..e3af329 100644
---- a/file1
-+++ b/file2
-@@ -1,26 +1,25 @@
- #include <stdio.h>
-
-+int fib(int n)
-+{
-+ if(n > 2)
-+ {
-+ return fib(n-1) + fib(n-2);
-+ }
-+ return 1;
-+}
-+
- // Frobs foo heartily
- int frobnitz(int foo)
- {
- int i;
- for(i = 0; i < 10; i++)
- {
-- printf("Your answer is: ");
- printf("%d\n", foo);
- }
- }
-
--int fact(int n)
--{
-- if(n > 1)
-- {
-- return fact(n-1) * n;
-- }
-- return 1;
--}
--
- int main(int argc, char **argv)
- {
-- frobnitz(fact(10));
-+ frobnitz(fib(10));
- }
-EOF
-
-test_expect_success 'patience diff' '
-
- test_must_fail git diff --no-index --patience file1 file2 > output &&
- test_cmp expect output
-
-'
-
-test_expect_success 'patience diff output is valid' '
-
- mv file2 expect &&
- git apply < output &&
- test_cmp expect file2
-
-'
-
-cat >uniq1 <<\EOF
-1
-2
-3
-4
-5
-6
-EOF
-
-cat >uniq2 <<\EOF
-a
-b
-c
-d
-e
-f
-EOF
-
-cat >expect <<\EOF
-diff --git a/uniq1 b/uniq2
-index b414108..0fdf397 100644
---- a/uniq1
-+++ b/uniq2
-@@ -1,6 +1,6 @@
--1
--2
--3
--4
--5
--6
-+a
-+b
-+c
-+d
-+e
-+f
-EOF
-
-test_expect_success 'completely different files' '
-
- test_must_fail git diff --no-index --patience uniq1 uniq2 > output &&
- test_cmp expect output
-
-'
+test_diff_unique "patience"
test_done
--
1.7.3.4.678.g170bd
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] t4033-diff-patience: factor out tests
2011-07-06 6:15 ` [PATCH 3/3] t4033-diff-patience: factor out tests Tay Ray Chuan
@ 2011-07-06 7:29 ` Ramkumar Ramachandra
2011-07-06 15:01 ` Tay Ray Chuan
0 siblings, 1 reply; 6+ messages in thread
From: Ramkumar Ramachandra @ 2011-07-06 7:29 UTC (permalink / raw)
To: Tay Ray Chuan; +Cc: Git Mailing List, Junio C Hamano, Shawn O. Pearce
Hi Tay,
Tay Ray Chuan writes:
> ---
Submitting RFC patches without commit messages is alright I think, but
a missing signoff won't even permit anyone else to pick up this up and
work on it. Please sign-off on everything.
> t/lib-diff-patience.sh | 162 ++++++++++++++++++++++++++++++++++++++++++++++
> t/t4033-diff-patience.sh | 162 +---------------------------------------------
> 2 files changed, 165 insertions(+), 159 deletions(-)
> create mode 100644 t/lib-diff-patience.sh
Maybe separate this out into two patches: one that renames the file,
and another that makes the minor changes so that it's easy to review?
-- Ram
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] t4033-diff-patience: factor out tests
2011-07-06 7:29 ` Ramkumar Ramachandra
@ 2011-07-06 15:01 ` Tay Ray Chuan
0 siblings, 0 replies; 6+ messages in thread
From: Tay Ray Chuan @ 2011-07-06 15:01 UTC (permalink / raw)
To: Ramkumar Ramachandra; +Cc: Git Mailing List, Junio C Hamano, Shawn O. Pearce
On Wed, Jul 6, 2011 at 3:29 PM, Ramkumar Ramachandra <artagnon@gmail.com> wrote:
> Submitting RFC patches without commit messages is alright I think, but
> a missing signoff won't even permit anyone else to pick up this up and
> work on it. Please sign-off on everything.
Oops.
>> t/lib-diff-patience.sh | 162 ++++++++++++++++++++++++++++++++++++++++++++++
>> t/t4033-diff-patience.sh | 162 +---------------------------------------------
>> 2 files changed, 165 insertions(+), 159 deletions(-)
>> create mode 100644 t/lib-diff-patience.sh
>
> Maybe separate this out into two patches: one that renames the file,
> and another that makes the minor changes so that it's easy to review?
Good idea.
--
Cheers,
Ray Chuan
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-07-06 15:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-06 6:15 [PATCH 0/3] prepare for histogram diff Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 1/3] xdiff/xprepare: use memset Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 2/3] xdiff/xpatience: factor out fall-back-diff function Tay Ray Chuan
2011-07-06 6:15 ` [PATCH 3/3] t4033-diff-patience: factor out tests Tay Ray Chuan
2011-07-06 7:29 ` Ramkumar Ramachandra
2011-07-06 15:01 ` Tay Ray Chuan
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 NNTP newsgroup(s).