source: tailor/vcpx/bzr.py @ 632

Revision 632, 4.2 KB checked in by lele@…, 8 years ago (diff)

Ignore the journal file when it resides under the basedir

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, ReopenableNamedTemporaryFile
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        rontf = ReopenableNamedTemporaryFile('bzr', 'tailor')
50        log = open(rontf.name, "w")
51        log.write('\n'.join(logmessage))
52        log.close()
53
54        cmd = [self.repository.BZR_CMD, "commit", "--unchanged",
55               "--file", rontf.name]
56        if not entries:
57            entries = ['.']
58
59        c = ExternalCommand(cwd=self.basedir, command=cmd)
60        c.execute(entries)
61
62        if c.exit_status:
63            raise ChangesetApplicationFailure("%s returned status %d" %
64                                              (str(c), c.exit_status))
65
66    def _removePathnames(self, names):
67        """
68        Remove some filesystem objects.
69        """
70
71        cmd = [self.repository.BZR_CMD, "remove"]
72        ExternalCommand(cwd=self.basedir, command=cmd).execute(names)
73
74    def _renamePathname(self, oldname, newname):
75        """
76        Rename a filesystem object to some other name/location.
77        """
78
79        cmd = [self.repository.BZR_CMD, "rename"]
80        ExternalCommand(cwd=self.basedir, command=cmd).execute(oldname, newname)
81
82    def _prepareTargetRepository(self):
83        """
84        Create the base directory if it doesn't exist, and the
85        repository as well in the new working directory, executing
86        ``bzr init``.
87        """
88
89        from os.path import join, exists
90        from os import makedirs
91
92        if not exists(self.basedir):
93            makedirs(self.basedir)
94
95        if not exists(join(self.basedir, self.repository.METADIR)):
96            cmd = [self.repository.BZR_CMD, "init"]
97            init = ExternalCommand(cwd=self.basedir, command=cmd)
98            init.execute()
99
100            if init.exit_status:
101                raise TargetInitializationFailure(
102                    "%s returned status %s" % (str(init), init.exit_status))
103
104    def _prepareWorkingDirectory(self, source_repo):
105        """
106        Create the .bzrignore.
107        """
108
109        from os.path import join
110        from dualwd import IGNORED_METADIRS
111
112        # Create the .bzrignore file, that contains a glob per line,
113        # with all known VCs metadirs to be skipped.
114        ignore = open(join(self.basedir, '.bzrignore'), 'w')
115        ignore.write('\n'.join(['(^|/)%s($|/)' % md
116                                for md in IGNORED_METADIRS]))
117        ignore.write('\n')
118        if self.logfile.startswith(self.basedir):
119            ignore.write('^')
120            ignore.write(self.logfile[len(self.basedir)+1:])
121            ignore.write('$\n')
122        if self.state_file.filename.startswith(self.basedir):
123            sfrelname = self.state_file.filename[len(self.basedir)+1:]
124            ignore.write('^')
125            ignore.write(sfrelname)
126            ignore.write('\n')
127            ignore.write('^')
128            ignore.write(sfrelname+'.journal')
129            ignore.write('\n')
130        ignore.close()
Note: See TracBrowser for help on using the repository browser.