As an experiment, I've changed all the "shell=True" arguments to 
"shell=False" which is the same as the default value of the argument used 
everywhere else. With this change, I can add repositories correctly.

My installation is not yet functional enough to test whether I can submit 
reviews, etc.

As far as I can tell the "shell=True" is just not necessary. That setting 
runs a sub-shell so that things like wildcarding and pipes work. I don't 
see any usage of those in these commands.

After more verification, I'll submit this as a patch, but if anybody has 
any insight as to why this was chosen for these, and only these, commands 
I'd appreciate it.

Jay

p.s. Has anybody ever hosted a ReviewBoard 1.7 release on a RedHat Box with 
ClearCase? I can't imagine they have with this bug.


On Wednesday, February 27, 2013 5:29:56 PM UTC-5, Jay Lawrence wrote:
>
>
> This is the root cause of the problem entitle "SCMError("Unsupported View 
> Type" earlier on this board, but appears fundamental enough that I've 
> started a new thread with a more appropriate title
>
> In the scmtools/clearcase.py file, the following idiom is used to invoke 
> clearcase commands
>
>     cmdline = ["cleartool", "lsview", "-full", "-properties", "-cview"]
>     p = subprocess.Popen(
>           cmdline,
>           stdout=subprocess.PIPE,
>           stderr=subprocess.PIPE,
>           cwd=repopath,
>           shell=True)
>
>    (res, error) = p.communicate()
>    failure = p.poll()
>
>     if failure:
>       raise SCMError(error)
>
>      for line in res.splitlines(True):
>         splitted = line.split(' ')
>         msg = "_get_view line: " + line;
>         logging.debug(msg);
>         if splitted[0] == 'Properties:':
>            if 'snapshot' in splitted:
>               return self.VIEW_SNAPSHOT
>            elif 'dynamic' in splitted:
>               return self.VIEW_DYNAMIC
>
>        return self.VIEW_UNKNOWN
>
> The issue is with the use of a sequence as the first argument to the 
> subprocess.popen command
>
> On Unix, when a sequence is used as the first argument to popen, when 
> shell=true is set, the first element of the sequence is treated as the 
> command. The subsequent arguments are treated as options to the SHELL. This 
> means that in the command above, only the 'cleartool' command is being 
> executed.
>
> I've seen this at multiple places on the web, most notably: 
>           
> http://stackoverflow.com/questions/9231074/pythons-subprocess-popen-results-differ-from-command-line
>
> On Linux, the cmdline should be a string, or the full command should be 
> given as the first argument of the sequence. The following works:
>
>    cmdline = ["cleartool lsview -full -properties -cview"]
>     p = subprocess.Popen(
>           cmdline,
>           stdout=subprocess.PIPE,
>           stderr=subprocess.PIPE,
>           cwd=repopath,
>           shell=True)
>
>
>
>
>

-- 
Want to help the Review Board project? Donate today at 
http://www.reviewboard.org/donate/
Happy user? Let us know at http://www.reviewboard.org/users/
-~----------~----~----~----~------~----~------~--~---
To unsubscribe from this group, send email to 
reviewboard+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/reviewboard?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to reviewboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to