source: tailor/vcpx/bzr.py @ 559

Revision 559, 3.8 KB checked in by lele@…, 8 years ago (diff)

Check for existence of target repository, don't create it twice

Line 
1# -*- mode: python; coding: utf-8 -*-
2# :Progetto: vcpx -- bazaar-ng support
3# :Creato:   ven 20 mag 2005 08:15:02 CEST
4# :Autore:   Johan Rydberg <jrydberg@gnu.org>
5# :Licenza:  GNU General Public License
6#
7
8"""
9This module implements the backends for Bazaar-NG.
10"""
11
12__docformat__ = 'reStructuredText'
13
14from target import SyncronizableTargetWorkingDir, TargetInitializationFailure
15from source import ChangesetApplicationFailure
16from shwrap import ExternalCommand
17
18class BzrWorkingDir(SyncronizableTargetWorkingDir):
19
20    ## SyncronizableTargetWorkingDir
21
22    def _addPathnames(self, names):
23        """
24        Add some new filesystem objects.
25        """
26
27        cmd = [self.repository.BZR_CMD, "add"]
28        ExternalCommand(cwd=self.basedir, command=cmd).execute(names)
29
30    def _commit(self, date, author, patchname, changelog=None, entries=None):
31        """
32        Commit the changeset.
33        """
34
35        from sys import getdefaultencoding
36
37        encoding = ExternalCommand.FORCE_ENCODING or getdefaultencoding()
38
39        logmessage = []
40        if patchname:
41            logmessage.append(patchname.encode(encoding))
42        if changelog:
43            logmessage.append(changelog.replace('%', '%%').encode(encoding))
44        logmessage.append('')
45        logmessage.append('Original author: %s' % author.encode(encoding))
46        logmessage.append('Date: %s' % date)
47        logmessage.append('')
48
49        cmd = [self.repository.BZR_CMD, "commit", "-m", '\n'.join(logmessage)]
50        if not entries:
51            entries = ['.']
52
53        c = ExternalCommand(cwd=self.basedir, command=cmd)
54        c.execute(entries)
55
56        if c.exit_status:
57            raise ChangesetApplicationFailure("%s returned status %d" %
58                                              (str(c), c.exit_status))
59
60    def _removePathnames(self, names):
61        """
62        Remove some filesystem objects.
63        """
64
65        cmd = [self.repository.BZR_CMD, "remove"]
66        ExternalCommand(cwd=self.basedir, command=cmd).execute(names)
67
68    def _renamePathname(self, oldname, newname):
69        """
70        Rename a filesystem object to some other name/location.
71        """
72
73        cmd = [self.repository.BZR_CMD, "rename"]
74        ExternalCommand(cwd=self.basedir, command=cmd).execute(oldname, newname)
75
76    def _prepareTargetRepository(self, source_repo):
77        """
78        Execute ``bzr init``.
79        """
80
81        from os.path import join, exists
82        from os import makedirs
83        from os.path import join, exists
84
85        if not exists(self.basedir):
86            makedirs(self.basedir)
87        elif exists(join(self.basedir, self.repository.METADIR)):
88            return
89
90        cmd = [self.repository.BZR_CMD, "init"]
91        init = ExternalCommand(cwd=self.basedir, command=cmd)
92        init.execute()
93
94        if init.exit_status:
95            raise TargetInitializationFailure(
96                "%s returned status %s" % (str(init), init.exit_status))
97
98    def _prepareWorkingDirectory(self, source_repo):
99        """
100        Create the .bzrignore.
101        """
102
103        from os.path import join
104        from dualwd import IGNORED_METADIRS
105
106        # Create the .bzrignore file, that contains a glob per line,
107        # with all known VCs metadirs to be skipped.
108        ignore = open(join(self.basedir, '.bzrignore'), 'w')
109        ignore.write('\n'.join(['(^|/)%s($|/)' % md
110                                for md in IGNORED_METADIRS]))
111        ignore.write('\n')
112        if self.logfile.startswith(self.basedir):
113            ignore.write('^')
114            ignore.write(self.logfile[len(self.basedir)+1:])
115            ignore.write('$\n')
116        if self.state_file.filename.startswith(self.basedir):
117            ignore.write('^')
118            ignore.write(self.state_file.filename[len(self.basedir)+1:])
119            ignore.write('\n')
120        ignore.close()
Note: See TracBrowser for help on using the repository browser.