##// END OF EJS Templates
extdiff: preserve execute-bit across copies (issue1562)...
Patrick Mezard -
r8065:66d0a03d default
parent child Browse files
Show More
@@ -67,7 +67,7 b' def snapshot(ui, repo, files, node, tmpr'
67 else:
67 else:
68 ui.note(_('making snapshot of %d files from working dir\n') %
68 ui.note(_('making snapshot of %d files from working dir\n') %
69 (len(files)))
69 (len(files)))
70
70 wopener = util.opener(base)
71 fns_and_mtime = []
71 fns_and_mtime = []
72 ctx = repo[node]
72 ctx = repo[node]
73 for fn in files:
73 for fn in files:
@@ -77,11 +77,14 b' def snapshot(ui, repo, files, node, tmpr'
77 continue
77 continue
78 ui.note(' %s\n' % wfn)
78 ui.note(' %s\n' % wfn)
79 dest = os.path.join(base, wfn)
79 dest = os.path.join(base, wfn)
80 destdir = os.path.dirname(dest)
80 fctx = ctx[wfn]
81 if not os.path.isdir(destdir):
81 data = repo.wwritedata(wfn, fctx.data())
82 os.makedirs(destdir)
82 if 'l' in fctx.flags():
83 data = repo.wwritedata(wfn, ctx[wfn].data())
83 wopener.symlink(data, wfn)
84 open(dest, 'wb').write(data)
84 else:
85 wopener(wfn, 'w').write(data)
86 if 'x' in fctx.flags():
87 util.set_flags(dest, False, True)
85 if node is None:
88 if node is None:
86 fns_and_mtime.append((dest, repo.wjoin(fn), os.path.getmtime(dest)))
89 fns_and_mtime.append((dest, repo.wjoin(fn), os.path.getmtime(dest)))
87 return dirname, fns_and_mtime
90 return dirname, fns_and_mtime
@@ -28,7 +28,7 b" hg ci -d '1 0' -mtest2"
28 hg falabala -r 0:1
28 hg falabala -r 0:1
29
29
30 # test diff during merge
30 # test diff during merge
31 hg update 0
31 hg update -C 0
32 echo c >> c
32 echo c >> c
33 hg add c
33 hg add c
34 hg ci -m "new branch" -d '1 0'
34 hg ci -m "new branch" -d '1 0'
@@ -43,3 +43,24 b' hg falabala -c 1'
43 # check diff are made from the first parent
43 # check diff are made from the first parent
44 hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
44 hg falabala -c 3 || echo "diff-like tools yield a non-zero exit code"
45 #hg log
45 #hg log
46
47 echo
48 echo '% test extdiff of multiple files in tmp dir:'
49 hg update -C 0 > /dev/null
50 echo changed > a
51 echo changed > b
52 chmod +x b
53 echo '% diff in working directory, before'
54 hg diff --git
55 echo '% edit with extdiff -p'
56 # prepare custom diff/edit tool
57 cat > differ.sh << EOT
58 #!/bin/sh
59 sleep 1 # avoid unchanged-timestamp problems
60 echo edited >> a/a
61 echo edited >> a/b
62 EOT
63 chmod +x differ.sh
64 hg extdiff -p `pwd`/differ.sh # will change to /tmp/extdiff.TMP and populate directories a.TMP and a and start tool
65 echo '% diff in working directory, after'
66 hg diff --git
@@ -34,3 +34,38 b' diffing a.2a13a4d2da36/a [tmp]/test-extd'
34 diffing a.8a5febb7f867/a a.34eed99112ab/a
34 diffing a.8a5febb7f867/a a.34eed99112ab/a
35 diffing a.2a13a4d2da36/a a.46c0e4daeb72/a
35 diffing a.2a13a4d2da36/a a.46c0e4daeb72/a
36 diff-like tools yield a non-zero exit code
36 diff-like tools yield a non-zero exit code
37
38 % test extdiff of multiple files in tmp dir:
39 % diff in working directory, before
40 diff --git a/a b/a
41 --- a/a
42 +++ b/a
43 @@ -1,1 +1,1 @@
44 -a
45 +changed
46 diff --git a/b b/b
47 old mode 100644
48 new mode 100755
49 --- a/b
50 +++ b/b
51 @@ -1,1 +1,1 @@
52 -b
53 +changed
54 % edit with extdiff -p
55 % diff in working directory, after
56 diff --git a/a b/a
57 --- a/a
58 +++ b/a
59 @@ -1,1 +1,2 @@
60 -a
61 +changed
62 +edited
63 diff --git a/b b/b
64 old mode 100644
65 new mode 100755
66 --- a/b
67 +++ b/b
68 @@ -1,1 +1,2 @@
69 -b
70 +changed
71 +edited
General Comments 0
You need to be logged in to leave comments. Login now