~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-08-02 14:02:45 UTC
  • Revision ID: mbp@sourcefrog.net-20050802140245-b928a80bdb4fed45
- bzr mv command that works like mv in unix -- either rename or delete depending

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
 
18
# TODO: Split the command framework away from the actual commands.
 
19
 
 
20
# TODO: probably should say which arguments are candidates for glob
 
21
# expansion on windows and do that at the command level.
18
22
 
19
23
import sys, os
20
24
 
505
509
    def run(self, source_list, dest):
506
510
        b = find_branch('.')
507
511
 
 
512
        # TODO: glob expansion on windows?
508
513
        b.move([b.relpath(s) for s in source_list], b.relpath(dest))
509
514
 
510
515
 
530
535
 
531
536
 
532
537
 
 
538
class cmd_mv(Command):
 
539
    """Move or rename a file.
 
540
 
 
541
    usage:
 
542
        bzr mv OLDNAME NEWNAME
 
543
        bzr mv SOURCE... DESTINATION
 
544
 
 
545
    If the last argument is a versioned directory, all the other names
 
546
    are moved into it.  Otherwise, there must be exactly two arguments
 
547
    and the file is changed to a new name, which must not already exist.
 
548
 
 
549
    Files cannot be moved between branches.
 
550
    """
 
551
    takes_args = ['names*']
 
552
    def run(self, names_list):
 
553
        if len(names_list) < 2:
 
554
            raise BzrCommandError("missing file argument")
 
555
        b = find_branch(names_list[0])
 
556
 
 
557
        rel_names = [b.relpath(x) for x in names_list]
 
558
        
 
559
        if os.path.isdir(names_list[-1]):
 
560
            # move into existing directory
 
561
            b.move(rel_names[:-1], rel_names[-1])
 
562
        else:
 
563
            if len(names_list) != 2:
 
564
                raise BzrCommandError('to mv multiple files the destination '
 
565
                                      'must be a versioned directory')
 
566
            b.move(rel_names[0], rel_names[1])
 
567
            
 
568
    
533
569
 
534
570
 
535
571
class cmd_pull(Command):