Show More
@@ -406,9 +406,10 b' class dirstate(object):' | |||
|
406 | 406 | # recursively normalize leading directory components |
|
407 | 407 | # against dirstate |
|
408 | 408 | if '/' in normed: |
|
409 | d, f = normed.rsplit('/') | |
|
410 |
d = |
|
|
411 |
|
|
|
409 | d, f = normed.rsplit('/', 1) | |
|
410 | d = self._normalize(d, isknown) | |
|
411 | r = self._root + "/" + d | |
|
412 | folded = d + "/" + util.fspath(f, r) | |
|
412 | 413 | else: |
|
413 | 414 | folded = util.fspath(normed, self._root) |
|
414 | 415 | self._foldmap[normed] = folded |
@@ -4,7 +4,7 b' if all features are there, non-zero othe' | |||
|
4 | 4 | prefixed with "no-", the absence of feature is tested. |
|
5 | 5 | """ |
|
6 | 6 | import optparse |
|
7 | import os | |
|
7 | import os, stat | |
|
8 | 8 | import re |
|
9 | 9 | import sys |
|
10 | 10 | import tempfile |
@@ -64,14 +64,21 b' def has_eol_in_paths():' | |||
|
64 | 64 | return False |
|
65 | 65 | |
|
66 | 66 | def has_executablebit(): |
|
67 | fd, path = tempfile.mkstemp(prefix=tempprefix) | |
|
68 | os.close(fd) | |
|
67 | try: | |
|
68 | EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH | |
|
69 | fh, fn = tempfile.mkstemp(dir=".", prefix='hg-checkexec-') | |
|
69 | 70 | try: |
|
70 |
|
|
|
71 | os.chmod(path, s | 0100) | |
|
72 | return (os.lstat(path).st_mode & 0100 != 0) | |
|
71 | os.close(fh) | |
|
72 | m = os.stat(fn).st_mode & 0777 | |
|
73 | new_file_has_exec = m & EXECFLAGS | |
|
74 | os.chmod(fn, m ^ EXECFLAGS) | |
|
75 | exec_flags_cannot_flip = ((os.stat(fn).st_mode & 0777) == m) | |
|
73 | 76 | finally: |
|
74 | os.remove(path) | |
|
77 | os.unlink(fn) | |
|
78 | except (IOError, OSError): | |
|
79 | # we don't care, the user probably won't be able to commit anyway | |
|
80 | return False | |
|
81 | return not (new_file_has_exec or exec_flags_cannot_flip) | |
|
75 | 82 | |
|
76 | 83 | def has_icasefs(): |
|
77 | 84 | # Stolen from mercurial.util |
@@ -161,6 +168,15 b' def has_p4():' | |||
|
161 | 168 | return matchoutput('p4 -V', r'Rev\. P4/') and matchoutput('p4d -V', r'Rev\. P4D/') |
|
162 | 169 | |
|
163 | 170 | def has_symlink(): |
|
171 | if not hasattr(os, "symlink"): | |
|
172 | return False | |
|
173 | name = tempfile.mktemp(dir=".", prefix='hg-checklink-') | |
|
174 | try: | |
|
175 | os.symlink(".", name) | |
|
176 | os.unlink(name) | |
|
177 | return True | |
|
178 | except (OSError, AttributeError): | |
|
179 | return False | |
|
164 | 180 | return hasattr(os, "symlink") # FIXME: should also check file system and os |
|
165 | 181 | |
|
166 | 182 | def has_tla(): |
@@ -73,6 +73,17 b' no clobbering of untracked files with wr' | |||
|
73 | 73 | |
|
74 | 74 | $ cd .. |
|
75 | 75 | |
|
76 | issue 3342: file in nested directory causes unexpected abort | |
|
77 | ||
|
78 | $ hg init issue3342 | |
|
79 | $ cd issue3342 | |
|
80 | ||
|
81 | $ mkdir -p a/B/c/D | |
|
82 | $ echo e > a/B/c/D/e | |
|
83 | $ hg add a/B/c/D/e | |
|
84 | ||
|
85 | $ cd .. | |
|
86 | ||
|
76 | 87 | issue 3340: mq does not handle case changes correctly |
|
77 | 88 | |
|
78 | 89 | in addition to reported case, 'hg qrefresh' is also tested against |
@@ -1,11 +1,12 b'' | |||
|
1 | 1 | import os |
|
2 | 2 | from mercurial import hg, ui |
|
3 | 3 | from mercurial.scmutil import walkrepos |
|
4 | from mercurial.util import checklink | |
|
4 | 5 | from os import mkdir, chdir |
|
5 | 6 | from os.path import join as pjoin |
|
6 | 7 | |
|
7 | 8 | u = ui.ui() |
|
8 | sym = getattr(os, 'symlink', False) and getattr(os.path, 'samestat', False) | |
|
9 | sym = checklink('.') | |
|
9 | 10 | |
|
10 | 11 | hg.repository(u, 'top1', create=1) |
|
11 | 12 | mkdir('subdir') |
General Comments 0
You need to be logged in to leave comments.
Login now