------------------------------------------------------------------------------
To reply, visit https://hellosplat.com/s/beanbag/tickets/4956/
------------------------------------------------------------------------------

New ticket #4956 by grim
For Beanbag, Inc. > RBTools

Status: New
Tags: Priority:Medium, Type:Defect


------------------------------------------------------------------------------
rbt patch fails with multiple commits in mercurial because mercurial won't 
patch a dirty working copy
==============================================================================

# What version are you running?

2.0.1

# What steps will reproduce the problem?

This came from a contributor, so it might be a bit hard to follow but I've ran 
into this myself.

1. Post a review request with multiple commits
2. Go to another machine and `rbt patch XXXX`
3. Watch `hg patch` explode on the second commit


# What is the expected output? What do you see instead?

Expected output is a successful patch. An error about failing to patch.

# What operating system are you using?

Happens on linux and dinwo.

# Attach the debug out from the command.

```
>>> RBTools 2.0.1
>>> Python 3.8.10 (default, Nov 26 2021, 20:14:08) 
[GCC 9.3.0]
>>> Running on Linux-5.4.0-94-generic-x86_64-with-glibc2.29
>>> Home = /home/ivanhoe
>>> Current directory = /home/ivanhoe/devel/pidgin/pidgin/subprojects/gplugin
>>> Command line: rbt patch -d 1229
>>> Running: tf vc help
>>> Checking for a Mercurial repository...
>>> Running: hg showconfig
>>> Using candidate path 'default': 'https://keep.imfreedom.org/gplugin/gplugin'
>>> Repository info: Path: https://keep.imfreedom.org/gplugin/gplugin, Base 
>>> path: , Supports changesets: False
>>> Making HTTP GET request to https://reviews.imfreedom.org/api/
>>> Running: hg status --modified --added --removed --deleted
WARNING: Working directory is not clean.
>>> Making HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/?only-fields=&only-links=
>>> HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/?only-fields=&only-links=
>>>  cannot be cached
>>> Making HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/?expand=commits
>>> HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/?expand=commits
>>>  cannot be cached
>>> Making HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/commits/106bbe2696333f5af2a1e3d88798ecb4e4c7c993/
>>> HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/commits/106bbe2696333f5af2a1e3d88798ecb4e4c7c993/
>>>  cannot be cached
>>> Making HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/commits/8280699f8e74def7e6ca04a0d75f848b4b7a4f5b/
>>> HTTP GET request to 
>>> https://reviews.imfreedom.org/api/review-requests/1229/diffs/3/commits/8280699f8e74def7e6ca04a0d75f848b4b7a4f5b/
>>>  cannot be cached
Applying 2 patches from review request 1229 (diff revision 3)
Applying patch 1/2...
>>> Running: hg parents --hidden -r 0
>>> Running: hg patch --no-commit /tmp/rbtools.621999nz --config 
>>> extensions.rbtoolsnormalize=/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/helpers/hgext.py
>>> Command exited with rc 255: ['hg', 'patch', '--no-commit', 
>>> '/tmp/rbtools.621999nz', '--config', 
>>> 'extensions.rbtoolsnormalize=/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/helpers/hgext.py']
b'abort: uncommitted changes\n'---
Traceback (most recent call last):
  File "/home/ivanhoe/.local/bin/rbt", line 8, in <module>
    sys.exit(main())
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/commands/main.py", 
line 124, in main
    command.run_from_argv([RB_MAIN, command_name] + args)
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/commands/__init__.py",
 line 770, in run_from_argv
    exit_code = self.main(*args) or 0
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/commands/patch.py", 
line 519, in main
    self._apply_patches(patches)
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/commands/patch.py", 
line 614, in _apply_patches
    success = self.apply_patch(
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/commands/patch.py", 
line 345, in apply_patch
    result = self._tool.apply_patch(
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/clients/mercurial.py",
 line 1242, in apply_patch
    rc, data = self._execute(cmd, with_errors=True, return_error_code=True,
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/clients/mercurial.py",
 line 1191, in _execute
    return execute(cmd, *args, **kwargs)
  File 
"/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/utils/process.py", 
line 189, in execute
    raise Exception('Failed to execute command: %s' % command)
Exception: Failed to execute command: ['hg', 'patch', '--no-commit', 
'/tmp/rbtools.621999nz', '--config', 
'extensions.rbtoolsnormalize=/home/ivanhoe/.local/lib/python3.8/site-packages/rbtools/helpers/hgext.py']
```

# Please provide any additional information below.

As you can see in the above output, it's Mercurial that's aborting.

```
b'abort: uncommitted changes\n'---
```

We temporarily worked around the issue by updating 
`rbtools/clients/mercurial.py` to add the `-f` command line option in `def 
apply_patch` to this line `cmd = [self._exe, 'patch', '--no-commit']`.

At some point the `-f` argument to `hg patch` was deprecated. I'm not sure when 
or why and didn't ask the Mercurial team yet but this appears to work fine for 
now.

------------------------------------------------------------------------------

-- 
You received this message because you are subscribed to the Google Groups 
"reviewboard-issues" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to reviewboard-issues+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/reviewboard-issues/20220114172155.23401.30231%40ip-10-1-54-209.ec2.internal.

Reply via email to