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

New ticket #4789 by innot
For Beanbag, Inc. > RBTools

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


------------------------------------------------------------------------------
rbt post doesn't respect --use-client-spec setting to git p4
==============================================================================

# What version are you running?
rbt --version
RBTools 0.7.6

# What steps will reproduce the problem?
Create a git repository based on perforce repo using `P4CLIENT=repo git p4 
clone --use-client-spec --destination git-repo //depot/group`.
The perforce view mapping (modified):
//depot/group/kit0/Dev/... //repo/kit0/...
//depot/group/kit1/Dev/main/... //repo/kit1/...
-//depot/group/kit1/Dev/main/src/dir0/... //repo/kit1/src/dir0/...
+//depot/group/kit1/Dev/Modules/module0/... //repo/kit1/...

This gives the following file structure:
kit0/
   f0 // from kit0/Dev/
   f1 // ..
kit1/
   src/
      dir0/
         f2 // from kit1/Dev/Modules/module0
         f3 // ...
      f4 // from kit1/Dev/main
      f5 // ...

Create a commit:
`echo a >> kit0/f0`
`echo b >> kit1/src/dir0/f2`
`git commit -am 'test'`

Post review:
`rbt post HEAD`

# What is the expected output? What do you see instead?
I expect that the reviewboard will show diffs to depot files
//depot/group/kit0/Dev/f0
//depot/group/kit1/Dev/Modules/module0/src/dir0/f2

Instead, the diffs are applied to files:
//depot/group/kit0/f0
//depot/group/kit1/src/dir0/f2

Basically, the path relevant to the git root is appended to the base of p4 repo 
(as passed to git p4 clone).

# What operating system are you using?
RHEL 6.5

# Attach the debug out from the command.

```
$ rbt <command> --debug <args><debug output>
```

rbt post --debug --target-people=maximb HEAD
>>> RBTools 0.7.6
>>> Python 2.7.2 (default, Mar 26 2013, 18:57:24)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)]
>>> Running on Linux-2.6.32-431.11.2.el6.x86_64-x86_64-with-redhat-6.5-Santiago
>>> Home = ...
>>> Current directory = ...
>>> Checking for a Subversion repository...
>>> Running: svn --non-interactive info
>>> Command exited with rc 1: ['svn', '--non-interactive', u'info']
svn: '.' is not a working copy
---
>>> Checking for a Git repository...
>>> Running: git rev-parse --git-dir
>>> Running: git config core.bare
>>> Running: git rev-parse --show-toplevel
>>> Running: git symbolic-ref -q HEAD
>>> Running: git config --get git-p4.port
>>> Command exited with rc 1: ['git', 'config', '--get', 'git-p4.port']
---
>>> repository info: Path: ..., Base path: , Supports changesets: False
>>> Running: git config --get reviewboard.url
>>> Making HTTP GET request to http://reviewboard/reviews/api/
>>> Running: git rev-parse HEAD
>>> Running: git rev-parse 19e8d1477cc1071aea0a3055253f0651db28e132^
>>> Running: git merge-base fc7e642fedaee9a4a3f304e68c43851e3202bcb3 
>>> remotes/p4/master
>>> Running: git rev-parse --git-dir
>>> Running: git version
>>> Running: git -c core.quotepath=false diff --no-color --no-prefix -r -u 
>>> --no-ext-diff fc7e642fedaee9a4a3f304e68c43851e3202bcb3..                    
>>>         19e8d1477cc1071aea0a3055253f0651db28e132
>>> Running: git log fc7e642fedaee9a4a3f304e68c43851e3202bcb3
>>> Running: p4 files //depot/group/kit0/f0@1691273
>>> Running: p4 files //depot/group/kit1/src/dir0/f2@1691273
>>> Making HTTP GET request to http://reviewboard/reviews/api/validation/diffs/
>>> Cached response for HTTP GET 
>>> http://reviewboard/reviews/api/validation/diffs/ expired and was modified
>>> Making HTTP POST request to http://reviewboard/reviews/api/validation/diffs/
>>> Making HTTP GET request to 
>>> http://reviewboard/reviews/api/review-requests/?only-links=create&only-fields=
>>> Cached response for HTTP GET 
>>> http://reviewboard/reviews/api/review-requests/?only-links=create&only-fields=
>>>  expired and was modified
>>> Making HTTP POST request to http://reviewboard/reviews/api/review-requests/
>>> Making HTTP GET request to 
>>> http://reviewboard/reviews/api/review-requests/232479/diffs/?only-fields=
>>> Added cache entry for HTTP GET request to 
>>> http://reviewboard/reviews/api/review-requests/232479/diffs/?only-fields=
>>> Making HTTP POST request to 
>>> http://reviewboard/reviews/api/review-requests/232479/diffs/
>>> Making HTTP GET request to 
>>> http://reviewboard/reviews/api/review-requests/232479/draft/?only-fields=commit_id
>>> Added cache entry for HTTP GET request to 
>>> http://reviewboard/reviews/api/review-requests/232479/draft/?only-fields=commit_id
>>> Running: git log --reverse --pretty=format:%s%n%n%b 
>>> ^fc7e642fedaee9a4a3f304e68c43851e3202bcb3 
>>> 19e8d1477cc1071aea0a3055253f0651db28e132
>>> Making HTTP PUT request to 
>>> http://reviewboard/reviews/api/review-requests/232479/draft/
Review request #232479 posted.

http://reviewboard/reviews/r/232479/
http://reviewboard/reviews/r/232479/diff/


# Please provide any additional information below.

Looking at the source of `def make_perforce_diff(self, merge_base, diff_lines)` 
in clients/git.py, I think it just appends the base p4 path to the git path: 
`['p4', 'files', base_path + filename + '@' + p4rev]`.

In the presence of client spec, it probably needs to query the real path from 
git somehow (similarly to how git-p4 does it).

I also experimented with passing several paths to git p4 clone, and in that 
case the paths passed to reviewboard consist of all those paths concatenated 
(like `/depot/path1 depot/path2 depot/path3/file0`.

Maybe it can be considired a feature request.

Thank you.

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

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/reviewboard-issues.
For more options, visit https://groups.google.com/d/optout.

Reply via email to