Unverified Commit 237b3cb5 authored by Matt Sturgeon's avatar Matt Sturgeon
Browse files

testers.testEqualContents: add checkMetadata option

Allows ignoring file metadata differences (permissions, ownership)
when comparing files.

This is especially useful on darwin, where we often run into subtle
issues like:

    -Device: 1,23 Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ wheel)
    +Device: 1,23 Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 350/ nixbld)
parent e62b610a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -421,6 +421,11 @@ Check that two paths have the same contents.

: A message that is printed last if the file system object contents at the two paths don't match exactly.

`checkMetadata` (boolean)

: Whether to fail on metadata differences, such as permissions or ownership.
  Defaults to `true`.

:::{.example #ex-testEqualContents-toyexample}

# Check that two paths have the same contents
+3 −1
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@
      actual,
      expected,
      postFailureMessage ? null,
      checkMetadata ? true,
    }:
    runCommand "equal-contents-${lib.strings.toLower assertion}"
      {
@@ -66,12 +67,13 @@
          expected
          postFailureMessage
          ;
        excludeMetadata = if checkMetadata then "no" else "yes";
        nativeBuildInputs = [ diffoscopeMinimal ];
      }
      ''
        echo "Checking:"
        printf '%s\n' "$assertion"
        if ! diffoscope --no-progress --text-color=always --exclude-directory-metadata=no -- "$actual" "$expected"
        if ! diffoscope --no-progress --text-color=always --exclude-directory-metadata="$excludeMetadata" -- "$actual" "$expected"
        then
          echo
          echo 'Contents must be equal, but were not!'