File: t-attributes.sh

package info (click to toggle)
git-lfs 3.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,808 kB
  • sloc: sh: 21,256; makefile: 507; ruby: 417
file content (148 lines) | stat: -rwxr-xr-x 4,360 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env bash

. "$(dirname "$0")/testlib.sh"

begin_test "macros"
(
  set -e

  reponame="$(basename "$0" ".sh")"
  clone_repo "$reponame" repo

  mkdir dir
  printf '[attr]lfs filter=lfs diff=lfs merge=lfs -text\n*.dat lfs\n' \
    > .gitattributes
  printf '[attr]lfs2 filter=lfs diff=lfs merge=lfs -text\n*.bin lfs2\n' \
    > dir/.gitattributes
  git add .gitattributes dir
  git commit -m 'initial import'

  contents="some data"
  printf "$contents" > foo.dat
  git add *.dat
  git commit -m 'foo.dat'
  assert_local_object "$(calc_oid "$contents")" 9

  contents2="other data"
  printf "$contents2" > dir/foo.bin
  git add dir
  git commit -m 'foo.bin'
  refute_local_object "$(calc_oid "$contents2")"

  git lfs track '*.dat' 2>&1 | tee track.log
  grep '"*.dat" already supported' track.log

  cd dir
  git lfs track '*.bin' 2>&1 | tee track.log
  grep '"*.bin" already supported' track.log && exit 1
  true

  # NOTE: At present we do not test that "git lfs track" reports
  #       "already supported" when it finds a pattern in a subdirectory's
  #       .gitattributes file which references a macro attribute in
  #       the top-level .gitattributes file that sets "filter=lfs".
  #       This is because, while "git check-attr" resolves macro references
  #       from a file such as dir/.gitattributes to .gitattributess,
  #       "git lfs track" only resolves macro references as it reads these
  #       files in depth-first order, so unlike Git it does not expand an
  #       "lfs" reference to "filter=lfs" if it appears in dir/.gitattributes.
)
end_test

begin_test "macros with HOME"
(
  set -e

  reponame="$(basename "$0" ".sh")-home"
  clone_repo "$reponame" repo-home

  mkdir -p "$HOME/.config/git"
  printf '[attr]lfs filter=lfs diff=lfs merge=lfs -text\n*.dat lfs\n' \
    > "$HOME/.config/git/attributes"

  contents="some data"
  printf "$contents" > foo.dat
  git add *.dat
  git commit -m 'foo.dat'
  assert_local_object "$(calc_oid "$contents")" 9

  git lfs track 2>&1 | tee track.log
  grep '*.dat' track.log
)
end_test

begin_test "macros with HOME split"
(
  set -e

  reponame="$(basename "$0" ".sh")-home-split"
  clone_repo "$reponame" repo-home-split

  mkdir -p "$HOME/.config/git"
  printf '[attr]lfs filter=lfs diff=lfs merge=lfs -text\n' \
    > "$HOME/.config/git/attributes"

  printf '*.dat lfs\n' > .gitattributes
  git add .gitattributes
  git commit -m 'initial import'

  contents="some data"
  printf "$contents" > foo.dat
  git add *.dat
  git commit -m 'foo.dat'
  assert_local_object "$(calc_oid "$contents")" 9

  git lfs track '*.dat' 2>&1 | tee track.log
  grep '"*.dat" already supported' track.log
)
end_test

begin_test "macros with unspecified flag"
(
  set -e

  reponame="$(basename "$0" ".sh")"
  clone_repo "$reponame" repo-unspecified

  mkdir dir
  printf '[attr]lfs filter=lfs diff=lfs merge=lfs -text\n**/*.dat lfs\n' \
    > .gitattributes
  printf '*.dat !lfs\n' \
    > dir/.gitattributes
  git add .gitattributes dir
  git commit -m 'initial import'

  contents="some data"
  printf "$contents" > foo.dat
  git add *.dat
  git commit -m 'foo.dat'
  assert_local_object "$(calc_oid "$contents")" 9

  contents2="other data"
  printf "$contents2" > dir/foo.dat
  git add dir
  git commit -m 'dir/foo.dat'
  refute_local_object "$(calc_oid "$contents2")"

  git lfs track '**/*.dat' 2>&1 | tee track.log
  grep '"*\*/\*.dat" already supported' track.log

  # NOTE: The intent of this test is to confirm that running the
  #       "git lfs track '*.dat'" command in the dir/ directory returns
  #       "already supported", because it finds the "*.dat" pattern and
  #       resolves its reference to the "lfs" macro attribute in
  #       top-level .gitattributes file such that a "filter" attribute
  #       is recognized, albeit with the unspecified state set.
  #
  #       However, as noted in the "macros" test above, because the
  #       "git lfs track" command parses the dir/.gitattributes file
  #       before the top-level .gitattributes file, it does not resolve
  #       the macro attribute reference, and our test would fail despite
  #       our ability to parse macro attribute references with a "!"
  #       unspecified flag character prefix.

  #cd dir
  #git lfs track '*.dat' 2>&1 | tee track.log
  #grep '"*.dat" already supported' track.log
)
end_test