Thread (37 messages) read the whole thread 37 messages, 4 authors, 2021-03-08

A merge-ort TODO comment, and how to test merge-ort?

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-03-04 16:29:40

On Fri, Jan 01 2021, Elijah Newren via GitGitGadget wrote:
+	else {
+		/* must be the 100644/100755 case */
+		assert(S_ISREG(a->mode));
+		result->mode = a->mode;
+		clean = (b->mode == o->mode);
+		/*
+		 * FIXME: If opt->priv->call_depth && !clean, then we really
+		 * should not make result->mode match either a->mode or
+		 * b->mode; that causes t6036 "check conflicting mode for
+		 * regular file" to fail.  It would be best to use some other
+		 * mode, but we'll confuse all kinds of stuff if we use one
+		 * where S_ISREG(result->mode) isn't true, and if we use
+		 * something like 0100666, then tree-walk.c's calls to
+		 * canon_mode() will just normalize that to 100644 for us and
+		 * thus not solve anything.
+		 *
+		 * Figure out if there's some kind of way we can work around
+		 * this...
+		 */
So if tree-walk.c didn't call canon_mode() you would do:

    if (opt->priv->call_depth && !clean)
        result->mode = 0100666;
    else
        result->mode = a->mode;

I haven't looked at this bit closer, but that doesn't make the test
referenced here pass.

I'm refactoring tree-walk.h to do that in a WIP series, and ran into
this.

As an aside, how does one run the merge-ort tests in such a way as
they'll pass on master now? There's now a bunch of failures with
GIT_TEST_MERGE_ALGORITHM=ort, well, just for t*merge*.sh:
    
    t6409-merge-subtree.sh                        (Wstat: 256 Tests: 12 Failed: 1)
      Failed test:  12
      Non-zero exit status: 1
    t6418-merge-text-auto.sh                      (Wstat: 256 Tests: 10 Failed: 3)
      Failed tests:  4-5, 10
      Non-zero exit status: 1
    t6437-submodule-merge.sh                      (Wstat: 0 Tests: 18 Failed: 0)
      TODO passed:   13, 17
    t6423-merge-rename-directories.sh             (Wstat: 256 Tests: 68 Failed: 4)
      Failed tests:  7, 53, 55, 59
      Non-zero exit status: 1

And both test_expect_merge_algorithm and what seems to be a common
pattern of e.g.:
    
    t6400-merge-df.sh:      if test "$GIT_TEST_MERGE_ALGORITHM" = ort
    t6400-merge-df.sh-      then
    t6400-merge-df.sh-              test 0 -eq $(git ls-files -o | wc -l)
    t6400-merge-df.sh-      else
    t6400-merge-df.sh-              test 1 -eq $(git ls-files -o | wc -l)
    t6400-merge-df.sh-      fi &&

Will not run tests on both backends, I was expecting to find something
so we can the test N times for the backends, and declared if things were
to be skipped on ort or whatever.

I understand that this is still WIP code, but it would be nice to have
it in a state where one can confidently touch merge-ort.c when changing
some API or whatever and have it be tested by default.

Or maybe that's the case, and I've missed how it's happening...
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help