[Pkg-bazaar-commits] ./bzr/unstable r86: first cut at recursive add

mbp at sourcefrog.net mbp at sourcefrog.net
Fri Apr 10 07:44:19 UTC 2009


------------------------------------------------------------
revno: 86
committer: mbp at sourcefrog.net
timestamp: Fri 2005-03-25 13:58:34 +1100
message:
  first cut at recursive add
modified:
  bzrlib/add.py
-------------- next part --------------
=== modified file 'bzrlib/add.py'
--- a/bzrlib/add.py	2005-03-23 03:09:50 +0000
+++ b/bzrlib/add.py	2005-03-25 02:58:34 +0000
@@ -17,10 +17,11 @@
 import types, os, sys, stat
 import bzrlib
 
-from osutils import quotefn
+from osutils import quotefn, appendpath
 from errors import bailout
+from trace import mutter
 
-def smart_add(file_list, verbose=False, recurse=False):
+def smart_add(file_list, verbose=False, recurse=True):
     """Add files to version, optionall recursing into directories.
 
     This is designed more towards DWIM for humans than API simplicity.
@@ -30,8 +31,18 @@
     assert not isinstance(file_list, types.StringTypes)
     b = bzrlib.branch.Branch(file_list[0], find_root=True)
     inv = b.read_working_inventory()
+    tree = b.working_tree()
     dirty = False
 
+    def add_one(rf, kind):
+        file_id = bzrlib.branch.gen_file_id(rf)
+        inv.add_path(rf, kind=kind, file_id=file_id)
+        bzrlib.mutter("added %r kind %r file_id={%s}" % (rf, kind, file_id))
+        dirty = True
+        if verbose:
+            bzrlib.textui.show_status('A', kind, quotefn(f))
+        
+
     for f in file_list:
         rf = b.relpath(f)
         af = b.abspath(rf)
@@ -42,27 +53,34 @@
             bailout("cannot add control file %r" % af)
 
         kind = bzrlib.osutils.file_kind(f)
+        versioned = (inv.path2id(rf) != None)
+
+        ## TODO: It's OK to add '.' but only in recursive mode
+
         if kind == 'file':
-            if inv.path2id(rf):
+            if versioned:
                 bzrlib.warning("%r is already versioned" % f)
                 continue
+            else:
+                add_one(rf, kind)
         elif kind == 'directory':
-            if inv.path2id(rf):
-                if not recurse:
-                    bzrlib.warning("%r is already versioned" % f)
-                    continue
-                else:
-                    # TODO: don't add, but recurse down
-                    continue
+            if versioned and not recurse:
+                bzrlib.warning("%r is already versioned" % f)
+                continue
+            
+            if not versioned:
+                add_one(rf, kind)
+
+            if recurse:
+                for subf in os.listdir(af):
+                    subp = appendpath(rf, subf)
+                    if tree.is_ignored(subp):
+                        mutter("skip ignored sub-file %r" % subp)
+                    else:
+                        mutter("queue to add sub-file %r" % (subp))
+                        file_list.append(subp)
         else:
             bailout("can't smart_add file kind %r" % kind)
 
-        file_id = bzrlib.branch.gen_file_id(rf)
-        inv.add_path(rf, kind=kind, file_id=file_id)
-        bzrlib.mutter("added %r kind %r file_id={%s}" % (rf, kind, file_id))
-        dirty = True
-        if verbose:
-            bzrlib.textui.show_status('A', kind, quotefn(f))
-
     if dirty:
         b._write_inventory(inv)



More information about the Pkg-bazaar-commits mailing list