]> dgit.raspbian.org Git - git-annex.git/blob
204e81221d7c50423b047c9f456f356d166cf03e
[git-annex.git] /
1 ### Please describe the problem.
2
3 For shared repositories git annex refuses to move file out of repository (git annex move --to) if user triggering the move is not the owner of the file.
4
5 ### What steps will reproduce the problem?
6
7  * Init two shared repositories and create a file
8  * Modify that file in repo1 as user u1
9  * Move the file to repo2 as "repository maintenance" user u2
10      - this gives permission denied error
11
12 Alternatively -- mabye better understandable usecase(repository maintainer moves unused files to backup):
13
14  * Init two shared repositories and create a file
15  * Modify that file in repo1 as user u1
16  * Modify that file in repo1 a second time (regardless which user) -- this makes the version edited by u1 unused
17  * Display unused files as repository maintenance user u2  
18      - this gives permission denied error
19  * Move unused files to repo2 as "repository maintenance" user u2 
20      - this gives permission denied error
21
22 ### What version of git-annex are you using? On what operating system?
23
24 [[!format sh """
25 stefan@atom-linux:/tmp/git-annex-test/a$ git --version
26 git version 2.6.2
27 stefan@atom-linux:/tmp/git-annex-test/a$ git annex version
28 git-annex version: 5.20150610+gitg608172f-1~ndall+1
29 build flags: Assistant Webapp Webapp-secure Pairing Testsuite S3 WebDAV Inotify DBus DesktopNotify XMPP DNS Feeds Quvi TDFA
30 key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E MD5E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 MD5 WORM URL
31 remote types: git gcrypt S3 bup directory rsync web bittorrent webdav tahoe glacier ddar hook external
32 local repository version: 5
33 supported repository version: 5
34 upgrade supported from repository versions: 0 1 2 4
35 stefan@atom-linux:/tmp/git-annex-test/a$ uname -a
36 Linux atom-linux 3.13.0-66-generic #108-Ubuntu SMP Wed Oct 7 15:21:40 UTC 2015 i686 i686 i686 GNU/Linux
37 """]]
38
39 ### Please provide any additional information below.
40
41 [[!format sh """
42
43 # init two shared repositories and create a file "file.txt"
44
45 stefan@atom-linux:/tmp/git-annex-test$ mkdir a
46 stefan@atom-linux:/tmp/git-annex-test$ mkdir b
47 stefan@atom-linux:/tmp/git-annex-test$ sudo chown :fileadmin-data *
48 stefan@atom-linux:/tmp/git-annex-test$ sudo chmod g+s *
49 stefan@atom-linux:/tmp/git-annex-test$ cd a
50 stefan@atom-linux:/tmp/git-annex-test/a$ git init --shared .
51 Initialized empty shared Git repository in /tmp/git-annex-test/a/.git/
52 stefan@atom-linux:/tmp/git-annex-test/a$ git config core.sharedrepository group
53 stefan@atom-linux:/tmp/git-annex-test/a$ echo "test" >> file.txt
54 stefan@atom-linux:/tmp/git-annex-test/a$ ls -al
55 total 16
56 drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:41 .
57 drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
58 -rw-rw-r-- 1 stefan fileadmin-data    5 Nov  1 16:41 file.txt
59 drwxrwsr-x 7 stefan fileadmin-data 4096 Nov  1 16:40 .git
60 stefan@atom-linux:/tmp/git-annex-test/a$ git annex init
61 init  ok
62 (recording state in git...)
63 stefan@atom-linux:/tmp/git-annex-test/a$ git annex add file.txt
64 add file.txt ok
65 (recording state in git...)
66 stefan@atom-linux:/tmp/git-annex-test/a$ git commit -m "new file"
67 [master (root-commit) 7aeaa5f] new file
68  1 file changed, 1 insertion(+)
69  create mode 120000 file.txt
70 stefan@atom-linux:/tmp/git-annex-test/a$ cd ..
71 stefan@atom-linux:/tmp/git-annex-test$ cd b
72 stefan@atom-linux:/tmp/git-annex-test/b$ git clone -o a ssh://127.0.0.1/tmp/git-annex-test/a .
73 Cloning into '.'...
74 remote: Counting objects: 13, done.
75 remote: Compressing objects: 100% (9/9), done.
76 remote: Total 13 (delta 0), reused 0 (delta 0)
77 Receiving objects: 100% (13/13), done.
78 Checking connectivity... done.
79 stefan@atom-linux:/tmp/git-annex-test/b$ git config core.sharedrepository group
80 stefan@atom-linux:/tmp/git-annex-test/b$ git annex init "B"
81 init B (merging a/git-annex into git-annex...)
82 (recording state in git...)
83 ok
84 (recording state in git...)
85 stefan@atom-linux:/tmp/git-annex-test/b$ cd ..
86 stefan@atom-linux:/tmp/git-annex-test$ cd a
87 stefan@atom-linux:/tmp/git-annex-test/a$ git remote add b ssh://127.0.0.1/tmp/git-annex-test/b
88 stefan@atom-linux:/tmp/git-annex-test/a$ git annex sync
89 commit  ok
90 pull b
91 remote: Counting objects: 6, done.
92 remote: Compressing objects: 100% (5/5), done.
93 remote: Total 6 (delta 0), reused 1 (delta 0)
94 Unpacking objects: 100% (6/6), done.
95 From ssh://127.0.0.1/tmp/git-annex-test/b
96  * [new branch]      git-annex  -> b/git-annex
97  * [new branch]      master     -> b/master
98 ok
99 (merging b/git-annex into git-annex...)
100 push b
101 Total 0 (delta 0), reused 0 (delta 0)
102 To ssh://127.0.0.1/tmp/git-annex-test/b
103  * [new branch]      git-annex -> synced/git-annex
104  * [new branch]      master -> synced/master
105 ok
106 stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
107 move file.txt (checking b...) (to b...)
108 SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt
109               5 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
110 ok
111 (recording state in git...)
112
113 ## ok, everything fine so far - we have a file "file.txt" which was created in a and moved to b successfully. 
114 ## Now we go to a different user account and modify "file.txt"
115 ## -------------------------------------- userswitch
116
117 unison@atom-linux:/tmp/git-annex-test/a$ git annex get file.txt
118 get file.txt (from b...)
119 SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2.txt
120               5 100%    4.88kB/s    0:00:00 (xfr#1, to-chk=0/1)
121 ok
122 (recording state in git...)
123 unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
124 unlock file.txt (copying...) ok
125 unison@atom-linux:/tmp/git-annex-test/a$ ls -al
126 total 16
127 drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:48 .
128 drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
129 -rw-rw-r-- 1 unison fileadmin-data    5 Nov  1 16:47 file.txt
130 drwxrwsr-x 9 stefan fileadmin-data 4096 Nov  1 16:44 .git
131 unison@atom-linux:/tmp/git-annex-test/a$ echo "a change by unison user" >> file.txt
132 unison@atom-linux:/tmp/git-annex-test/a$ git annex add .
133 add file.txt ok
134 (recording state in git...)
135 unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "unison change"
136 [master 37bd55d] unison change
137  1 file changed, 1 insertion(+), 1 deletion(-)
138
139 ## now the original user / repository maintainer wants to move the file 
140 ## out to b which gives an permission denied error for setFileMode
141 ## git annex does copy it to b, but not remove it from a
142 ## -------------------------------------- userswitch
143
144 stefan@atom-linux:/tmp/git-annex-test/a$ ls -al
145 total 16
146 drwxrwsr-x 3 stefan fileadmin-data 4096 Nov  1 16:48 .
147 drwxrwxr-x 4 stefan stefan         4096 Nov  1 16:39 ..
148 lrwxrwxrwx 1 unison fileadmin-data  188 Nov  1 16:48 file.txt -> .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.tx
149 t/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
150 drwxrwsr-x 9 stefan fileadmin-data 4096 Nov  1 16:48 .git
151 stefan@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
152 move file.txt (checking b...) (to b...)
153 SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
154              29 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
155 git-annex: failed to lock content: .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6aec68aad4745c6
156 eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt: setFileMode: permission denied (Operation not permitted)
157
158 # which makes sense - the file is owned by other user:
159 stefan@atom-linux:/tmp/git-annex-test/a$ ls -al .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29--6
160 aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
161 -r--r--r-- 1 unison fileadmin-data 29 Nov  1 16:48 .git/annex/objects/8x/7w/SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt/SHA256E-s29-
162 -6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
163
164 ## the last editor of the file can move it, though:
165 ## -------------------------------------- userswitch
166 unison@atom-linux:/tmp/git-annex-test/a$ git annex move file.txt --to b
167 move file.txt (checking b...) ok
168 (recording state in git...)
169
170 ## continued - for second usecase...
171 ## edit file two more times as unison user:
172
173 unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
174 unlock file.txt (copying...) ok
175 unison@atom-linux:/tmp/git-annex-test/a$ echo "another unison modification" >> file.txt
176 unison@atom-linux:/tmp/git-annex-test/a$ ls
177 file.txt
178 unison@atom-linux:/tmp/git-annex-test/a$ git annex add
179 add file.txt ok
180 (recording state in git...)
181 unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "another unison change"
182 [master df85491] another unison change
183  1 file changed, 1 insertion(+), 1 deletion(-)
184 unison@atom-linux:/tmp/git-annex-test/a$ git annex unlock file.txt
185 unlock file.txt (copying...) ok
186 (recording state in git...)
187 unison@atom-linux:/tmp/git-annex-test/a$ echo "changes once more" >> file.txt
188 unison@atom-linux:/tmp/git-annex-test/a$ git annex add .
189 add file.txt ok
190 (recording state in git...)
191 unison@atom-linux:/tmp/git-annex-test/a$ git commit -m "1 more"
192 [master 099a2c7] 1 more
193  1 file changed, 1 insertion(+), 1 deletion(-)
194  
195 unison@atom-linux:/tmp/git-annex-test/a$ git annex unused
196 unused . (checking for unused data...) (checking b/master...) (checking master...)
197   Some annexed data is no longer used by any files:
198     NUMBER  KEY
199     1       SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
200     2       SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt
201   (To see where data was previously used, try: git log --stat -S'KEY')
202
203   To remove unwanted data: git-annex dropunused NUMBER
204
205 ok
206
207 ## switch to repository maintenance user and list unused:
208 ## -------------------------------------- userswitch
209
210 stefan@atom-linux:/tmp/git-annex-test/a$ git annex unused --debug
211 unused . (checking for unused data...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","ls-files","--cached","--others","-z","
212 --","."]
213 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","symbolic-ref","-q","HEAD"]
214 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/master"]
215 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref"]
216 (checking b/master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
217 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
218 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/remotes/b/master","--"]
219 [2015-11-01 17:35:09 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]
220 (checking master...) [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
221 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--head"]
222 [2015-11-01 17:35:09 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","diff-index","-z","--raw","--no-renames","-l0","refs/heads/master","--"]
223
224   Some annexed data is no longer used by any files:
225     NUMBER  KEY
226     1       SHA256E-s29--6aec68aad4745c6eb7babaa5f66fb727e896ec47414edfd4fec8136a1db8484e.txt
227     2       SHA256E-s57--dc131ed3874c3b51a6801c43f5d5c0706a9aea58134459eeddf3436626adc89f.txt
228   (To see where data was previously used, try: git log --stat -S'KEY')
229
230   To remove unwanted data: git-annex dropunused NUMBER
231
232
233 git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
234 failed
235 git-annex: unused: 1 failed
236
237
238 stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --unused --to b
239 git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
240 stefan@atom-linux:/tmp/git-annex-test/a$ git annex move --debug --unused --to b
241 [2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","git-annex"]
242 [2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","show-ref","--hash","refs/heads/git-annex"]
243 [2015-11-01 17:38:48 CET] read: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","log","refs/heads/git-annex..4cdcc1b4550b2737e018d382022f3ce3e1dcb029","-n1","
244 --pretty=%H"]
245 [2015-11-01 17:38:48 CET] chat: git ["--git-dir=.git","--work-tree=.","--literal-pathspecs","cat-file","--batch"]
246 git-annex: .git/annex/unused: openFile: permission denied (Permission denied)
247
248 # End of transcript or log.
249 """]]