2003-02-12  Joe Shaw  <joe@ximian.com>

	* rctalk.py (prompt): Added.  Prints out the prompt, flushes
	stdout, and calls raw_input().  Should fix problems where prompts
	weren't being redirected to a file and people were wondering why
	rc hung in scripts.

	* rclockcmds.py (LockDeleteCmd): Use rctalk.prompt() instead of
	raw_input().

	* rcpackagecmds.py (TransactCmd): Ditto.

2003-01-28  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Slightly edit the text when we get a 401

2003-01-28  Joe Shaw  <joe@ximian.com>

	* rcusercmds.py (UserEditCmd.execute): Don't allow the user to
	mess with privileges if they're not a superuser (we still show it
	if the daemon doesn't have the has_privilege call for backward
	compatibility)

2003-01-25  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageDanglingRequiresCmd): Added
	"dangling-requires" command.

	* rcmain.py (rc_copyright): Updated copyright string.

2003-01-24  Jon Trowbridge  <trow@ximian.com>

	* rcmountcmds.py (MountCmd.execute): By popular demand: If no path
	is passed in to the mount command, list the currently-mounted
	channels.  Basically, 'rc mount' is now equivalent to 'rc ch -m'.

	* rcchannelcmds.py (ListChannelsCmd.execute): By popular demand:
	Added a --mounted argument, to only list mounted channels.

2003-01-20  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py (ListChannelsCmd.execute): Added --show-ids
	option.  Users should never need this information, but we
	need it all of the time.

2003-01-16  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Handle ProtocolErrors from ximian_xmlrpclib
	that have an error code of -1, which means that the client
	couldn't communicate with the server.  Most likely to come up when
	the user uses "-h http://host" instead of https.

2003-01-10  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (TransactCmd.resolve_deps): Fixed a typo --
	missing whitespace between 'least' and 'a'.
	(PackageInstallCmd.local_opt_table): Added 'entire-channel'
	option to opt table.
	(PackageInstallCmd.execute): Added implementation of
	entire-channel option for the install command.

2002-12-19  Jon Trowbridge  <trow@ximian.com>

	* rcchannelutils.py (get_channels_by_name): If we find multiple
	matches, make a pass over the list of matches and look for exact
	matches.  If we find an exact match, drop the other matches.
	This fixes bug #35904.

2002-12-16  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): sys.exit(1) on a couple of previously
	unhandled error conditions.

2002-12-11  Joe Shaw  <joe@ximian.com>

	* rclogcmds.py (log_entries_to_table): For terse output, include
	the package name.  Fixes #35452.

2002-12-09  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (TransactCmd.resolve_deps): When listing the
	packages in the transaction, show the size of the download.  This
	fixes bug #35262.

2002-12-06  Joe Shaw  <joe@ximian.com>

	* rcmountmds.py (MountCmd.execute): Make the alias lower case.

2002-12-06  Joe Shaw  <joe@ximian.com>

	* rcsystemcmds.py (ActivateCmd): Mention that the activation code
	or email address are invalid.

	* rcprefscmds.py (PrefsListCmd): Sort the prefs alphabetically by
	name.

2002-12-05  Joe Shaw  <joe@ximian.com>

	* rclockcmds.py (LockDeleteCmd): Add arguments

2002-12-04  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_package_on_system_exactly): Removed.
	(PackageRollbackCmd): If the current version on the system and the
	rollbackable version are the same, don't show it.

2002-12-03  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_latest_package): If the search returns no
	matches, tell the user that we couldn't find it and exit out.

2002-12-03  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): Make "rc packages -u"
	show only uninstalled packages.

2002-12-03  Jon Trowbridge  <trow@ximian.com>

	* ximian_xmlrpclib.py (getparser): When we construct a fast
	unmarshaller, pass in a fault-handling callback.

2002-11-21  Jon Trowbridge  <trow@ximian.com>

	* rc.in: Defined rc_lib_dir as a path for finding binary
	extensions.

2002-11-19  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInfoCmd.execute): If no packages are
	specified, show the command usage.

2002-11-15  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): Correctly handle
	multiple channels.

2002-11-14  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.resolve_deps): Tell the user how
	many packages will be installed and how many will be removed.

2002-11-13  Joe Shaw  <joe@ximian.com>

	* rcwhatcmds.py (WhateverCmd.execute): If we don't have any
	arguments, show the usage and abort.

2002-11-13  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Allow "http://" or "https://" to be passed in
	as part of the host.

	* ximian_xmlrpclib.py (Transport.make_connection,
	SafeTransport.make_connection): Check for a ValueError back from
	the HTTP or HTTPS constructors.  Python 2.2's httplib doesn't
	throw a socket exception like 1.5's did when it has an invalid
	port, and it tries to do an int() on an invalid string literal.
	Bah.

2002-11-08  Joe Shaw  <joe@ximian.com>

	* rcchannelutils.py (refresh_channels): Use pending.get() instead
	of pending[] to avoid a traceback when refreshing a mounted channel.

2002-11-08  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.resolve_deps): If we get back a
	"package not found" fault, handle it.

2002-11-08  Joe Shaw  <joe@ximian.com>

	* rcchannelcmds.py (RefreshChannelCmd): Added "ref" as an alias.

	* rcmountcmds.py (MountCmd): Call os.path.abspath() instead of
	os.path.normpath() so relative paths work.  Get the return code to
	see if it was successful.

2002-11-06  Joe Shaw  <joe@ximian.com>

	* rclockcmds.py (LockAddCmd.execute): Show the command usage if no
	arguments are specified.
	
2002-11-05  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_package*): Clean these up a lot and make
	them all return lists of packages (except for
	find_package_on_system_exactly()). 
	(PackageListUpdatesCmd, SummaryCmd, PackageInstallCmd,
	PackageUpdateCmd): Remove "support" for	.rcexclude, since those
	are handled much better using rcd locks.
	(PackageInfoCmd, PackageInfo*Cmd, PackageInstallCmd,
	PackageRemoveCmd): Handle globbing.

2002-11-04  Joe Shaw  <joe@ximian.com>

	* rcsystemcmds.py (ShutdownCmd.execute): Ping the server in a loop
	so we can tell when the daemon has been successfully shut down.

2002-11-01  Jon Trowbridge  <trow@ximian.com>

	* rcsystemcmds.py (RecurringCmd): Added.  This is a command that
	lists any pending recurring actions.

2002-10-31  Joe Shaw  <joe@ximian.com>

	* rcchannelutils.py (get_channels_by_name): Call string.lower() on
	the channel alias so we can match against aliases that aren't all
	lowercase.

2002-10-24  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py (main): A hack -- if running the 'dump' command,
	turn on terse mode to avoid any stray whitespace.

2002-10-22  Jon Trowbridge  <trow@ximian.com>

	* rclockcmds.py (LockAddCmd.arguments): Updated.
	(LockAddCmd.local_opt_table): Removed --name option.
	(LockAddCmd.execute): Added code to try to parse a glob or
	versioned dependency out of the non-option args.

	* rcformat.py (evr_to_str): Handle packages where the version is
	specified by a "version_str" field instead of a broken-out EVR.
	(evr_to_abbrev_str): Check to make sure that the release key
	exists.

2002-10-21  Ian Peters  <itp@ximian.com>

	* rcchannelutils.py: import rcfault and ximian_xmlrpclib to avoid
	a NameError in refresh_channels

2002-10-18  Ian Peters  <itp@ximian.com>

	* Makefile.am (rcsupport_DATA): moved rclockcmds.py to follow the
	ordering

2002-10-18  Jon Trowbridge  <trow@ximian.com>

	* Makefile.am (rcsupport_DATA): Added rclockcmds.py.

2002-10-17  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd): Added the ability to filter
	searchs to include only locked or unlocked packages.

	* rclockcmds.py: Added.  Implements commands to list, add
	and remove locks.  ('add' is still sort of weak.)

	* rcmain.py: import rclockcmds

	* rcformat.py (importance_str_to_num): Added.
	(importance_num_to_str): Added.
	(importance_str_summary): Added.

2002-10-15  Ian Peters  <itp@ximian.com>

	* rcpackagecmds.py (exclude_list): don't break the loop when we
	find a line with # as the first character

2002-10-15  Jon Trowbridge  <trow@ximian.com>

	* rcusercmds.py: Added the long-lost user-edit command.

	* Makefile.am (rcsupport_DATA): Added rcmountcmds.py.

2002-10-15  Joe Shaw  <joe@ximian.com>

	* rcchannelutils.py (refresh_channels): Added.  Moved the bulk of
	the work refreshing channels here.

	* rcchannelcmds.py (RefreshChannelCmd.execute): Mostly just a
	wrapper around above.

	* rcfault.py: Added undefined_method fault (mapping to an xmlrpc-c
	fault)

	* rcsystemcmds.py (ActivateCmd): Added.  Activates the system
	against a server and refreshes the channels on success.

2002-10-11  Joe Shaw  <joe@ximian.com>

	* rcprefscmds.py (PrefsListCmd): add a -d option to not show the
	descriptions.

2002-10-10  Joe Shaw  <joe@ximian.com>

	* rcfault.py: Added undefined_method fault.

	* rcmountcmds.py: Catch an undefined_method fault when trying to
	mount or unmount and tell the user that the daemon doesn't support
	it.

	* rcpackagecmds.py (find_remote_package): Added.  Uses urllib to
	parse and download URLs for packages.
	(find_package: Call find_remote_package() if find_local_package()
	fails.
	(TransactCmd.resolve_deps): Take a rollback argument, which calls
	rcd.packsys.rollback_dependencies().
	(TransactCmd.transact): Take a rollback argument.
	(PackageRollbackCmd): Added.  Rolls back packages to their
	previous state.

2002-10-10  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py: Import rcmountcmds.

	* rcpackagecmds.py (verbose_updates_list): When printing the
	update description, don't repeat the same message multiple times.
	(i.e. just print "New Snapshot Build" once instead of repeating it
	20 times.)

	* rcmountcmds.py: Add 'mount' and 'unmount' commands.

	* rcformat.py (package_to_row): If the package is locked, append a
	"L" to the status.

2002-10-01  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Use /var/run/rcd/rcd now.

2002-09-30  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (transact_and_poll): Exit if the
	download or transaction failed, or if the user aborted a download.

2002-09-26  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageListUpdatesCmd.execute): Print a
	warning if the user isn't subscribed to any channels.

2002-09-20  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd.execute): Make sure we have a
	guessed channel before we add it to the in_channel dictionary.
	Fixes searching for packages which were installed but didn't match
	any channels.

2002-09-18  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py (main): Cal expand_synthetic_args first.  This means
	that there is much more latitude in what can be done with
	--read-from-stdin and --read-from-file.  We now call
	get_user_default_args at the point that we previously called
	expand_synthetic_args.

	* rccommand.py (get_user_default_args): Broken out from
	expand_synthetic_args.  This is the code that handles the .rcrc
	files and RC_ARGS environment variable.
	(expand_synthetic_args): This code now just handles
	--read-from-file and --read-from-stdin.  Both of these options now
	have much saner sematics.  (This all fixes bugs #30496 and
	#30497.)

2002-09-18  Joe Shaw  <joe@ximian.com>

	* rcusercmds.py: Show success/failure on adding or deleting users,
	change the text when adding a user.

2002-09-16  Joe Shaw  <joe@ximian.com>

	* rcformat.py (transaction_status): Distinguish between an
	unverified signature and a non-existent signature.

2002-09-16  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.resolve_deps): Just call
	sys.exit(0) instead of returning no values in the case of a
	successful verify.

2002-09-16  Joe Shaw  <joe@ximian.com>

	* rcprefscmds.py (PrefsListCmd.execute): Don't try to show the
	description field if we're just getting one pref.

2002-09-13  Joe Shaw  <joe@ximian.com>

	* rcprefscmds.py (PrefsListCmd.execute): Add the description field.

2002-09-13  Joe Shaw  <joe@ximian.com>

	* rcformat.py (transaction_status): Add a "verify-nosig" entry
	into the table.

2002-09-13  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Add DRY_RUN and DOWNLOAD_ONLY
	(transact_and_poll): Take in a flags argument, pass that into
	rcd.packsys.transact() instead of the dry_run argument.  Add some
	logic for download only transactions.
	(TransactCmd.transact): Split out the dependency resolution out
	into the resolve_deps method.  Skip it if we're in download only
	mode.  Set the flags and pass them into transact_and_poll().
	(PackageInstallCmd, PackageUpdateCmd): Add a -d/--download-only
	option to the local_opt_table.

2002-09-13  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (pkg_to_key): Include the channel or channel
	guess in the key string that we construct.
	(PackageSearchCmd.execute): When walking across our list of
	packages to build up the in_channel dictionary, look at all
	installed packages -- not just those that have an explicit channel.
	This, along with the previous change, allows us to filter out
	a duplicate search result if we have multiple packages with the
	same name installed. (Bug #30194)
	
2002-09-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.transact): Filter out duplicates
	before we resolve dependencies in case we have two different
	versions of one package installed and try to do an upgrade on it.

2002-09-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): Do a "name-installed"
	query when -i is used, so we see what packages by that name are
	installed, but from another channel.

2002-09-11  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): When handling a -i or -u
	option, query on "package-installed" instead of "name-installed".
	(PackageSearchCmd.execute): Ditto.  Also removed some work-around
	code that was necessary for name-installed but is no longer
	needed.

	* rcformat.py (package_to_row): Print a "v" in the status field
	if a package is name-installed but not installed.

2002-09-10  Joe Shaw  <joe@ximian.com>

	* rcformat.py (pending_to_str): take an optional "time" argument
	which determines whether to display the elapsed and estimated
	times.
	(transaction_status): Get rid of the download, finish, and failed
	messages.

	* rcpackagecmds.py (transact_and_poll): Use the much saner method
	for tracking transaction progress in the daemon.  Get the three
	pending IDs and report status to the user.

2002-09-06  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd): Always do a name-installed
	search when the --installed-only flag is set.  After we do our
	search, if we were searching across all channels, filter out ones
	that don't have the installed bit set.

2002-09-05  Joe Shaw  <joe@ximian.com>

	* ximian_xmlrpclib.py: Implement challenge/response
	authentication, make HTTP Basic auth use it, and implement HTTP
	Digest auth.

2002-08-28  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd): If "!" or "~" is prepended
	to a package name, then add that package as a package to be removed.

2002-08-28  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Check for socket.sslerror in the except clauses in a
	much more sane and functionally correct manner.

2002-08-28  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.transact): Make 'N' the default
	for transactions... it safer this way.

2002-08-28  Joe Shaw  <joe@ximian.com>

	* rclogcmds.py (log_entries_list): Add whitespace between package
	name and EVR.

2002-08-26  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Debian doesn't ship with SSL support in their socket
	implementation by default, so we have to do some nasty nested try,
	except, and raise statements to see if we can even catch
	socket.sslerror exceptions.

2002-08-23  Joe Shaw  <joe@ximian.com>

	* rcfault.py: Add no_icon fault.

2002-08-23  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Blah.  Catching the KeyboardInterrupt here
	wasn't enough.

	* rc.in: Put -everything- in a try block with a KeyboardInterrupt
	except.

2002-08-22  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Change the socket path from /tmp/rcd to
	/var/run/rcd to conform to the FHS.

2002-08-22  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py (main): As long as we are not in terse-mode, print
	some whitespace before and after we execute the command.  Catch
	the IOError exception and exit quietly so that we don't spew out a
	backtrace on broken pipes.

	* rccommand.py (RCCommand.process_argv): If getopt fails,
	try to print out a helpful message about which options were
	not recognized.

2002-08-22  Joe Shaw  <joe@ximian.com>

	* rcsystemcmds.py (PingCmd): Get server URL and whether it's an
	enhanced/premium server from the ping response.

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd): Remove the
	--show-package-ids options.  Fix a typo that prevented
	--search-descriptions from working and add a -d alias.  Always use
	"name-installed" when using --uninstalled-only and use it when
	searching just inside one channel.

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Make rc_version a global, and set it when main() gets
	called.

	* rcpackagecmds.py (transact_and_poll): Send rcmain.rc_name and
	rcmain.rc_version as the fourth and fifth arguments to
	rcd.packsys.transact().

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageUpdateCmd): We need to inherit
	TransactCmd's local_opt_table.

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageListUpdateCmd, PackageUpdateCmd): Add
	-i/--importance options which will show or update only packages of
	equal or greater importance.

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageListUpdatesCmd, SummaryCmd): Don't
	include excluded updates in these commands, but let the user know
	they're there.
	(exclude_list): Move this out of the TransactCmd class.

2002-08-21  Joe Shaw  <joe@ximian.com>

	* rcfault.py: Add cant_refresh fault.

	* rcchannelcmds.py (RefreshChannelCmd): Handle cant_refresh fault.

	* rcmain.py (main): Handle KeyboardInterrupt quietly.

2002-08-20  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Added is_basic to update, install, remove, and
	info commands.

2002-08-20  Jon Trowbridge  <trow@ximian.com>

	* rcformat.py (pending_to_str): Some tweaks to shrink the download
	status line.  Fixes (or at least helps) bug #29169.

2002-08-19  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py (main): Force the connection to be local when using
	the "help" command.  This keeps you from being prompted for a
	password if you run "rc -h foo help".

2002-08-16  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageSolveCmd.execute): If we haven't
	specified a version or release in a dep, set them to "*".  Since
	our relation is "(any)", they are ignored and we can put whatever
	we want there... but since the dep can now be displayed in an
	error message, this looks a lot better than having them set to
	"foo" and "bar" like before. :)

2002-08-15  Jon Trowbridge  <trow@ximian.com>

	* rctalk.py (stdout_is_file): Added a check to see if stdout has
	been redirected to a file.
	(message_status): If stdout has been redirected, don't print any
	escape codes with the message.
	(message_finished): Ditto.

	* rccommand.py (RCCommand.usage): Rearranged output so that the
	command-specific options appear before the general options.  Added
	a line of whitespace before the first "usage:" line.
	(usage_basic): Added whitespace after last line of text.
	(usage_full): Added whitespace after last line of text.

2002-08-12  Jon Trowbridge  <trow@ximian.com>

	* rcprefscmds.py (PrefsSetCmd.execute): If we were unable to set
	the preference, don't print the "Preference 'foo' changed from
	'bar' to 'baz'" message.

2002-08-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd): If --uninstalled-only is passed
	in without a channel, show all of the uninstalled packages across
	all channels.

2002-08-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd): Change --not-installed to
	--uninstalled-only for consistency.
	(TransactCmd): Move the generation of the exclude list here.
	(PackageInstallCmd): Warn the user if an excluded package is
	requested.

2002-08-12  Joe Shaw  <joe@ximian.com>

	* rcformat.py (transaction_status): No sense in doing a split and
	then putting a lot of them back together.  Just split the first
	colon.

	* rcpackagecmds.py (PackagesCmd): Added --installed-only and
	--not-installed flags.
	(PackageUpdatecmd): Try to open ~/.rcexclude, which contains a
	list of package names to not upgrade.

2002-08-09  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Changed PackageUpdatesCmd to
	PackageListUpdatesCmd, changed the name to "list-updates" and
	added "lu" alias.  Changed PackageUpdateAllCmd to
	PackageUpdateCmd, changed name to "update" and added "up" alias.
	Added two-letter aliases for most other commands.

	* rclogcmds.py, rcusercmds.py: Added two-letter aliases for some
	commands.

2002-08-08  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd.transact): Take a third return
	value from the dependency functions to match the change in rcd.

2002-08-08  Joe Shaw  <joe@ximian.com>

	* rcchannelcmds.py (RefreshChannelCmd.execute): Fix the percent
	calculation.

2002-08-07  Jon Trowbridge  <trow@ximian.com>

	* rccommand.py (join_args): Strip the elements of the list after
	combining, so that our two args are both treated the same.
	(expand_synthetic_args): Reverse the argument join-order for
	--read-from-file and --read-from-stdin.

	* rcchannelutils.py (validate_channel_list): Don't print our
	"'abbrev' matches 'channelname'" message in terse mode.

2002-08-07  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd.execute,
	PackageRemoveCmd.execute, PackageSolveCmd.execute): Err, we don't
	need to do that pointless map().

2002-08-06  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd.execute): If we have a
	duplicate package name in the list, abort.
	(PackageRemoveCmd.execute, PackageSolveCmd.execute): If we have
	duplicate entries in the list, show a warning.

2002-08-06  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (transact_and_poll): Call
	rctalk.message_finished() if the transfer fails, so we have a
	newline to show the failure on.
	(PackageSolveCmd.execute): Keep a list of valid relations and
	abort if it isn't valid.

2002-08-05  Joe Shaw  <joe@ximian.com>

	* rc.in: Remove extraneous imports.

2002-08-05  Aaron Weber  <aaron@ximian.com>

	* rcpackagecmds.py (PackageUpdateAllCmd.arguments): update
	descriptions.

2002-08-05  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_local_package): Use os.path.abspath() to
	get an absolute path before we hand it to the daemon.

2002-08-04  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageRemoveCmd.aliases): Added 'rm' and
	'erase' as aliases.

2002-08-02  Jon Trowbridge  <trow@ximian.com>

	* rcusercmds.py: Added categories and is_basic settings.

	* rcprefscmds.py: Added categories and is_basic settings.

	* rcsystemcmds.py: Added categories and is_basic settings.

	* rcwhatcmds.py: Added categories and is_basic settings.

	* rcpackagecmds.py: Added categories and is_basic settings.

	* rcchannelcmds.py: Added categories and is_basic settings.

	* rccommand.py (register): Check the is_basic flag, store it in
	the command_dict.
	(category_data): Added a hard-wired set of category information.
	(print_command_list): Modified to optionally split up commands by
	category.
	(usage_basic): Filter on the basic flag, not a 'basic' category.
	Print command list w/o categories.
	(usage_full): Print command list w/ categories.
	(RCCommand.is_basic): Added.  By default returns 0.
	(RCCommand.category): Default is now 'other'.
	(HelpCmd.is_basic): Returns 1.

2002-08-02  Joe Shaw  <joe@ximian.com>

	* rcmain.py: If -U isn't specified, use getpass.getuser() to get
	the current username for remote connections.

	* rcpackagecmds.py (transact_and_poll): Replace "Abort" with
	"Cancel".

	* rcprefscmds.py (PrefsSetCmd.execute): Tell the user what pref is
	being changed, what it was, and what it is now.

	* rccommand.py (HelpCmd): Added.  Shows the full usage when run.

2002-08-01  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py (main): Yet another patch from Peter Teichman, adding
	the ability to explicitly specify rcd's socket on the command
	line.

	* rcpackagecmds.py (PackageSolveCmd.execute): Another patch from
	Peter Teichman, fixing his versioned dependencies patch.

2002-07-31  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageSolveCmd.execute): Applied a patch from
	Peter Teichman that allows for versioned dependencies.
	
	* rcpackagecmds.py (PackageInfoProvidesCmd.aliases): Added 'ip' as
	an alias for 'info-provides'.
	(PackageInfoRequirementsCmd.aliases): Added 'ir' as an alias for
	'info-requirements'.
	(PackageInfoConflictsCmd.aliases): Added 'ic' as an alias for
	'info-conflicts'.
	(TransactCmd.local_opt_table): Made 'dry-run' a local option for
	our transacting commands.
	(PackageDumpCmd): Renamed the "debug" command to "dump", which
	just makes more sense.  The command is now also visible.

	* rcwhatcmds.py (WhatProvidesCmd.aliases): Added 'wp' as an alias
	for 'what-provides'.
	(WhatRequiresCmd.aliases): Added 'wr' as an alias for
	'what-requires'.
	(WhatConflictsCmd.aliases): Added 'wc' as an alias for
	'what-conflicts'.

	* rcchannelcmds.py (UnsubscribeCmd.execute): Removed dry-run
	logic... it just seems like overkill to have that option for basic
	channel operations that are inherently totally safe.
	(SubscribeCmd.execute): Ditto. 
	(RefreshChannelCmd.execute): Ditto.

	* rcmain.py (main): Set rctalk.show_debug only if the RC_DEBUG
	environment variable is set.

	* rccommand.py (default_opt_table): Removed debug, batch and
	dry-run as global options.

2002-07-30  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInfoConflictsCmd,
	PackageInfoProvidesCmd): Add arguments, and show the usage if a
	package isn't specified.

2002-07-30  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd.local_orthogonal_opts): Made
	sort-by-name and sort-by-channel orthogonal options.

2002-07-30  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Default to port 505.

2002-07-29  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageDebugCmd.execute): Send the "Getting a
	dump of the system..." and "Dump finished." messages directly to
	stderr instead using our rctalk commands.  This allows you to just
	do a 'rc debug > foo' and not have crap at the beginning and end
	of the XML file.
	
2002-07-28  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (find_package_in_channel): Print an "Unable to
	find package" warning if a specific channel was specified.
	(PackageInfoConflictsCmd.execute): Exit if the requested package
	was not found.  Suppress self-conflicts.
	(PackageInfoProvidesCmd.execute): Exit if the requested package
	was not found.

2002-07-27  Ian Peters  <itp@ximian.com>

	* rcpackagecmds.py: add "ua" as an alias to update-all

2002-07-26  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Handle socket.sslerror as well.

	* rcpackagecmds.py (transact_and_poll): Err, but we also don't
	want to be very stupid about it; make sure we only show it once.

2002-07-26  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (transact_and_poll): Print a newline after the
	download is done, and print "Download complete" there instead of
	trying to be clever and failing.

2002-07-25  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageInfoConflictsCmd.execute): Do the
	right thing if there are no conflicts.

2002-07-24  Jon Trowbridge  <trow@ximian.com>

	* rccommand.py (extract_command_from_argv): Make -?  equivalent to
	--help for determining whether to show the full or abbreviated
	usage information.

	* rcpackagecmds.py (TransactCmd.transact): Always ask for
	confirmation before transacting (unless we are in no-confirmation
	mode, of course).

2002-07-24  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Connect using HTTPS to the daemon.  Check for
	the RC_TRANSPORT_DEBUG env var and set the verbose flag on the
	transport if set.

2002-07-23  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py: Removed obsolete FIXMEs.

	* rcmain.py (main): Removed some obsolete FIXMEs.

	* rcchannelcmds.py (ListChannelsCmd.execute): Display aliases
	when listing the channels.
	(RefreshChannelCmd.execute): Only print the "Download complete"
	message once, not once per channel.

	* rcchannelutils.py (get_channel_alias): An accessor for the
	alias, with some (hackish) fallback code to create aliases if none
	is specified.
	(get_channels_by_name): Compare the input string to channel
	aliases.

	* rccommand.py (register): Get the command's category, store it in
	the command_dict along with the rest of the information.
	(print_command_list): Added.  Breaks out the code (previously in
	usage()) for formatting and printing a list of commands.
	(usage_basic): Replaces usage().  Prints out a list of our basic
	commands.
	(usage_full): Also replaces usage().  Prints out a list of all
	commands and all global options.
	(extract_command_from_argv): If there is no command on the command
	line, call usage_basic()... unless "--help" is also on the command
	line, in which case we call usage_full().
	(RCCommand.category): Added.  Our default category is "unknown".

	* rcpackagecmds.py (PackagesCmd.category): Added.  Category is
	"basic".
	(PackageSearchCmd.category): Added.  Category is "basic".
	(PackageUpdatesCmd.category): Added.  Category is "basic".
	(PackageInfoCmd.category): Added.  Category is "basic".
	(PackageInstallCmd.category): Added.  Category is "basic".
	(PackageRemoveCmd.category): Added.  Category is "basic".
	(PackageUpdateAllCmd.category): Added.  Category is "basic".
	(PackageVerifyCmd.category): Added.  Category is "basic".

	* rcchannelcmds.py (ListChannelsCmd.category): Added.  Category is
	"basic".
	(SubscribeCmd.category): Added.  Category is "basic".
	(UnsubscribeCmd.category): Added.  Category is "basic".
	(RefreshChannelCmd.category): Added.  Category is "basic".

	* rcsystemcmds.py (ShutdownCmd.is_hidden): Removed.  Command is
	now visible.

	* rcusercmds.py (UserListCmd.is_hidden): Removed.  Command is now
	visible.
	(UserAddCmd.is_hidden): Removed.  Command is now visible.
	(UserDeleteCmd.is_hidden): Removed.  Command is now visible.

	* rcwhatcmds.py (WhatProvidesCmd.aliases): Removed.
	(WhatRequiresCmd.aliases): Removed.
	(WhatConflictsCmd.aliases): Removed.

2002-07-22  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py (RefreshChannelCmd.execute): Keep track of
	the pending action IDs of our channel downloads, and block & poll
	the actions while the downloads occur.

	* rcusercmds.py (UserAddCmd.is_hidden): Should be os.getuid() !=
	0, not os.getuid != 0.
	(UserDeleteCmd): Added.  A command that deletes users from
	rc-passwd.

2002-07-22  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): If the user specified
	channels on the command-line but none of them turned out to be
	valid, abort.
	(TransactCmd.transact): If the user is using solvedeps and all the
	requirements are met, tell the user and don't bother going through
	with the transaction.

2002-07-21  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageInfoRequirementsCmd): Assorted
	polishing.

2002-07-19  Joe Shaw  <joe@ximian.com>

	* rcfault.py: Add cant_authenticate fault.

	* rcmain.py (main): Handle rcfault.cant_authenticate as well as
	rcfault.permission_denied.

2002-07-19  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py: Added very preliminary implementations
	of three new commands --- info-provides, info-requirements
	and info-conflicts.

	* rcformat.py (dep_to_str): Added.  Stringify RCPackageDep-like
	objects.
	(dep_to_abbrev_str): Added.  Stringify RCPackageDep-like objects
	gracefully.

2002-07-18  Joe Shaw  <joe@ximian.com>

	* rcchannelcmds.py (RefreshChannelCmd.execute): Check for a lock
	fault.

	* rcfault.py: Add a locked fault.

2002-07-17  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Don't import cgiwrap anymore; we don't need it.
	(main): Display the socket error when we can't connect to the
	daemon.

2002-07-17  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_local_package): Check to see if we're
	local and stream the package down if we're not.
	(get_local_file): Get rid of this.  It's icky here, and we can
	just be smarter in the daemon about it.

2002-07-17  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Declare local as global.

	* rcpackagecmds.py (find_local_package): Return a valid
	package instance, but set the "local_filename" field to the
	filename on the local system.
	(get_local_file): Added.  If the "local_filename" field is set,
	just return either the filename or the binary data (depending
	whether we're local or not) else just return the package instance.
	(PackageInfoCmd.execute): Check for a local package first.  Call
	get_local_file() before we give it to rcd.packsys.package_info().
	(transact_and_poll): Call get_local_file() on the install and
	remove package lists.
	(TransactCmd.transact): Ditto, when resolving deps.
	(PackageInstallCmd.execute): Try local files first.

2002-07-16  Jon Trowbridge  <trow@ximian.com>

	* rcusercmds.py (UserAddCmd.execute): The beginnings of a proper
	implementation of user-add.

2002-07-15  Jon Trowbridge  <trow@ximian.com>

	* rc.in: Base our "not installed properly" message on whether
	PREFIX/share/rc and PREFIX/share/rc/rcmain.py exist.

2002-07-12  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py: Removed hexstr, changed to use md5ify_password.
	(main): If the user doesn't specify a password in non-local mode,
	we prompt for one.

	* rcutil.py: Added.  Currently contains just the hexstr function
	(moved from rcmain.py) and an md5ify_password convenience
	function.

2002-07-12  Joe Shaw  <joe@ximian.com>

	* rcfault.py: Added.  A mapping of fault codes to something a
	little more sane.

	* rcmain.py, rcpackagecmds.py, rcprefscmds.py: Use rcfault.

	* rcpackagecmds.py (find_package_in_channel): Move warning the
	user to here, and handle the new package_is_newest fault.

2002-07-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (TransactCmd): Added.  A base class for all of
	the other transaction-based commands (install, remove, update-all,
	and solvedeps) to derive from.  Updates the RPC call to
	rcd.packsys.resolve_dependencies().

2002-07-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageSolveCmd): Added.  Takes a list of deps
	("gtkhtml", "libgal.so.20", etc.) and does a dependency resolution
	on them.

2002-07-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Oops, I need to call extract_packages() on all
	the dep_install and dep_remove lists so transactions work.

2002-07-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (format_dependencies): Reworked to include info
	on what channel a package is coming from, and why dependencies are
	being pulled in.
	(PackageDebugCmd.execute): Open a file for write instead of
	append; we probably just want to truncate it.

2002-07-11  Jon Trowbridge  <trow@ximian.com>

	* rctalk.py (fatal): Added (via Jose).  A convenience function
	that prints an error message and then fails.

	* rcwhatcmds.py: Add aliases for the what-foo commands.

	* rcformat.py (opt_table): If a description of an option is too
	long, wrap the text nicely.

	* rccommand.py (usage): If a description of a command is too long,
	wrap the text nicely.

2002-07-11  Frank Belew  <frb@ximian.com>

	* Makefile.am: added DESTDIR to install-exec-hook

2002-07-11  Frank Belew  <frb@ximian.com>

	* Makefile.am: add the data files as EXTRA_DIST so they get put in a 
	tarball

2002-07-11  Aaron Weber  <aaron@ximian.com>

	* rcprefscmds.py (PrefsListCmd.description_short): improve description

	* rcchannelcmds.py (RefreshChannelCmd.arguments): enhance descriptions.

	* rcprefscmds.py: enhance descriptions

	* rcpackagecmds.py (PackageInstallCmd.execute): enhance descriptions

2002-07-11  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (get_updates): We don't need to filter out
	unsubscribed channels anymore -- this is now done server-side.
	(PackagesCmd.execute): Fix sort-by-channel.

	* rcmain.py: Import rcwhatcmds.

	* rcformat.py (evr_to_str): Properly handle the has_epoch flag.

	* rcchannelutils.py (add_channel_name): Add a channel's name to
	a package struct.

	* rcwhatcmds.py: Added.  Implements what-requires, what-provides
	and what-conflicts commands.

2002-07-10  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageDebugCmd.execute): Decompress the
	binary data returned by rcd.packsys.dump()

2002-07-09  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_package_in_channel): If we don't find a
	package, set the inform variable to 0.
	(PackageInfoCmd.execute): If we don't find a package that matches
	on the system, look in a channel for it.  Improve the output slightly.

2002-07-09  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageDebugCmd): Added.  Dumps the debug info
	out to stdout or to a file specified by the user.

2002-07-09  Jon Trowbridge  <trow@ximian.com>

	* rccommand.py (register): Check if a command is hidden
	when we register it.
	(usage): Don't print hidden commands.

	* rcsystemcmds.py (ShutdownCmd.is_hidden): Hide the shutdown
	command unless we are running as root.

	* rcsystemcmds.py (ShutdownCmd): Added a command to
	gracefully shut down the server.

2002-07-08  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Handle -N/--dry-run for all the packaging
	operations, add a boolean parameter to the transact RPC call.

2002-07-08  Joe Shaw  <joe@ximian.com>

	* rcsystemcmds.py (PingCmd.execute): Show the distribution info.

2002-07-08  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (find_package_in_channel): Fix the return value
	when we can't find a package in the channel.
	(PackageInfoCmd.execute, PackageInstallCmd.execute): Allow the
	user to specify the name of the channel before the package name
	(ie, "xgd:gtkhtml") as well as the channel id.

2002-07-08  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd.execute,
	PackageRemoveCmd.execute, PackageUpdateAllCmd.execute,
	PackageVerifyCmd.execute): Catch dependency failure faults on
	resolve_dpeendencies() and verify_dependencies(), show them to the
	user, and exit out.

2002-07-08  Jon Trowbridge  <trow@ximian.com>

	* rccommand.py (usage): Stupidly, the max function fails if you
	pass it a single argument; this means that apply(max, foo)
	generates an error if len(foo) is 1.  While that case would
	probably never come up in this bit of code, it seems imprudent not
	to work around it.

	* rcpackagecmds.py (PackageInfoCmd.execute): Also changed to work
	around the max-needs-two-args bug... but in this case it can
	actually happen, so the fix is more than just pedantry.

2002-07-07  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): Catch ximian_xmlrpclib.ProtocolError, not
	cgiwrap.ProtocolError anymore.

2002-07-05  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py (ListChannelsCmd.local_orthogonal_opts): Mark
	subscribed and unsubscribed opts as orthogonal.

2002-07-03  Jon Trowbridge  <trow@ximian.com>

	* rcformat.py (pending_to_str): Added code to show the
	average download speed on the status line.

	* rcpackagecmds.py (SummaryCmd): Added "summary" command.

2002-07-03  Joe Shaw  <joe@ximian.com>

	* rcprefscmds.py: Add a command for setting preferences, and try
	to do some type mangling to make it all work out.

2002-07-03  Joe Shaw  <joe@ximian.com>

	* rcprefscmds.py: Added.  Commands for getting and setting
	preferences.

	* ximian_xmlrpclib.py (Boolean.__repr__): Return nicer strings for
	true and false boolean values.

2002-07-03  Jon Trowbridge  <trow@ximian.com>

	* rclogcmds.py (LogQueryCmd.execute): Implemented --days-back
	option.

2002-07-02  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py: Added an arguments() method for every command.

	* rcmain.py (main): Extracted a bunch of the options
	handling/parsing code and moved it into...

	* rccommand.py:	...various places in here.

	* rcpackagecmds.py (terse_updates_table): Added.  Handles output
	of updates in --terse mode.
	(exploded_updates_table): Fixed channel sorting so that we sort
	by channel name, not ID.
	(PackageUpdatesCmd.execute): Call terse_updates_table if we are
	in --terse mode.

	* rcchannelcmds.py: Added argument and description methods.

	* rcpackagecmds.py: Added argument and description methods.  Major
	decrufting of the output of our various query functions.

	* rcsystemcmds.py: Added argument and description methods.

	* rcnewscmds.py: Added argument and description methods.

	* rclogcmds.py: Added argument and description methods.

	* rccommand.py (register): Just take the constructor function as
	an arg, since we can now get the description directly from the
	object.  Register aliases in a separate dictionary.
	(construct): I've disabled matching unambiguous substrings based
	on a conversation with Karl Fogel.  Now we only match against the
	full command name or against a pre-defined set of aliases.
	(usage): Include aliases in our usage output.
	(RCCommand.aliases): Added.  A method for getting a list of
	aliases for the command.
	(RCCommand.arguments): Added.  A method returning a description of
	our non-option args which we display as part of our usage
	information.
	(RCCommand.description_short): Added.  A short description which
	is used when listing all commands.
	(RCCommand.description_long): A more detailed description that we
	use when giving --help on a specific command. 
	(RCCommand.usage): Use arguments() and description_long() to
	generate more complete --help.  If no long description has been
	provided, fall back to using description_short().

	* rcformat.py (package_to_row): Added.  Maps a package object
	into a list of columns.

	* rcchannelcmds.py: Cut all of our channel utility commands
	(get_channel_by_name, etc.) out of the top of here...

	* rcchannelutils.py: ...and moved them all here.

2002-07-02  Joe Shaw  <joe@ximian.com>

	* rcmain.py (hexstr): Function to convert the 16-byte md5 string
	to a 32-byte hexadecimal string.
	(main): Send the password over as an MD5 hash to provide some
	security.

2002-07-02  Joe Shaw  <joe@ximian.com>

	* ximian_xmlrpclib.py: Replace this with the version included in
	Python 2.2.  Forward-ported my HTTP Basic auth and unix domain
	socket patches.

2002-07-02  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (transact_and_poll): Change the output
	slightly.
	(PackageVerifyCmd): Added, allows the user to verify the
	dependency tree and install/remove packages to correct any
	inconsistencies.

2002-07-02  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py: Removed some debug spew that somehow got left in.

	* rcformat.py: Replaced some "print"s with rctalk.foo calls.
	(seconds_to_str): Added.
	(bytes_to_str): Added.
	(pending_to_str): Use seconds_to_str and bytes_to_str for nicer
	output.

	* rccommand.py: Replace a number of "print" statements
	with calls to rctalk.message, rctalk.warning, etc.

	* rcpackagecmds.py (PackageSearchCmd.execute): If
	--search-descriptions is set, use the "text" key for the search.

	* rcmain.py: Fixed some options handling breakage.  I think
	something got screwed up on my last merge.

2002-07-01  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageUpdateAllCmd) Renamed, used to be
	"PackageUpdateCmd".  That was just too close to
	"PackageUpdatesCmd" for me.
	(PackageSearchCmd): Killed off the old search command.  The
	experimental "frobnicate" searcher is now just "search".
	(append_to_table): Use the "channel_guess" when it is available.
	(PackageSearchCmd.execute): Make sure we don't display duplicate
	when we match against both the in-channel and installed records
	for the same package.

	* rcpackagecmds.py (PackageInfoCmd.execute): Print the
	recent history of each item we are requesting info on.

	* rcchannelcmds.py (channel_to_str): Removed the channel ID
	from the string we return.
	(ListChannelsCmd.execute): Don't put the channel ID in any
	of the output.

	* rcformat.py (pending_to_str): Make our pending status line
	look nicer.

	* rcnewscmds.py (textify_entities): Added.  Try to do something
	smart if our string contains an entity.
	(NewsCmd.execute): Pass strings through textify_entities before
	printing them.

	* rcpackagecmds.py (transact_and_poll): Things feel "snappier"
	if we poll more frequently during the download.

	* rclogcmds.py: Substantially reworked.  Added some more
	query-related options and added three different ways of formatting
	output corresponding to "normal", --verbose and --terse mode.
	
2002-07-01  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Make local a file-global variable, so we can see if
	we're connecting locally or over HTTP.

	* rcpackagecmds.py (find_package_in_channel): Take a fourth
	option, "allow_unsub" to allow searching for a matching package in
	unsubscribed channels.
	(find_local_package): Added.  Given a local file, returns a
	package reference.
	(PackageInfoCmd, PackageInstallCmd): Add a -u option to allow
	searching in unsubscribed channels.
	(PackageInstallCmd): Try to match any non-package on the command
	line to a local file package.

2002-06-28  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py: Strip out comments when processing the .rcrc file.
	Catch IOError exceptions when opening a file for the
	--read-from-file option.  Use join_args instead of add_args in
	"--read-from-stdin".

	* rcnewscmds.py: Added.  Implements a no-frills
	"news" command.

2002-06-28  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackagesCmd.local_orthogonal_opts): Added.
	(PackagesCmd.execute): Don't use "str" as a variable name.
	Use the string->channel functions from rcchannelcmds.py
	on the argument to the --channel option.

	* rcmain.py: Remove some spew.

2002-06-27  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackagesCmd.execute): If the --match-word
	option is set, use the 'contains_word' operator in our query
	instead of 'contains'.

2002-06-26  Jon Trowbridge  <trow@ximian.com>

	* rcmain.py: Call expanduser so that we can actually find
	the .rcrc file.
	
	* rcmain.py: Support a .rcrc file.  Fixed bugs related to handling
	of RC_ARGS, --read-from-file, etc.  Walk through our list of
	options after calling getopt and remove all but the last of any
	orthogonal options.  Catch getopt exceptions.

	* rccommand.py (default_orthogonal_opts): Added.  A list of
	groups of orthogonal options from our list of defaults.
	(RCCommand.default_orthogonal_opts): Added.
	(RCCommand.local_orthogonal_opts): Added.
	(RCCommand.orthogonal_opts): Added.

	* rc.in: Only handle the ImportError exception, so we'll get an
	intelligible error message if we have a syntax error or something
	in one of our modules.

	* rcpackagecmds.py (PackagesCmd): Added.  An implementation of my
	new interface for the "packages" command.  This is still
	experimental: it still isn't totally clear what the right
	interface for this command should be.

	* rcformat.py (pending_to_str): Use the completed_size and
	total_size information if it is available.

2002-06-25  Joe Shaw  <joe@ximian.com>

	* rc.in: Remove "--rc-profile" from the argv, not "--profile"

	* rcpackagecmds.py (transact_and_poll): Catch KeyboardInterrupt
	and abort the download if we can.

2002-06-24  Jon Trowbridge  <trow@ximian.com>

	* rcformat.py (pending_to_str): Better pending->string conversion.

	* rcchannelcmds.py (SubscribeCmd.execute): If the XML-RPC
	subscribe method fails, report it to the user.
	(UnsubscribeCmd.execute): If the XML-RPC unsubscribe method
	fails, report it to the user.

	* rc.in: Check for a magic --profile option, and run rc under the
	python profiler if it is present.

2002-06-21  Joe Shaw  <joe@ximian.com>

	* rcmain.py (main): If we don't get the HTTP error code or XML-RPC
	fault code we want, don't raise a new exception, just call "raise"
	with no arguments and it'll re-raise the current exception, stack
	trace and all.

	* rcpackagecmds.py (find_package_in_channel): Handle fault code
	-601 from the daemon: cannot find package.
	(PackageInstallCmd.execute, PackageRemoveCmd.execute): Show the
	list of packages we explicitly requested in --verbose mode.

2002-06-21  Joe Shaw  <joe@ximian.com>

	* rcmain.py: Split out all of the stuff in rc.in into here.

	* rc.in: Just a shell around rcmain.main() now.

	* rcpackagecmds.py (PackageInstallCmd): Add --allow-removals to
	the local_opt_table and disallow removals on a no-confirmation
	install unless it is set.
	(PackageUpdateCmd.execute): Show the list of packages to be
	upgraded.  Disallow removals on no-confirmation unless
	-d/--allow-removals is set.

2002-06-20  Joe Shaw  <joe@ximian.com>

	* rc.in: Handle XML-RPC and HTTP authentication errors and pass
	through all others, as they should have been handled before then.

2002-06-19  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageSearchCmd.local_opt_table): Added
	"installed-only" and "uninstalled-only" options.
	(PackageSearchCmd.execute): Filter our list of packages
	appropriately if the --installed-only or --uninstalled-only
	options are set.
	(transact_and_poll): Present the user with nicer status messages
	during downloads.

	* rctalk.py (message_status): Added.  Uses some escape-code magic
	to do status messages that don't advance to the next line.
	(message_finished): Added.  Use this to print a final status message
	and advance the line as usual.

	* rcformat.py (pending_to_str): Added.  Converts a 'pending
	status' item into a human-readable string.

2002-06-18  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageUpdateCmd): Added.  Gets a list of
	updates from the server and performs an update.
	(PackageInstallCmd, PackageRemoveCmd): Add confirmation by default
	and handle -y/--no-confirmation.

2002-06-17  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd, PackageRemoveCmd): Get
	required dependencies from the daemon and display them
	apt-get-like and proceed with the transaction.

2002-06-17  Jon Trowbridge  <trow@ximian.com>

	* rclogcmds.py: Added.  A primitive log list/query command.

2002-06-14  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInfoCmd): Added.  Shows some detailed
	package info, like rpm -qi

2002-06-14  Joe Shaw  <joe@ximian.com>

	* rcformat.py (evr_to_str, evr_to_abbrev_str): Changed to take a
	package instead of an EVR triple.
	(display_version): Remove, replaced by the above two.

	* rcpackagecmds.py (append_to_table): Abbreviate the version and
	channel name.
	(sort_and_format_table): lower() the strings, also sort by channel
	name after package name.
	(PackageListCmd, PackageSearchCmd): Take --no-abbrev.
	(PackageListCmd.execute): Accept "all" to list packages in all
	channels.
	(PackageUpdatesCmd.execute): Update the evr_fn() call.

2002-06-14  Joe Shaw  <joe@ximian.com>

	* rcformat.py (transaction_status): Added.  Takes the messages
	from the daemon and outputs a human-readable string.

	* rcpackagecmds.py (transact_and_poll): Only show download status
	if --verbose is set.

2002-06-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Change calls of rcd.packsys.query() to
	rcd.packsys.search() to match the design doc.

2002-06-12  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageUpdatesCmd): General hacking.

	* rcchannelcmds.py (check_subscription_by_id): Added.
	(get_channels_by_name): Check channel initials both with and
	without the "."=>" " substitution.  That way "Red Hat Linux 7.2"
	matches "rhl72" but "Gnome 2.0 Development Snapshots" matches the
	more natural "g2ds".

	* rcformat.py (evr_to_str): Added.  Convert EVR to a string.
	(evr_to_abbrev_str): Added.  Convert EVR to a string, converting those big
	snapshot versions into a timestamp.
	(abbrev_channel_name): Moved from rcchannelcmds.py.
	(abbrev_importance): Added.

2002-06-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageRemoveCmd): Added.
	(transact_and_poll): Move the bulk of the transaction code into
	here.

2002-06-12  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageInstallCmd.execute): Poll on the
	transaction ID so we can get status on the install.

2002-06-11  Joe Shaw  <joe@ximian.com>

	* rc: Comment out catching the xmlrpclib faults, as we probably
	want to see what they actually are for now.

	* rcpackagecmds.py (find_package): Fix to get the package either
	from a specific channel or to just get the latest matching the name.

2002-06-11  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageUpdatesCmd): Added.  A command
	for listing pending updates.

	* rcchannelcmds.py (abbrev_channel_name): Added.  A little
	function to shorten channel names.

2002-06-11  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (install_indicator): Get rid of the global
	package cache, it's no longer necessary, this speeds package
	listing and searching a ton.
	(append_to_table, sort_and_format_table): If rctalk.be_terse is
	set, always specify the	channel ID (for ease in scripting)
	(PackageSearchCmd.local_opt_table): Drop the "search-updates"
	switch from the	list.
	(PackageSearchCmd.execute): Allow a channel (or "all") to be
	specified with the -c option.  If not presented, search system
	packages.  Use the append_to_table() and sort_and_format_table()
	functions.

2002-06-11  Jon Trowbridge  <trow@ximian.com>

	* rcpackagecmds.py (PackageListCmd.execute): Allow channels to be
	specified by name, not just by ID.

2002-06-10  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py: Support --dry-run.

	* rcsystemcmds.py:  Added.  Currenly only contains the "ping"
	command.

	* rc: Added arg-processing magic to support for --terse,
	--read-from-file, --read-from-stdin and the RC_ARGS environment
	variable.

	* rccommand.py (default_opt_table): Added --read-from-file and
	--read-from-stdin.

	* rcformat.py: Format our tables without headers or excess
	whitespace if the be_terse flag is set.

	* rctalk.py: Added the be_terse flag.

2002-06-10  Joe Shaw  <joe@ximian.com>

	* rcformat.py (display_version): Added.  Outputs a correctly
	formatted version.

	* rcpackagecmds.py: Use rcformat.display_version() throughout
	(find_package): Added.  Does a query based on a package name and
	optional channel.
	(PackageInstallCmd): Added.  Incomplete and kind of broken.

2002-06-10  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (PackageListCmd): If no channels are specified,
	list the system packages.  Only show the "channel" field if there
	is more than one channel specified.

2002-06-10  Joe Shaw  <joe@ximian.com>

	* rcchannelcmds.py: Change a print to an rctalk.message

	* rccommand.py: Change the --dry-run shortcut from -n to -N and
	verbose's -v to -V so they don't conflict with other options.

	* rcpackagecmds.py: Use rctalk, add a first-cut PackageSearchCmd.

2002-06-10  Jon Trowbridge  <trow@ximian.com>

	* rcchannelcmds.py: Added smarter name-based channel matching,
	replace prints with rctalk functions.

	* rc: Implement the --debug, --quiet, --verbose options.  Replace
	a bunch of prints with calls to rctalk.message, rctalk.warning,
	etc.

	* rccommand.py (default_opt_table): Added --quiet option.

	* rcformat.py (linebreak): Added.

	* rctalk.py: Added.  An interface for printing messages, which we
	should use instead of littering the code with prints.

2002-06-10  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py (install_indicator): Get the system packages
	from the daemon so we can show if each package is installed on the
	system.

2002-06-07  Joe Shaw  <joe@ximian.com>

	* rcpackagecmds.py: Added.  Supports listing of packages in a channel.
	Doesn't do installed packages yet.

2002-06-07  Joe Shaw  <joe@ximian.com>

	* rc: Handle cases like "rc -U channels refresh 20001" in which
	"channels" could get picked up as the action instead of "refresh".

	* rcchannelcmds.py: Pulled the default_opt_table out of the
	RCCommand class so we could walk it, for the above.

2002-06-07  Joe Shaw  <joe@ximian.com>

	* All files: Change the license to explicitly require version 2 of
	the GPL.

	* rcchannelcmds.py (RefreshChannelCmd): Added, refreshes all of
	the channels on the system or a specified channel.

2002-06-07  Jon Trowbridge  <trow@ximian.com>

	* rc: Print usage info if --help or -? is passed on the command
	line.  Small option-handling clean-ups.  Added license.

	* rcformat.py (opt_table): Added.  Generates a formated description
	of a list of command options.  Added license.

	* rccommand.py: Changed command registration slightly.  Hacked
	construct to accept unambiguous partial matches (i.e. "sub"
	for "subscribe").  Added usage method to RCCommand.  Moved
	default options into an RCCommand method.  Added license.

	* rcchannelcmds.py: Added support for more options, improved
	error handling.  Added license.

