1
1
# Bazaar-NG -- distributed version control
3
3
# Copyright (C) 2005 by Canonical Ltd
5
5
# This program is free software; you can redistribute it and/or modify
6
6
# it under the terms of the GNU General Public License as published by
7
7
# the Free Software Foundation; either version 2 of the License, or
8
8
# (at your option) any later version.
10
10
# This program is distributed in the hope that it will be useful,
11
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
13
# GNU General Public License for more details.
15
15
# You should have received a copy of the GNU General Public License
16
16
# along with this program; if not, write to the Free Software
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
import os, types, re, time, errno, sys
19
from shutil import copyfile
20
20
from stat import (S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE,
21
S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
21
S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
22
from cStringIO import StringIO
23
32
from bzrlib.errors import BzrError
24
33
from bzrlib.trace import mutter
26
from shutil import copyfile
28
36
def make_readonly(filename):
29
37
"""Make a filename read-only."""
30
# TODO: probably needs to be fixed for windows
31
38
mod = os.stat(filename).st_mode
32
39
mod = mod & 0777555
33
40
os.chmod(filename, mod)
117
def rename(path_from, path_to):
118
"""Basically the same as os.rename() just special for win32"""
119
if sys.platform == 'win32':
123
if e.errno != e.ENOENT:
125
os.rename(path_from, path_to)
155
152
The empty string as a dir name is taken as top-of-tree and matches
158
>>> is_inside('src', 'src/foo.c')
155
>>> is_inside('src', os.path.join('src', 'foo.c'))
160
157
>>> is_inside('src', 'srccontrol')
162
>>> is_inside('src', 'src/a/a/a/foo.c')
159
>>> is_inside('src', os.path.join('src', 'a', 'a', 'a', 'foo.c'))
164
161
>>> is_inside('foo.c', 'foo.c')
354
347
m = re.search(r'[\w+.-]+@[\w+.-]+', e)
356
raise BzrError("%r doesn't seem to contain a reasonable email address" % e)
349
raise BzrError("%r doesn't seem to contain "
350
"a reasonable email address" % e)
357
351
return m.group(0)
359
353
return _auto_user_id()[1]
363
356
def compare_files(a, b):
497
"""Split s into lines, but without removing the newline characters."""
498
return StringIO(s).readlines()
503
501
def hardlinks_good():
504
502
return sys.platform not in ('win32', 'cygwin', 'darwin')
506
505
def link_or_copy(src, dest):
507
506
"""Hardlink a file, or copy it if it can't be hardlinked."""
508
507
if not hardlinks_good():