Show More
@@ -65,7 +65,7 def fromlocalfunc(modulename, localmods) | |||||
65 | Mercurial specific) modules. |
|
65 | Mercurial specific) modules. | |
66 |
|
66 | |||
67 | This function assumes that module names not existing in |
|
67 | This function assumes that module names not existing in | |
68 |
`localmods` are |
|
68 | `localmods` are from the Python standard library. | |
69 |
|
69 | |||
70 | This function returns the function, which takes `name` argument, |
|
70 | This function returns the function, which takes `name` argument, | |
71 | and returns `(absname, dottedpath, hassubmod)` tuple if `name` |
|
71 | and returns `(absname, dottedpath, hassubmod)` tuple if `name` |
@@ -61,7 +61,7 def perf(revset, target=None): | |||||
61 | except CalledProcessError as exc: |
|
61 | except CalledProcessError as exc: | |
62 | print >> sys.stderr, 'abort: cannot run revset benchmark: %s' % exc.cmd |
|
62 | print >> sys.stderr, 'abort: cannot run revset benchmark: %s' % exc.cmd | |
63 | if exc.output is None: |
|
63 | if exc.output is None: | |
64 | print >> sys.stderr, '(no ouput)' |
|
64 | print >> sys.stderr, '(no output)' | |
65 | else: |
|
65 | else: | |
66 | print >> sys.stderr, exc.output |
|
66 | print >> sys.stderr, exc.output | |
67 | return None |
|
67 | return None | |
@@ -114,7 +114,7 def idxwidth(nbidx): | |||||
114 | def getfactor(main, other, field, sensitivity=0.05): |
|
114 | def getfactor(main, other, field, sensitivity=0.05): | |
115 | """return the relative factor between values for 'field' in main and other |
|
115 | """return the relative factor between values for 'field' in main and other | |
116 |
|
116 | |||
117 | Return None if the factor is insignicant (less than <sensitivity> |
|
117 | Return None if the factor is insignificant (less than <sensitivity> | |
118 | variation).""" |
|
118 | variation).""" | |
119 | factor = 1 |
|
119 | factor = 1 | |
120 | if main is not None: |
|
120 | if main is not None: | |
@@ -218,7 +218,7 def applyvariants(revset, variant): | |||||
218 |
|
218 | |||
219 | helptext="""This script will run multiple variants of provided revsets using |
|
219 | helptext="""This script will run multiple variants of provided revsets using | |
220 | different revisions in your mercurial repository. After the benchmark are run |
|
220 | different revisions in your mercurial repository. After the benchmark are run | |
221 | summary output is provided. Use itto demonstrate speed improvements or pin |
|
221 | summary output is provided. Use it to demonstrate speed improvements or pin | |
222 | point regressions. Revsets to run are specified in a file (or from stdin), one |
|
222 | point regressions. Revsets to run are specified in a file (or from stdin), one | |
223 | revsets per line. Line starting with '#' will be ignored, allowing insertion of |
|
223 | revsets per line. Line starting with '#' will be ignored, allowing insertion of | |
224 | comments.""" |
|
224 | comments.""" |
@@ -427,7 +427,7 class Translator(nodes.NodeVisitor): | |||||
427 | pass |
|
427 | pass | |
428 |
|
428 | |||
429 | def visit_block_quote(self, node): |
|
429 | def visit_block_quote(self, node): | |
430 | # BUG/HACK: indent always uses the _last_ indention, |
|
430 | # BUG/HACK: indent always uses the _last_ indentation, | |
431 | # thus we need two of them. |
|
431 | # thus we need two of them. | |
432 | self.indent(BLOCKQOUTE_INDENT) |
|
432 | self.indent(BLOCKQOUTE_INDENT) | |
433 | self.indent(0) |
|
433 | self.indent(0) |
@@ -1,7 +1,7 | |||||
1 | #!/bin/sh |
|
1 | #!/bin/sh | |
2 | # |
|
2 | # | |
3 | # This is an example of using HGEDITOR to create of diff to review the |
|
3 | # This is an example of using HGEDITOR to create of diff to review the | |
4 | # changes while commiting. |
|
4 | # changes while committing. | |
5 |
|
5 | |||
6 | # If you want to pass your favourite editor some other parameters |
|
6 | # If you want to pass your favourite editor some other parameters | |
7 | # only for Mercurial, modify this: |
|
7 | # only for Mercurial, modify this: |
@@ -13,7 +13,7 data. | |||||
13 |
|
13 | |||
14 | Typical uses for censor are due to security or legal requirements, including:: |
|
14 | Typical uses for censor are due to security or legal requirements, including:: | |
15 |
|
15 | |||
16 | * Passwords, private keys, crytographic material |
|
16 | * Passwords, private keys, cryptographic material | |
17 | * Licensed data/code/libraries for which the license has expired |
|
17 | * Licensed data/code/libraries for which the license has expired | |
18 | * Personally Identifiable Information or other private data |
|
18 | * Personally Identifiable Information or other private data | |
19 |
|
19 |
@@ -324,7 +324,7 def overridelog(orig, ui, repo, *pats, * | |||||
324 | back = util.pconvert(m.rel(hglf)[:-len(hglf)]) |
|
324 | back = util.pconvert(m.rel(hglf)[:-len(hglf)]) | |
325 |
|
325 | |||
326 | def tostandin(f): |
|
326 | def tostandin(f): | |
327 | # The file may already be a standin, so trucate the back |
|
327 | # The file may already be a standin, so truncate the back | |
328 | # prefix and test before mangling it. This avoids turning |
|
328 | # prefix and test before mangling it. This avoids turning | |
329 | # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'. |
|
329 | # 'glob:../.hglf/foo*' into 'glob:../.hglf/../.hglf/foo*'. | |
330 | if f.startswith(back) and lfutil.splitstandin(f[len(back):]): |
|
330 | if f.startswith(back) and lfutil.splitstandin(f[len(back):]): |
@@ -198,8 +198,8 def rebase(ui, repo, **opts): | |||||
198 | originalwd = target = None |
|
198 | originalwd = target = None | |
199 | activebookmark = None |
|
199 | activebookmark = None | |
200 | external = nullrev |
|
200 | external = nullrev | |
201 |
# Mapping between the |
|
201 | # Mapping between the old revision id and either what is the new rebased | |
202 | # revision or what needs to be done with the old revsion. The state dict |
|
202 | # revision or what needs to be done with the old revision. The state dict | |
203 | # will be what contains most of the rebase progress state. |
|
203 | # will be what contains most of the rebase progress state. | |
204 | state = {} |
|
204 | state = {} | |
205 | skipped = set() |
|
205 | skipped = set() | |
@@ -1172,7 +1172,7 def _computeobsoletenotrebased(repo, reb | |||||
1172 | rebased that have a successors in the destination""" |
|
1172 | rebased that have a successors in the destination""" | |
1173 | obsoletenotrebased = {} |
|
1173 | obsoletenotrebased = {} | |
1174 |
|
1174 | |||
1175 | # Build a mapping succesor => obsolete nodes for the obsolete |
|
1175 | # Build a mapping successor => obsolete nodes for the obsolete | |
1176 | # nodes to be rebased |
|
1176 | # nodes to be rebased | |
1177 | allsuccessors = {} |
|
1177 | allsuccessors = {} | |
1178 | cl = repo.changelog |
|
1178 | cl = repo.changelog |
@@ -171,7 +171,7 def activate(repo, mark): | |||||
171 |
|
171 | |||
172 | def deactivate(repo): |
|
172 | def deactivate(repo): | |
173 | """ |
|
173 | """ | |
174 |
Unset the active bookmark in this reposi |
|
174 | Unset the active bookmark in this repository. | |
175 | """ |
|
175 | """ | |
176 | wlock = repo.wlock() |
|
176 | wlock = repo.wlock() | |
177 | try: |
|
177 | try: |
@@ -63,7 +63,7 def recordfilter(ui, originalhunks, oper | |||||
63 | """ Prompts the user to filter the originalhunks and return a list of |
|
63 | """ Prompts the user to filter the originalhunks and return a list of | |
64 | selected hunks. |
|
64 | selected hunks. | |
65 | *operation* is used for ui purposes to indicate the user |
|
65 | *operation* is used for ui purposes to indicate the user | |
66 | what kind of filtering they are doing: reverting, commiting, shelving, etc. |
|
66 | what kind of filtering they are doing: reverting, committing, shelving, etc. | |
67 | *operation* has to be a translated string. |
|
67 | *operation* has to be a translated string. | |
68 | """ |
|
68 | """ | |
69 | usecurses = ui.configbool('experimental', 'crecord', False) |
|
69 | usecurses = ui.configbool('experimental', 'crecord', False) | |
@@ -841,7 +841,7 extrapostimport = [] # run after commit | |||||
841 | # arguments: |
|
841 | # arguments: | |
842 | # - repo: the localrepository instance, |
|
842 | # - repo: the localrepository instance, | |
843 | # - patchdata: data extracted from patch header (cf m.patch.patchheadermap), |
|
843 | # - patchdata: data extracted from patch header (cf m.patch.patchheadermap), | |
844 |
# - extra: the future extra diction |
|
844 | # - extra: the future extra dictionary of the changeset, please mutate it, | |
845 | # - opts: the import options. |
|
845 | # - opts: the import options. | |
846 | # XXX ideally, we would just pass an ctx ready to be computed, that would allow |
|
846 | # XXX ideally, we would just pass an ctx ready to be computed, that would allow | |
847 | # mutation of in memory commit and more. Feel free to rework the code to get |
|
847 | # mutation of in memory commit and more. Feel free to rework the code to get |
@@ -241,7 +241,7 def _makegetfctx(ctx): | |||||
241 | """return a 'getfctx' function suitable for checkcopies usage |
|
241 | """return a 'getfctx' function suitable for checkcopies usage | |
242 |
|
242 | |||
243 | We have to re-setup the function building 'filectx' for each |
|
243 | We have to re-setup the function building 'filectx' for each | |
244 |
'checkcopies' to ensure the linkrev adjust |
|
244 | 'checkcopies' to ensure the linkrev adjustment is properly setup for | |
245 | each. Linkrev adjustment is important to avoid bug in rename |
|
245 | each. Linkrev adjustment is important to avoid bug in rename | |
246 | detection. Moreover, having a proper '_ancestrycontext' setup ensures |
|
246 | detection. Moreover, having a proper '_ancestrycontext' setup ensures | |
247 | the performance impact of this adjustment is kept limited. Without it, |
|
247 | the performance impact of this adjustment is kept limited. Without it, |
@@ -195,7 +195,7 class patch(patchnode, list): # todo: re | |||||
195 | class uiheader(patchnode): |
|
195 | class uiheader(patchnode): | |
196 | """patch header |
|
196 | """patch header | |
197 |
|
197 | |||
198 | xxx shoudn't we move this to mercurial/patch.py ? |
|
198 | xxx shouldn't we move this to mercurial/patch.py ? | |
199 | """ |
|
199 | """ | |
200 |
|
200 | |||
201 | def __init__(self, header): |
|
201 | def __init__(self, header): | |
@@ -1434,7 +1434,7 are you sure you want to review/edit and | |||||
1434 | """ |
|
1434 | """ | |
1435 | once we scrolled with pg up pg down we can be pointing outside of the |
|
1435 | once we scrolled with pg up pg down we can be pointing outside of the | |
1436 | display zone. we print the patch with towin=False to compute the |
|
1436 | display zone. we print the patch with towin=False to compute the | |
1437 | location of the selected item eventhough it is outside of the displayed |
|
1437 | location of the selected item even though it is outside of the displayed | |
1438 | zone and then update the scroll. |
|
1438 | zone and then update the scroll. | |
1439 | """ |
|
1439 | """ | |
1440 | self.printitem(towin=False) |
|
1440 | self.printitem(towin=False) | |
@@ -1442,7 +1442,7 are you sure you want to review/edit and | |||||
1442 |
|
1442 | |||
1443 | def toggleedit(self, item=None, test=False): |
|
1443 | def toggleedit(self, item=None, test=False): | |
1444 | """ |
|
1444 | """ | |
1445 |
edit the currently |
|
1445 | edit the currently selected chunk | |
1446 | """ |
|
1446 | """ | |
1447 | def updateui(self): |
|
1447 | def updateui(self): | |
1448 | self.numpadlines = self.getnumlinesdisplayed(ignorefolding=True) + 1 |
|
1448 | self.numpadlines = self.getnumlinesdisplayed(ignorefolding=True) + 1 |
@@ -80,7 +80,7 class dirstate(object): | |||||
80 | self._filename = 'dirstate' |
|
80 | self._filename = 'dirstate' | |
81 | self._pendingfilename = '%s.pending' % self._filename |
|
81 | self._pendingfilename = '%s.pending' % self._filename | |
82 |
|
82 | |||
83 | # for consitent view between _pl() and _read() invocations |
|
83 | # for consistent view between _pl() and _read() invocations | |
84 | self._pendingmode = None |
|
84 | self._pendingmode = None | |
85 |
|
85 | |||
86 | def beginparentchange(self): |
|
86 | def beginparentchange(self): |
@@ -610,7 +610,7 def b2partsgenerator(stepname, idx=None) | |||||
610 | def _pushb2ctxcheckheads(pushop, bundler): |
|
610 | def _pushb2ctxcheckheads(pushop, bundler): | |
611 | """Generate race condition checking parts |
|
611 | """Generate race condition checking parts | |
612 |
|
612 | |||
613 | Exists as an indepedent function to aid extensions |
|
613 | Exists as an independent function to aid extensions | |
614 | """ |
|
614 | """ | |
615 | if not pushop.force: |
|
615 | if not pushop.force: | |
616 | bundler.newpart('check:heads', data=iter(pushop.remoteheads)) |
|
616 | bundler.newpart('check:heads', data=iter(pushop.remoteheads)) |
@@ -205,7 +205,7 def wrapcommand(table, command, wrapper, | |||||
205 |
|
205 | |||
206 | The ``remotenames`` extension adds the ``--remote`` and ``--all`` (``-a``) |
|
206 | The ``remotenames`` extension adds the ``--remote`` and ``--all`` (``-a``) | |
207 | flags to the bookmarks command. Either flag will show the remote bookmarks |
|
207 | flags to the bookmarks command. Either flag will show the remote bookmarks | |
208 | known to the repository; ``--remote`` will also supress the output of the |
|
208 | known to the repository; ``--remote`` will also suppress the output of the | |
209 | local bookmarks. |
|
209 | local bookmarks. | |
210 | """ |
|
210 | """ | |
211 |
|
211 |
@@ -74,7 +74,7 rendering the page. | |||||
74 |
|
74 | |||
75 | Many commands take a ``{revision}`` URL parameter. This defines the |
|
75 | Many commands take a ``{revision}`` URL parameter. This defines the | |
76 | changeset to operate on. This is commonly specified as the short, |
|
76 | changeset to operate on. This is commonly specified as the short, | |
77 |
12 digit hex |
|
77 | 12 digit hexadecimal abbreviation for the full 40 character unique | |
78 | revision identifier. However, any value described by |
|
78 | revision identifier. However, any value described by | |
79 | :hg:`help revisions` typically works. |
|
79 | :hg:`help revisions` typically works. | |
80 |
|
80 |
@@ -824,7 +824,7 def remoteui(src, opts): | |||||
824 |
|
824 | |||
825 | # Files of interest |
|
825 | # Files of interest | |
826 | # Used to check if the repository has changed looking at mtime and size of |
|
826 | # Used to check if the repository has changed looking at mtime and size of | |
827 |
# these |
|
827 | # these files. | |
828 | foi = [('spath', '00changelog.i'), |
|
828 | foi = [('spath', '00changelog.i'), | |
829 | ('spath', 'phaseroots'), # ! phase can change content at the same size |
|
829 | ('spath', 'phaseroots'), # ! phase can change content at the same size | |
830 | ('spath', 'obsstore'), |
|
830 | ('spath', 'obsstore'), |
@@ -740,7 +740,7 def filediff(web, req, tmpl): | |||||
740 |
|
740 | |||
741 | The ``filediff`` template is rendered. |
|
741 | The ``filediff`` template is rendered. | |
742 |
|
742 | |||
743 | This hander is registered under both the ``/diff`` and ``/filediff`` |
|
743 | This handler is registered under both the ``/diff`` and ``/filediff`` | |
744 | paths. ``/diff`` is used in modern code. |
|
744 | paths. ``/diff`` is used in modern code. | |
745 | """ |
|
745 | """ | |
746 | fctx, ctx = None, None |
|
746 | fctx, ctx = None, None |
@@ -1306,7 +1306,7 class localrepository(object): | |||||
1306 | l.lock() |
|
1306 | l.lock() | |
1307 | return l |
|
1307 | return l | |
1308 |
|
1308 | |||
1309 | # We do not need to check for non-waiting lock aquisition. Such |
|
1309 | # We do not need to check for non-waiting lock acquisition. Such | |
1310 | # acquisition would not cause dead-lock as they would just fail. |
|
1310 | # acquisition would not cause dead-lock as they would just fail. | |
1311 | if wait and (self.ui.configbool('devel', 'all-warnings') |
|
1311 | if wait and (self.ui.configbool('devel', 'all-warnings') | |
1312 | or self.ui.configbool('devel', 'check-locks')): |
|
1312 | or self.ui.configbool('devel', 'check-locks')): |
@@ -263,7 +263,7 class match(object): | |||||
263 | '''True if the matcher won't always match. |
|
263 | '''True if the matcher won't always match. | |
264 |
|
264 | |||
265 | Although it's just the inverse of _always in this implementation, |
|
265 | Although it's just the inverse of _always in this implementation, | |
266 | an extenion such as narrowhg might make it return something |
|
266 | an extension such as narrowhg might make it return something | |
267 | slightly different.''' |
|
267 | slightly different.''' | |
268 | return not self._always |
|
268 | return not self._always | |
269 |
|
269 |
@@ -515,7 +515,7 def formatblock(block, width): | |||||
515 | if block['type'] == 'bullet': |
|
515 | if block['type'] == 'bullet': | |
516 | if block['lines'][0].startswith('| '): |
|
516 | if block['lines'][0].startswith('| '): | |
517 | # Remove bullet for line blocks and add no extra |
|
517 | # Remove bullet for line blocks and add no extra | |
518 | # indention. |
|
518 | # indentation. | |
519 | block['lines'][0] = block['lines'][0][2:] |
|
519 | block['lines'][0] = block['lines'][0][2:] | |
520 | else: |
|
520 | else: | |
521 | m = _bulletre.match(block['lines'][0]) |
|
521 | m = _bulletre.match(block['lines'][0]) |
@@ -163,7 +163,7 def extract(ui, fileobj): | |||||
163 |
|
163 | |||
164 | patch can be a normal patch or contained in an email message. |
|
164 | patch can be a normal patch or contained in an email message. | |
165 |
|
165 | |||
166 |
return a diction |
|
166 | return a dictionary. Standard keys are: | |
167 | - filename, |
|
167 | - filename, | |
168 | - message, |
|
168 | - message, | |
169 | - user, |
|
169 | - user, | |
@@ -172,7 +172,7 def extract(ui, fileobj): | |||||
172 | - node, |
|
172 | - node, | |
173 | - p1, |
|
173 | - p1, | |
174 | - p2. |
|
174 | - p2. | |
175 | Any item can be missing from the dictionary. If filename is mising, |
|
175 | Any item can be missing from the dictionary. If filename is missing, | |
176 | fileobj did not contain a patch. Caller must unlink filename when done.''' |
|
176 | fileobj did not contain a patch. Caller must unlink filename when done.''' | |
177 |
|
177 | |||
178 | # attempt to detect the start of a patch |
|
178 | # attempt to detect the start of a patch |
@@ -22,7 +22,7 def shouldprint(ui): | |||||
22 | ui._isatty(sys.stderr) or ui.configbool('progress', 'assume-tty')) |
|
22 | ui._isatty(sys.stderr) or ui.configbool('progress', 'assume-tty')) | |
23 |
|
23 | |||
24 | def fmtremaining(seconds): |
|
24 | def fmtremaining(seconds): | |
25 |
"""format a number of remaining seconds in huma |
|
25 | """format a number of remaining seconds in human readable way | |
26 |
|
26 | |||
27 | This will properly display seconds, minutes, hours, days if needed""" |
|
27 | This will properly display seconds, minutes, hours, days if needed""" | |
28 | if seconds < 60: |
|
28 | if seconds < 60: |
@@ -58,7 +58,7 class doublepipe(object): | |||||
58 |
|
58 | |||
59 | The main pipe is expected to be a 'bufferedinputpipe' from the util module |
|
59 | The main pipe is expected to be a 'bufferedinputpipe' from the util module | |
60 | that handle all the os specific bites. This class lives in this module |
|
60 | that handle all the os specific bites. This class lives in this module | |
61 |
because it focus on behavior specifi |
|
61 | because it focus on behavior specific to the ssh protocol.""" | |
62 |
|
62 | |||
63 | def __init__(self, ui, main, side): |
|
63 | def __init__(self, ui, main, side): | |
64 | self._ui = ui |
|
64 | self._ui = ui |
@@ -418,7 +418,7 class abstractsubrepo(object): | |||||
418 | ``ctx`` is the context referring this subrepository in the |
|
418 | ``ctx`` is the context referring this subrepository in the | |
419 | parent repository. |
|
419 | parent repository. | |
420 |
|
420 | |||
421 |
``path`` is the path to this subreposit |
|
421 | ``path`` is the path to this subrepository as seen from | |
422 | innermost repository. |
|
422 | innermost repository. | |
423 | """ |
|
423 | """ | |
424 | self.ui = ctx.repo().ui |
|
424 | self.ui = ctx.repo().ui | |
@@ -1056,7 +1056,7 class hgsubrepo(abstractsubrepo): | |||||
1056 |
|
1056 | |||
1057 | @propertycache |
|
1057 | @propertycache | |
1058 | def wvfs(self): |
|
1058 | def wvfs(self): | |
1059 | """return own wvfs for efficiency and consitency |
|
1059 | """return own wvfs for efficiency and consistency | |
1060 | """ |
|
1060 | """ | |
1061 | return self._repo.wvfs |
|
1061 | return self._repo.wvfs | |
1062 |
|
1062 |
@@ -931,7 +931,7 class ui(object): | |||||
931 |
|
931 | |||
932 | def _progclear(self): |
|
932 | def _progclear(self): | |
933 | """clear progress bar output if any. use it before any output""" |
|
933 | """clear progress bar output if any. use it before any output""" | |
934 |
if '_progbar' not in vars(self): # nothing loade |
|
934 | if '_progbar' not in vars(self): # nothing loaded yet | |
935 | return |
|
935 | return | |
936 | if self._progbar is not None and self._progbar.printed: |
|
936 | if self._progbar is not None and self._progbar.printed: | |
937 | self._progbar.clear() |
|
937 | self._progbar.clear() |
@@ -539,7 +539,7 Test to show result of bookmarks compari | |||||
539 | $ hg clone -U source repo1 |
|
539 | $ hg clone -U source repo1 | |
540 |
|
540 | |||
541 | (test that incoming/outgoing exit with 1, if there is no bookmark to |
|
541 | (test that incoming/outgoing exit with 1, if there is no bookmark to | |
542 |
be exc |
|
542 | be exchanged) | |
543 |
|
543 | |||
544 | $ hg -R repo1 incoming -B |
|
544 | $ hg -R repo1 incoming -B | |
545 | comparing with $TESTTMP/bmcomparison/source |
|
545 | comparing with $TESTTMP/bmcomparison/source |
@@ -171,7 +171,7 Test multibyte sequences in names | |||||
171 | El Ni\xc3\xb1o 1 *************** (esc) |
|
171 | El Ni\xc3\xb1o 1 *************** (esc) | |
172 | with space 1 *************** |
|
172 | with space 1 *************** | |
173 |
|
173 | |||
174 | Test --template argument, with backwards compatiblity |
|
174 | Test --template argument, with backwards compatibility | |
175 |
|
175 | |||
176 | $ hg churn -t '{author|user}' |
|
176 | $ hg churn -t '{author|user}' | |
177 | user1 4 *************************************************************** |
|
177 | user1 4 *************************************************************** |
@@ -71,7 +71,7 Committing only one hunk while aborting | |||||
71 | - unfold it |
|
71 | - unfold it | |
72 | - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike) |
|
72 | - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike) | |
73 | - toggle the second hunk |
|
73 | - toggle the second hunk | |
74 | - edit the hunk and quit the editor imediately with non-zero status |
|
74 | - edit the hunk and quit the editor immediately with non-zero status | |
75 | - commit |
|
75 | - commit | |
76 |
|
76 | |||
77 | $ printf "printf 'editor ran\n'; exit 1" > editor.sh |
|
77 | $ printf "printf 'editor ran\n'; exit 1" > editor.sh |
General Comments 0
You need to be logged in to leave comments.
Login now