Mercurial > hg-stable
annotate mercurial/scmposix.py @ 34963:5e27afeddaee stable
subrepo: add config option to reject any subrepo operations (SEC)
This is an alternative workaround for the issue5730.
Perhaps this is the simplest way of disabling subrepo operations. It does
nothing clever, but just aborts if Mercurial starts accessing to a subrepo.
I think Greg's patch is more useful since it allows us to at least check
out the parent repository. However, that would be confusing if the default
is flipped to checkout=False and subrepos are silently ignored.
I don't like the config name 'allowed', but I couldn't get any better name.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 05 Nov 2017 21:22:07 +0900 |
parents | dacfcdd8b94e |
children | 57875cf423c9 |
rev | line source |
---|---|
27483
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
1 from __future__ import absolute_import |
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
2 |
30324
80708959161a
scmutil: narrow ImportError handling in termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30323
diff
changeset
|
3 import array |
30322
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
4 import errno |
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
5 import fcntl |
27483
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
6 import os |
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
7 import sys |
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
8 |
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
9 from . import ( |
30290
c90a05124fae
py3: make scmposix.userrcpath() return bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27483
diff
changeset
|
10 encoding, |
30476
5b0baa9f3362
py3: use pycompat.sysargv in scmposix.systemrcpath()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30327
diff
changeset
|
11 pycompat, |
32248
d74b0cff94a9
osutil: proxy through util (and platform) modules (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32078
diff
changeset
|
12 util, |
27483
39087ee88835
scmposix: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
22583
diff
changeset
|
13 ) |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
14 |
32078
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
15 # BSD 'more' escapes ANSI color sequences by default. This can be disabled by |
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
16 # $MORE variable, but there's no compatible option with Linux 'more'. Given |
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
17 # OS X is widely used and most modern Unix systems would have 'less', setting |
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
18 # 'less' as the default seems reasonable. |
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
19 fallbackpager = 'less' |
bf5e13e38390
pager: use less as a fallback on Unix
Yuya Nishihara <yuya@tcha.org>
parents:
31348
diff
changeset
|
20 |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
21 def _rcfiles(path): |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
22 rcs = [os.path.join(path, 'hgrc')] |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
23 rcdir = os.path.join(path, 'hgrc.d') |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
24 try: |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
25 rcs.extend([os.path.join(rcdir, f) |
32248
d74b0cff94a9
osutil: proxy through util (and platform) modules (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32078
diff
changeset
|
26 for f, kind in util.listdir(rcdir) |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
27 if f.endswith(".rc")]) |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
28 except OSError: |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
29 pass |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
30 return rcs |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
31 |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
32 def systemrcpath(): |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
33 path = [] |
30646
16b5df5792a8
py3: replace sys.platform with pycompat.sysplatform (part 1 of 2)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30476
diff
changeset
|
34 if pycompat.sysplatform == 'plan9': |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
35 root = 'lib/mercurial' |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
36 else: |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
37 root = 'etc/mercurial' |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
38 # old mod_python does not set sys.argv |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
39 if len(getattr(sys, 'argv', [])) > 0: |
30476
5b0baa9f3362
py3: use pycompat.sysargv in scmposix.systemrcpath()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30327
diff
changeset
|
40 p = os.path.dirname(os.path.dirname(pycompat.sysargv[0])) |
22583
23c995ed466b
config: don't read the same config file twice
Mads Kiilerich <madski@unity3d.com>
parents:
18690
diff
changeset
|
41 if p != '/': |
23c995ed466b
config: don't read the same config file twice
Mads Kiilerich <madski@unity3d.com>
parents:
18690
diff
changeset
|
42 path.extend(_rcfiles(os.path.join(p, root))) |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
43 path.extend(_rcfiles('/' + root)) |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
44 return path |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
45 |
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
46 def userrcpath(): |
30646
16b5df5792a8
py3: replace sys.platform with pycompat.sysplatform (part 1 of 2)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30476
diff
changeset
|
47 if pycompat.sysplatform == 'plan9': |
30290
c90a05124fae
py3: make scmposix.userrcpath() return bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27483
diff
changeset
|
48 return [encoding.environ['home'] + '/lib/hgrc'] |
34647 | 49 elif pycompat.isdarwin: |
30961
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
50 return [os.path.expanduser('~/.hgrc')] |
18690
4c6f7f0dadab
scmutil: split platform-specific bits into their own modules
Kevin Bullock <kbullock@ringworld.org>
parents:
diff
changeset
|
51 else: |
30961
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
52 confighome = encoding.environ.get('XDG_CONFIG_HOME') |
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
53 if confighome is None or not os.path.isabs(confighome): |
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
54 confighome = os.path.expanduser('~/.config') |
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
55 |
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
56 return [os.path.expanduser('~/.hgrc'), |
354020079723
hg: allow usage of XDG_CONFIG_HOME/hg/hgrc
David Demelier <demelier.david@gmail.com>
parents:
30646
diff
changeset
|
57 os.path.join(confighome, 'hg', 'hgrc')] |
30322
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
58 |
30327
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30325
diff
changeset
|
59 def termsize(ui): |
30322
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
60 try: |
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
61 import termios |
30324
80708959161a
scmutil: narrow ImportError handling in termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30323
diff
changeset
|
62 TIOCGWINSZ = termios.TIOCGWINSZ # unavailable on IRIX (issue3449) |
80708959161a
scmutil: narrow ImportError handling in termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30323
diff
changeset
|
63 except (AttributeError, ImportError): |
30327
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30325
diff
changeset
|
64 return 80, 24 |
30325
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
65 |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
66 for dev in (ui.ferr, ui.fout, ui.fin): |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
67 try: |
30322
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
68 try: |
30325
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
69 fd = dev.fileno() |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
70 except AttributeError: |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
71 continue |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
72 if not os.isatty(fd): |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
73 continue |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
74 arri = fcntl.ioctl(fd, TIOCGWINSZ, '\0' * 8) |
31348
7c09b071318a
smcposix: pass unicode as first argument to array.array
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30961
diff
changeset
|
75 height, width = array.array(r'h', arri)[:2] |
30327
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30325
diff
changeset
|
76 if width > 0 and height > 0: |
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30325
diff
changeset
|
77 return width, height |
30325
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
78 except ValueError: |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
79 pass |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
80 except IOError as e: |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
81 if e[0] == errno.EINVAL: |
30322
4b1af1c867fa
scmutil: move util.termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30290
diff
changeset
|
82 pass |
30325
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
83 else: |
1ad1c5017043
scmutil: remove superfluous indent from termwidth()
Yuya Nishihara <yuya@tcha.org>
parents:
30324
diff
changeset
|
84 raise |
30327
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30325
diff
changeset
|
85 return 80, 24 |