Imported Upstream version 2.4.2
[scm/test.git] / t / t-filter-process.sh
1 #!/usr/bin/env bash
2
3 . "$(dirname "$0")/testlib.sh"
4
5 # HACK(taylor): git uses ".g<hash>" in the version name to signal that it is
6 # from the "next" branch, which is the only (current) version of Git that has
7 # support for the filter protocol.
8 #
9 ensure_git_version_isnt $VERSION_LOWER "2.11.0"
10
11 begin_test "filter process: checking out a branch"
12 (
13   set -e
14
15   reponame="filter_process_checkout"
16   setup_remote_repo "$reponame"
17   clone_repo "$reponame" repo
18
19   git lfs track "*.dat"
20   git add .gitattributes
21   git commit -m "initial commit"
22
23   contents_a="contents_a"
24   contents_a_oid="$(calc_oid $contents_a)"
25   printf "$contents_a" > a.dat
26
27   git add a.dat
28   git commit -m "add a.dat"
29
30   git checkout -b b
31
32   contents_b="contents_b"
33   contents_b_oid="$(calc_oid $contents_b)"
34   printf "$contents_b" > b.dat
35
36   git add b.dat
37   git commit -m "add b.dat"
38
39   git push origin --all
40
41   pushd ..
42     # Git will choose filter.lfs.process over `filter.lfs.clean` and
43     # `filter.lfs.smudge`
44     GIT_TRACE_PACKET=1 git \
45       -c "filter.lfs.process=git-lfs filter-process" \
46       -c "filter.lfs.clean=false"\
47       -c "filter.lfs.smudge=false" \
48       -c "filter.lfs.required=true" \
49       clone "$GITSERVER/$reponame" "$reponame-assert"
50
51     cd "$reponame-assert"
52
53     # Assert that we are on the "master" branch, and have a.dat
54     [ "master" = "$(git rev-parse --abbrev-ref HEAD)" ]
55     [ "$contents_a" = "$(cat a.dat)" ]
56     assert_pointer "master" "a.dat" "$contents_a_oid" 10
57
58     git checkout b
59
60     # Assert that we are on the "b" branch, and have b.dat
61     [ "b" = "$(git rev-parse --abbrev-ref HEAD)" ]
62     [ "$contents_b" = "$(cat b.dat)" ]
63     assert_pointer "b" "b.dat" "$contents_b_oid" 10
64   popd
65 )
66 end_test
67
68 begin_test "filter process: adding a file"
69 (
70   set -e
71
72   reponame="filter_process_add"
73   setup_remote_repo "$reponame"
74   clone_repo "$reponame" "$reponame"
75
76   git lfs track "*.dat"
77   git add .gitattributes
78   git commit -m "initial commit"
79
80   contents="contents"
81   contents_oid="$(calc_oid "$contents")"
82   printf "$contents" > a.dat
83
84   git add a.dat
85
86   expected="$(pointer "$contents_oid" "${#contents}")"
87   got="$(git cat-file -p :a.dat)"
88
89   diff -u <(echo "$expected") <(echo "$got")
90 )
91 end_test
92
93 # https://github.com/git-lfs/git-lfs/issues/1697
94 begin_test "filter process: add a file with 1024 bytes"
95 (
96   set -e
97
98   mkdir repo-issue-1697
99   cd repo-issue-1697
100   git init
101   git lfs track "*.dat"
102   dd if=/dev/zero of=first.dat bs=1024 count=1
103   printf "any contents" > second.dat
104   git add .
105 )
106 end_test
107
108
109