[PATCH 2 of 2] convert: check existence of ~/.cvspass before reading it

Edouard Gomez ed.gomez at free.fr
Thu Nov 27 03:24:09 CST 2008


# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1227777200 -3600
# Node ID 8bf030143888f4017ceb5e934140fc9a61c05bf9
# Parent  c48daeae689ddbe1b4c0bcce548f0b6ca50393b8
convert: check existence of ~/.cvspass before reading it

As mercurial is so good at keeping track of CVS repos, I don't use
cvs anymore. Which results in the ~/.cvspass not being created by
any cvs command execution.

So I end up with this type of convert error:

$ hg convert enblend.cvs enblend.hg
initializing destination enblend.hg repository
using builtin cvsps
collecting CVS rlog
cvs rlog: CVS password file /home/ed/.cvspass does not exist - creating a new file
[...]
connecting to :pserver:anonymous at enblend.cvs.sourceforge.net:/cvsroot/enblend
abort: No such file or directory: /home/ed/.cvspass

Though cvs rlog says it creates the file, it doesn't create it...

So better check for it before reading it.

diff --git a/hgext/convert/cvs.py b/hgext/convert/cvs.py
--- a/hgext/convert/cvs.py
+++ b/hgext/convert/cvs.py
@@ -201,20 +201,22 @@
 
                 if not passw:
                     passw = "A"
-                    pf = open(os.path.expanduser("~/.cvspass"))
-                    for line in pf.read().splitlines():
-                        part1, part2 = line.split(' ', 1)
-                        if part1 == '/1':
-                            # /1 :pserver:user at example.com:2401/cvsroot/foo Ah<Z
-                            part1, part2 = part2.split(' ', 1)
-                            format = format1
-                        else:
-                            # :pserver:user at example.com:/cvsroot/foo Ah<Z
-                            format = format0
-                        if part1 == format:
-                            passw = part2
-                            break
-                    pf.close()
+                    cvspass = os.path.expanduser("~/.cvspass")
+                    if os.path.exists(cvspass):
+                        pf = open(cvspass)
+                        for line in pf.read().splitlines():
+                            part1, part2 = line.split(' ', 1)
+                            if part1 == '/1':
+                                # /1 :pserver:user at example.com:2401/cvsroot/foo Ah<Z
+                                part1, part2 = part2.split(' ', 1)
+                                format = format1
+                            else:
+                                # :pserver:user at example.com:/cvsroot/foo Ah<Z
+                                format = format0
+                            if part1 == format:
+                                passw = part2
+                                break
+                        pf.close()
 
                 sck = socket.socket()
                 sck.connect((serv, port))


More information about the Mercurial-devel mailing list