Subject: vc-bzr.el with cygwin bzr

From: Phillip Lord <[email-masked]>
Date: Mon, 08 Sep 2008 11:51:37 +0200

Problem: vc-bzr.el doesn't work with cygwin bzr

I've recently been trying out bzr on windows and was pleased to find
vc-bzr.el. It works well with the windows bzr executable but,
unfortunately, this doesn't deal with symlinks which is important to me.
So I tried cygwin instead. Unfortunately vc-bzr.el doesn't work with
this failing with "No such file or program" errors. vc-svn and vc-cvs
work fine with cygin. 

Cause:

bzr is a python file. On cygwin it uses a magic #!/usr/bin/python line,
which vc "start-process" doesn't work with. 

I tested this with following hack, which launches python and gives the
location of bzr (under cygwin as it's cygwin python) as an argument. 

(defun vc-bzr-command (bzr-command buffer okstatus file-or-list &rest args)
  "Wrapper round `vc-do-command' using `vc-bzr-program' as COMMAND.
Invoke the bzr command adding `BZR_PROGRESS_BAR=none' and
`LC_MESSAGES=C' to the environment."
  (let ((process-environment
         (list* "BZR_PROGRESS_BAR=none" ; Suppress progress output (bzr >=0.9)
                "LC_MESSAGES=C"         ; Force English output
                process-environment)))

    (apply 'vc-do-command (or buffer "*vc*") okstatus "python"
           file-or-list "/usr/bin/bzr" bzr-command args)))

vc-bzr now works. 

Suggested Solution:

My hack is platform specific. A better solution would be, to modify
vc-bzr-command to be either of the form "bzr-program-name" or '("python
name" "bzr name"). vc-bzr-command would need to be modified to cope.
There is couple of other places vc-bzr-command is used which would need
changing also. 

Thanks for your attention!

Phil