~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/add.py

  • Committer: mbp at sourcefrog
  • Date: 2005-03-24 00:13:07 UTC
  • Revision ID: mbp@sourcefrog.net-20050324001307-90a30f7939a6a6f6
- split info command out into separate file

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import types, os, sys, stat
18
18
import bzrlib
19
19
 
20
 
from osutils import quotefn, appendpath
 
20
from osutils import quotefn
21
21
from errors import bailout
22
 
from trace import mutter, note
23
22
 
24
 
def smart_add(file_list, verbose=False, recurse=True):
 
23
def smart_add(file_list, verbose=False, recurse=False):
25
24
    """Add files to version, optionall recursing into directories.
26
25
 
27
26
    This is designed more towards DWIM for humans than API simplicity.
28
27
    For the specific behaviour see the help for cmd_add().
29
28
    """
30
29
    assert file_list
31
 
    assert not isinstance(file_list, basestring)
 
30
    assert not isinstance(file_list, types.StringTypes)
32
31
    b = bzrlib.branch.Branch(file_list[0], find_root=True)
33
32
    inv = b.read_working_inventory()
34
 
    tree = b.working_tree()
35
 
    count = 0
 
33
    dirty = False
36
34
 
37
35
    for f in file_list:
38
36
        rf = b.relpath(f)
39
37
        af = b.abspath(rf)
40
38
 
41
 
        ## TODO: It's OK to add root but only in recursive mode
42
 
 
43
39
        bzrlib.mutter("smart add of %r" % f)
44
40
        
45
41
        if bzrlib.branch.is_control_file(af):
46
42
            bailout("cannot add control file %r" % af)
47
43
 
48
44
        kind = bzrlib.osutils.file_kind(f)
49
 
 
50
 
        if kind != 'file' and kind != 'directory':
51
 
            bailout("can't add file of kind %r" % kind)
52
 
            
53
 
        versioned = (inv.path2id(rf) != None)
54
 
 
55
 
        if rf == '':
56
 
            mutter("branch root doesn't need to be added")
57
 
        elif versioned:
58
 
            mutter("%r is already versioned" % f)
 
45
        if kind == 'file':
 
46
            if inv.path2id(rf):
 
47
                bzrlib.warning("%r is already versioned" % f)
 
48
                continue
 
49
        elif kind == 'directory':
 
50
            if inv.path2id(rf):
 
51
                if not recurse:
 
52
                    bzrlib.warning("%r is already versioned" % f)
 
53
                    continue
 
54
                else:
 
55
                    # TODO: don't add, but recurse down
 
56
                    continue
59
57
        else:
60
 
            file_id = bzrlib.branch.gen_file_id(rf)
61
 
            inv.add_path(rf, kind=kind, file_id=file_id)
62
 
            bzrlib.mutter("added %r kind %r file_id={%s}" % (rf, kind, file_id))
63
 
            count += 1 
64
 
            if verbose:
65
 
                bzrlib.textui.show_status('A', kind, quotefn(f))
66
 
 
67
 
        if kind == 'directory' and recurse:
68
 
            for subf in os.listdir(af):
69
 
                subp = appendpath(rf, subf)
70
 
                if subf == bzrlib.BZRDIR:
71
 
                    mutter("skip control directory %r" % subp)
72
 
                elif tree.is_ignored(subp):
73
 
                    mutter("skip ignored sub-file %r" % subp)
74
 
                else:
75
 
                    mutter("queue to add sub-file %r" % (subp))
76
 
                    file_list.append(subp)
77
 
 
78
 
    if count > 0:
 
58
            bailout("can't smart_add file kind %r" % kind)
 
59
 
 
60
        file_id = bzrlib.branch.gen_file_id(rf)
 
61
        inv.add_path(rf, kind=kind, file_id=file_id)
 
62
        bzrlib.mutter("added %r kind %r file_id={%s}" % (rf, kind, file_id))
 
63
        dirty = True
79
64
        if verbose:
80
 
            note('added %d' % count)
 
65
            bzrlib.textui.show_status('A', kind, quotefn(f))
 
66
 
 
67
    if dirty:
81
68
        b._write_inventory(inv)