Skip to content

Commit

Permalink
#367: Support BSD style output in touch rule
Browse files Browse the repository at this point in the history
On a Mac, also on NetBSD or OpenBSD, `touch` errs differently:

```
$ uname; touch a/b/c
Darwin
touch: a/b/c: No such file or directory
```

That gets matched by the rule but not fixed by it. Thus the regex
pattern is now a bit more tolerant.
  • Loading branch information
scorphus committed Jul 18, 2018
1 parent 4e755e4 commit 6f24af6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
28 changes: 18 additions & 10 deletions tests/rules/test_touch.py
Expand Up @@ -4,24 +4,32 @@


@pytest.fixture
def output():
return "touch: cannot touch '/a/b/c':" \
" No such file or directory"


def test_match(output):
command = Command('touch /a/b/c', output)
def output(is_bsd):
print(is_bsd)
if is_bsd:
return "touch: /a/b/c: No such file or directory"
return "touch: cannot touch '/a/b/c': No such file or directory"


@pytest.mark.parametrize('script, is_bsd', [
('touch /a/b/c', False),
('touch /a/b/c', True)])
def test_match(script, is_bsd, output):
command = Command(script, output)
assert match(command)


@pytest.mark.parametrize('command', [
Command('touch /a/b/c', ''),
Command('ls /a/b/c', output())])
Command('ls /a/b/c', output(False))])
def test_not_match(command):
assert not match(command)


def test_get_new_command(output):
command = Command('touch /a/b/c', output)
@pytest.mark.parametrize('script, is_bsd', [
('touch /a/b/c', False),
('touch /a/b/c', True)])
def test_get_new_command(script, is_bsd, output):
command = Command(script, output)
fixed_command = get_new_command(command)
assert fixed_command == 'mkdir -p /a/b && touch /a/b/c'
3 changes: 2 additions & 1 deletion thefuck/rules/touch.py
Expand Up @@ -9,5 +9,6 @@ def match(command):


def get_new_command(command):
path = re.findall(r"touch: cannot touch '(.+)/.+':", command.output)[0]
path = path = re.findall(
r"touch: (?:cannot touch ')?(.+)/.+'?:", command.output)[0]
return shell.and_(u'mkdir -p {}'.format(path), command.script)

0 comments on commit 6f24af6

Please sign in to comment.