summaryrefslogtreecommitdiff
blob: 1a4db2455cca61c8891bf7aef5f8fc1f18321827 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# HG changeset patch
# User Manuel Holtgrewe <purestorm@ggnore.net>
# Date 1194290972 -3600
# Node ID dcbda0c4c3eb8e26e01343d44fc5a8fb41138073
# Parent 453acf64f71f72158d5ee7e1d99a5e10cea5b3b5
Do not display passwords with pull/push/incoming/outgoing

Passwords specified in the repository URL are now displayed as '***'
when accessing the remote repository.

--- a/mercurial/commands.py	Fri Nov 09 20:21:35 2007 -0200
+++ b/mercurial/commands.py	Mon Nov 05 20:29:32 2007 +0100
@@ -1652,7 +1652,7 @@ def incoming(ui, repo, source="default",
     cmdutil.setremoteconfig(ui, opts)
 
     other = hg.repository(ui, source)
-    ui.status(_('comparing with %s\n') % source)
+    ui.status(_('comparing with %s\n') % util.hidepassword(source))
     if revs:
         revs = [other.lookup(rev) for rev in revs]
     incoming = repo.findincoming(other, heads=revs, force=opts["force"])
@@ -1962,7 +1962,7 @@ def outgoing(ui, repo, dest=None, **opts
         revs = [repo.lookup(rev) for rev in revs]
 
     other = hg.repository(ui, dest)
-    ui.status(_('comparing with %s\n') % dest)
+    ui.status(_('comparing with %s\n') % util.hidepassword(dest))
     o = repo.findoutgoing(other, force=opts['force'])
     if not o:
         ui.status(_("no changes found\n"))
@@ -2095,7 +2095,7 @@ def pull(ui, repo, source="default", **o
     cmdutil.setremoteconfig(ui, opts)
 
     other = hg.repository(ui, source)
-    ui.status(_('pulling from %s\n') % (source))
+    ui.status(_('pulling from %s\n') % util.hidepassword(source))
     if revs:
         try:
             revs = [other.lookup(rev) for rev in revs]
@@ -2142,7 +2142,7 @@ def push(ui, repo, dest=None, **opts):
     cmdutil.setremoteconfig(ui, opts)
 
     other = hg.repository(ui, dest)
-    ui.status('pushing to %s\n' % (dest))
+    ui.status('pushing to %s\n' % util.hidepassword(dest))
     if revs:
         revs = [repo.lookup(rev) for rev in revs]
     r = repo.push(other, opts['force'], revs=revs)
--- a/mercurial/util.py	Fri Nov 09 20:21:35 2007 -0200
+++ b/mercurial/util.py	Mon Nov 05 20:29:32 2007 +0100
@@ -15,6 +15,7 @@ from i18n import _
 from i18n import _
 import cStringIO, errno, getpass, popen2, re, shutil, sys, tempfile, strutil
 import os, stat, threading, time, calendar, ConfigParser, locale, glob, osutil
+import re, urlparse
 
 try:
     set = set
@@ -1698,3 +1699,33 @@ def uirepr(s):
 def uirepr(s):
     # Avoid double backslash in Windows path repr()
     return repr(s).replace('\\\\', '\\')
+
+def hidepassword(url):
+    '''replaces the password in the url string by three asterisks (***)
+    
+    >>> hidepassword('http://www.example.com/some/path#fragment')
+    'http://www.example.com/some/path#fragment'
+    >>> hidepassword('http://me@www.example.com/some/path#fragment')
+    'http://me@www.example.com/some/path#fragment'
+    >>> hidepassword('http://me:simplepw@www.example.com/path#frag')
+    'http://me:***@www.example.com/path#frag'
+    >>> hidepassword('http://me:complex:pw@www.example.com/path#frag')
+    'http://me:***@www.example.com/path#frag'
+    >>> hidepassword('/path/to/repo')
+    '/path/to/repo'
+    >>> hidepassword('relative/path/to/repo')
+    'relative/path/to/repo'
+    >>> hidepassword('c:\\\\path\\\\to\\\\repo')
+    'c:\\\\path\\\\to\\\\repo'
+    >>> hidepassword('c:/path/to/repo')
+    'c:/path/to/repo'
+    >>> hidepassword('bundle://path/to/bundle')
+    'bundle://path/to/bundle'
+    '''
+    url_parts = list(urlparse.urlparse(url))
+    host_with_pw_pattern = re.compile('^([^:]*):([^@]*)@(.*)$')
+    if host_with_pw_pattern.match(url_parts[1]):
+        url_parts[1] = re.sub(host_with_pw_pattern, r'\1:***@\3',
+            url_parts[1])
+    return urlparse.urlunparse(url_parts)
+
--- a/tests/test-doctest.py	Fri Nov 09 20:21:35 2007 -0200
+++ b/tests/test-doctest.py	Mon Nov 05 20:29:32 2007 +0100
@@ -7,3 +7,6 @@ doctest.testmod(mercurial.changelog)
 
 import mercurial.httprepo
 doctest.testmod(mercurial.httprepo)
+
+import mercurial.util
+doctest.testmod(mercurial.util)