~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

[merge] Added the uncommit plugin

Show diffs side-by-side

added added

removed removed

Lines of Context:
1841
1841
                raise BzrCommandError('Please supply either one revision, or a range.')
1842
1842
 
1843
1843
 
 
1844
class cmd_uncommit(bzrlib.commands.Command):
 
1845
    """Remove the last committed revision.
 
1846
 
 
1847
    By supplying the --all flag, it will not only remove the entry 
 
1848
    from revision_history, but also remove all of the entries in the
 
1849
    stores.
 
1850
 
 
1851
    --verbose will print out what is being removed.
 
1852
    --dry-run will go through all the motions, but not actually
 
1853
    remove anything.
 
1854
    
 
1855
    In the future, uncommit will create a changeset, which can then
 
1856
    be re-applied.
 
1857
    """
 
1858
    takes_options = ['all', 'verbose', 'revision',
 
1859
                    Option('dry-run', help='Don\'t actually make changes'),
 
1860
                    Option('force', help='Say yes to all questions.')]
 
1861
    takes_args = ['location?']
 
1862
    aliases = []
 
1863
 
 
1864
    def run(self, location=None, all=False,
 
1865
            dry_run=False, verbose=False,
 
1866
            revision=None, force=False):
 
1867
        from bzrlib.branch import Branch
 
1868
        from bzrlib.log import log_formatter
 
1869
        import sys
 
1870
        from bzrlib.uncommit import uncommit
 
1871
 
 
1872
        if location is None:
 
1873
            location = '.'
 
1874
        b, relpath = Branch.open_containing(location)
 
1875
 
 
1876
        if revision is None:
 
1877
            revno = b.revno()
 
1878
            rev_id = b.last_revision()
 
1879
        else:
 
1880
            revno, rev_id = revision[0].in_history(b)
 
1881
        if rev_id is None:
 
1882
            print 'No revisions to uncommit.'
 
1883
 
 
1884
        for r in range(revno, b.revno()+1):
 
1885
            rev_id = b.get_rev_id(r)
 
1886
            lf = log_formatter('short', to_file=sys.stdout,show_timezone='original')
 
1887
            lf.show(r, b.get_revision(rev_id), None)
 
1888
 
 
1889
        if dry_run:
 
1890
            print 'Dry-run, pretending to remove the above revisions.'
 
1891
            if not force:
 
1892
                val = raw_input('Press <enter> to continue')
 
1893
        else:
 
1894
            print 'The above revision(s) will be removed.'
 
1895
            if not force:
 
1896
                val = raw_input('Are you sure [y/N]? ')
 
1897
                if val.lower() not in ('y', 'yes'):
 
1898
                    print 'Canceled'
 
1899
                    return 0
 
1900
 
 
1901
        uncommit(b, remove_files=all,
 
1902
                dry_run=dry_run, verbose=verbose,
 
1903
                revno=revno)
 
1904
 
 
1905
 
1844
1906
# these get imported and then picked up by the scan for cmd_*
1845
1907
# TODO: Some more consistent way to split command definitions across files;
1846
1908
# we do need to load at least some information about them to know of