aboutsummaryrefslogtreecommitdiffstats
path: root/becommands/diff.py
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2009-12-31 15:54:12 -0500
committerW. Trevor King <wking@drexel.edu>2009-12-31 15:54:12 -0500
commitb0b5341c4045dd27cfbb3e2585cb2614ed9ad903 (patch)
tree37c7c2d011617ccd7a6f28a24ea77bb1b3cddfe7 /becommands/diff.py
parenta06030436d3940dddfba37b344f90651366d67e1 (diff)
parent2d1562d951e763fed71fe60e77cc9921be9abdc9 (diff)
downloadbugseverywhere-b0b5341c4045dd27cfbb3e2585cb2614ed9ad903.tar.gz
Merged be.restructure, major internal reorganization.
Added a bunch of classes to make the commands, user interfaces, and storage backends more abstract and distinct. This should make it much easier to extend and maintain BE. Features: * Directory restructured: becommands/ -> libbe/commands submods sorted by functionality. * Lots of new classes: Option, Argument, Command InputOutput, StorageCallbacks, UserInterface Storage * Consolidated ID handling in libbe.util.id * Transitioned VCS backends for Python-based VCSs from subprocess calss to internal python calls. Plus the user-visible changes: * New bugdir/bug/comment ID format replaces old bug:comment format. * Deprecated support for `be diff` on Arch and Darcs <= 2.3.1. A new backend abstraction (Storage) makes the former implementation ungainly. * Improved command completion. * Removed commands close, open, email_bugs, * Flipped some arguments `be assign BUG-ID [ASSIGNEE]` -> `be status ASSIGNED BUG-ID ...` `be severity BUG-ID SEVERITY` -> `be severity SEVERITY BUG-ID ...` `be status BUG-ID STATUS` -> `be status STATUS BUG-ID ...` In the merge: * Added 'commit' to list of pagerless commands. * Updated doc/README.dev See #bea86499-824e-4e77-b085-2d581fa9ccab/1100c966-9671-4bc6-8b68-6d408a910da1# for a discussion of why the changes were made and some of the difficulties en-route.
Diffstat (limited to 'becommands/diff.py')
-rw-r--r--becommands/diff.py133
1 files changed, 0 insertions, 133 deletions
diff --git a/becommands/diff.py b/becommands/diff.py
deleted file mode 100644
index c5c34f9..0000000
--- a/becommands/diff.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Copyright (C) 2005-2009 Aaron Bentley and Panometrics, Inc.
-# Gianluca Montecchi <gian@grys.it>
-# W. Trevor King <wking@drexel.edu>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-"""Compare bug reports with older tree"""
-from libbe import cmdutil, bugdir, diff
-import os
-__desc__ = __doc__
-
-def execute(args, manipulate_encodings=True, restrict_file_access=False,
- dir="."):
- """
- >>> import os
- >>> bd = bugdir.SimpleBugDir()
- >>> bd.set_sync_with_disk(True)
- >>> original = bd.vcs.commit("Original status")
- >>> bug = bd.bug_from_uuid("a")
- >>> bug.status = "closed"
- >>> changed = bd.vcs.commit("Closed bug a")
- >>> os.chdir(bd.root)
- >>> if bd.vcs.versioned == True:
- ... execute([original], manipulate_encodings=False)
- ... else:
- ... print "Modified bugs:\\n a:cm: Bug A\\n Changed bug settings:\\n status: open -> closed"
- Modified bugs:
- a:cm: Bug A
- Changed bug settings:
- status: open -> closed
- >>> if bd.vcs.versioned == True:
- ... execute(["--subscribe", "%(bugdir_id)s:mod", "--uuids", original],
- ... manipulate_encodings=False)
- ... else:
- ... print "a"
- a
- >>> if bd.vcs.versioned == False:
- ... execute([original], manipulate_encodings=False)
- ... else:
- ... raise cmdutil.UsageError('This directory is not revision-controlled.')
- Traceback (most recent call last):
- ...
- UsageError: This directory is not revision-controlled.
- >>> bd.cleanup()
- """ % {'bugdir_id':diff.BUGDIR_ID}
- parser = get_parser()
- options, args = parser.parse_args(args)
- cmdutil.default_complete(options, args, parser)
- if len(args) == 0:
- revision = None
- if len(args) == 1:
- revision = args[0]
- if len(args) > 1:
- raise cmdutil.UsageError('Too many arguments.')
- try:
- subscriptions = diff.subscriptions_from_string(
- options.subscribe)
- except ValueError, e:
- raise cmdutil.UsageError(e.msg)
- bd = bugdir.BugDir(from_disk=True,
- manipulate_encodings=manipulate_encodings,
- root=dir)
- if bd.vcs.versioned == False:
- raise cmdutil.UsageError('This directory is not revision-controlled.')
- if options.dir == None:
- if revision == None: # get the most recent revision
- revision = bd.vcs.revision_id(-1)
- old_bd = bd.duplicate_bugdir(revision)
- else:
- old_bd_current = bugdir.BugDir(root=os.path.abspath(options.dir),
- from_disk=True,
- manipulate_encodings=False)
- if revision == None: # use the current working state
- old_bd = old_bd_current
- else:
- if old_bd_current.vcs.versioned == False:
- raise cmdutil.UsageError('%s is not revision-controlled.'
- % options.dir)
- old_bd = old_bd_current.duplicate_bugdir(revision)
- d = diff.Diff(old_bd, bd)
- tree = d.report_tree(subscriptions)
-
- if options.uuids == True:
- uuids = []
- bugs = tree.child_by_path('/bugs')
- for bug_type in bugs:
- uuids.extend([bug.name for bug in bug_type])
- print '\n'.join(uuids)
- else :
- rep = tree.report_string()
- if rep != None:
- print rep
- bd.remove_duplicate_bugdir()
- if options.dir != None and revision != None:
- old_bd_current.remove_duplicate_bugdir()
-
-def get_parser():
- parser = cmdutil.CmdOptionParser("be diff [options] REVISION")
- parser.add_option("-d", "--dir", dest="dir", metavar="DIR",
- help="Compare with repository in DIR instead of the current directory.")
- parser.add_option("-s", "--subscribe", dest="subscribe", metavar="SUBSCRIPTION",
- help="Only print changes matching SUBSCRIPTION, subscription is a comma-separ\ated list of ID:TYPE tuples. See `be subscribe --help` for descriptions of ID and TYPE.")
- parser.add_option("-u", "--uuids", action="store_true", dest="uuids",
- help="Only print the bug UUIDS.", default=False)
- return parser
-
-longhelp="""
-Uses the VCS to compare the current tree with a previous tree, and
-prints a pretty report. If REVISION is given, it is a specifier for
-the particular previous tree to use. Specifiers are specific to their
-VCS.
-
-For Arch your specifier must be a fully-qualified revision name.
-
-Besides the standard summary output, you can use the options to output
-UUIDS for the different categories. This output can be used as the
-input to 'be show' to get an understanding of the current status.
-"""
-
-def help():
- return get_parser().help_str() + longhelp