~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/clean_tree.py

  • Committer: Andrew Bennetts
  • Date: 2010-07-29 11:17:57 UTC
  • mfrom: (5050.3.17 2.2)
  • mto: This revision was merged to the branch mainline in revision 5365.
  • Revision ID: andrew.bennetts@canonical.com-20100729111757-018h3pcefo7z0dnq
Merge lp:bzr/2.2 into lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
 
import errno
19
18
import os
20
19
import shutil
21
20
 
22
 
from bzrlib import (
23
 
    controldir,
24
 
    errors,
25
 
    ui,
26
 
    )
 
21
from bzrlib import bzrdir, errors
27
22
from bzrlib.osutils import isdir
28
23
from bzrlib.trace import note
29
24
from bzrlib.workingtree import WorkingTree
30
 
from bzrlib.i18n import gettext
 
25
 
31
26
 
32
27
def is_detritus(subp):
33
28
    """Return True if the supplied path is detritus, False otherwise"""
59
54
            ignored=ignored, detritus=detritus))
60
55
        deletables = _filter_out_nested_bzrdirs(deletables)
61
56
        if len(deletables) == 0:
62
 
            note(gettext('Nothing to delete.'))
 
57
            note('Nothing to delete.')
63
58
            return 0
64
59
        if not no_prompt:
65
60
            for path, subp in deletables:
85
80
        # directory and therefore delete it. (worth to FIXME?)
86
81
        if isdir(path):
87
82
            try:
88
 
                controldir.ControlDir.open(path)
 
83
                bzrdir.BzrDir.open(path)
89
84
            except errors.NotBranchError:
90
85
                result.append((path,subp))
91
86
            else:
98
93
 
99
94
def delete_items(deletables, dry_run=False):
100
95
    """Delete files in the deletables iterable"""
101
 
    def onerror(function, path, excinfo):
102
 
        """Show warning for errors seen by rmtree.
103
 
        """
104
 
        # Handle only permission error while removing files.
105
 
        # Other errors are re-raised.
106
 
        if function is not os.remove or excinfo[1].errno != errno.EACCES:
107
 
            raise
108
 
        ui.ui_factory.show_warning(gettext('unable to remove %s') % path)
109
96
    has_deleted = False
110
97
    for path, subp in deletables:
111
98
        if not has_deleted:
112
 
            note(gettext("deleting paths:"))
 
99
            note("deleting paths:")
113
100
            has_deleted = True
 
101
        note('  ' + subp)
114
102
        if not dry_run:
115
103
            if isdir(path):
116
 
                shutil.rmtree(path, onerror=onerror)
 
104
                shutil.rmtree(path)
117
105
            else:
118
 
                try:
119
 
                    os.unlink(path)
120
 
                    note('  ' + subp)
121
 
                except OSError, e:
122
 
                    # We handle only permission error here
123
 
                    if e.errno != errno.EACCES:
124
 
                        raise e
125
 
                    ui.ui_factory.show_warning(gettext(
126
 
                        'unable to remove "{0}": {1}.').format(
127
 
                                                    path, e.strerror))
128
 
        else:
129
 
            note('  ' + subp)
 
106
                os.unlink(path)
130
107
    if not has_deleted:
131
 
        note(gettext("No files deleted."))
 
108
        note("No files deleted.")