/breezy-debian/trunk

To get this branch, use:
bzr branch https://code.breezy-vcs.org/breezy-debian/trunk

« back to all changes in this revision

Viewing changes to source_distiller.py

  • Committer: Jelmer Vernooij
  • Date: 2018-10-20 22:07:46 UTC
  • Revision ID: jelmer@jelmer.uk-20181020220746-tq6dkzrkvc0nwtlu
Simplify source distiller.

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
    a location of your choice.
44
44
    """
45
45
 
46
 
    supports_use_existing = False
 
46
    def __init__(self, tree):
 
47
        """Create a SourceDistiller to distill from the specified tree.
 
48
 
 
49
        :param tree: The tree to use as the source.
 
50
        """
 
51
        self.tree = tree
 
52
 
 
53
    def distill(self, target):
 
54
        """Extract the source to a tree rooted at the given location.
 
55
 
 
56
        The passed location cannot already exist. If it does then
 
57
        FileExists will be raised.
 
58
 
 
59
        :param target: a string containing the location at which to 
 
60
            place the tree containing the buildable source.
 
61
        """
 
62
        raise NotImplementedError(self.distill)
 
63
 
 
64
 
 
65
class NativeSourceDistiller(SourceDistiller):
 
66
    """A SourceDistiller for unpacking a native package from a branch."""
 
67
 
 
68
    def __init__(self, tree):
 
69
        """Create a SourceDistiller to distill from the specified tree.
 
70
 
 
71
        :param tree: The tree to use as the source.
 
72
        """
 
73
        super(NativeSourceDistiller, self).__init__(tree)
 
74
 
 
75
    def distill(self, target):
 
76
        """Extract the source to a tree rooted at the given location.
 
77
 
 
78
        The passed location cannot already exist. If it does then
 
79
        FileExists will be raised.
 
80
 
 
81
        :param target: a string containing the location at which to 
 
82
            place the tree containing the buildable source.
 
83
        """
 
84
        if os.path.exists(target):
 
85
            raise bzr_errors.FileExists(target)
 
86
        export(self.tree, target, None, None)
 
87
 
 
88
 
 
89
class FullSourceDistiller(SourceDistiller):
 
90
    """A SourceDistiller for full-source branches, a.k.a. normal mode"""
 
91
 
 
92
    def __init__(self, tree, upstream_provider):
 
93
        """Create a SourceDistiller to distill from the specified tree.
 
94
 
 
95
        :param tree: The tree to use as the source.
 
96
        :param upstream_provider: an UpstreamProvider to provide the upstream
 
97
            tarball if needed.
 
98
        """
 
99
        super(FullSourceDistiller, self).__init__(tree)
 
100
        self.upstream_provider = upstream_provider
 
101
 
 
102
    def distill(self, target):
 
103
        """Extract the source to a tree rooted at the given location.
 
104
 
 
105
        The passed location cannot already exist. If it does then
 
106
        FileExists will be raised.
 
107
 
 
108
        :param target: a string containing the location at which to 
 
109
            place the tree containing the buildable source.
 
110
        """
 
111
        if os.path.exists(target):
 
112
            raise bzr_errors.FileExists(target)
 
113
        parent_dir = get_parent_dir(target)
 
114
        self.upstream_provider.provide(parent_dir)
 
115
        export(self.tree, target)
 
116
 
 
117
 
 
118
class MergeModeDistiller(SourceDistiller):
47
119
 
48
120
    def __init__(self, tree, upstream_provider, top_level=False,
49
 
            use_existing=False, is_working_tree=False):
 
121
                 use_existing=False):
50
122
        """Create a SourceDistiller to distill from the specified tree.
51
123
 
52
124
        :param tree: The tree to use as the source.
55
127
        :param top_level: if the tree is in the top level directory instead of inside debian/.
56
128
        :param use_existing: whether the distiller should re-use an existing
57
129
            target if the distiller supports it.
58
 
        :param is_working_tree: if `tree` is a working tree.
59
130
        """
60
 
        self.tree = tree
 
131
        super(MergeModeDistiller, self).__init__(tree)
61
132
        self.upstream_provider = upstream_provider
62
133
        self.top_level = top_level
63
134
        self.use_existing = use_existing
64
 
        if not self.supports_use_existing:
65
 
            assert not self.use_existing, "distiller doesn't support use_existing"
66
 
        self.is_working_tree = is_working_tree
67
135
 
68
136
    def distill(self, target):
69
137
        """Extract the source to a tree rooted at the given location.
74
142
        :param target: a string containing the location at which to 
75
143
            place the tree containing the buildable source.
76
144
        """
77
 
        if not self.supports_use_existing or not self.use_existing:
 
145
        if not self.use_existing:
78
146
            if os.path.exists(target):
79
147
                raise bzr_errors.FileExists(target)
80
 
        elif self.supports_use_existing and self.use_existing:
 
148
        elif self.use_existing:
81
149
            if not os.path.exists(target):
82
150
                raise bzr_errors.NotADirectory(target)
83
 
        self._distill(target)
84
 
 
85
 
    def _distill(self, target):
86
 
        """Subclasses should override this to implement distill."""
87
 
        raise NotImplementedError(self._distill)
88
 
 
89
 
 
90
 
class NativeSourceDistiller(SourceDistiller):
91
 
    """A SourceDistiller for unpacking a native package from a branch."""
92
 
 
93
 
    def _distill(self, target):
94
 
        export(self.tree, target, None, None)
95
 
 
96
 
 
97
 
class FullSourceDistiller(SourceDistiller):
98
 
    """A SourceDistiller for full-source branches, a.k.a. normal mode"""
99
 
 
100
 
    def _distill(self, target):
101
 
        parent_dir = get_parent_dir(target)
102
 
        self.upstream_provider.provide(parent_dir)
103
 
        export(self.tree, target)
104
 
 
105
 
 
106
 
class MergeModeDistiller(SourceDistiller):
107
 
 
108
 
    supports_use_existing = True
109
 
 
110
 
    def _distill(self, target):
 
151
 
111
152
        # Get the upstream tarball
112
153
        parent_dir = get_parent_dir(target)
113
154
        if parent_dir != '' and not os.path.exists(parent_dir):