OSDN Git Service

Collect distributable package files in user specified directory.
[mingw/mingw-get.git] / ChangeLog
index e6cb4e3..14bfb06 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,543 @@
+2013-06-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Collect distributable package files in user specified directory.
+
+       * Makefile.in (distdir): New macro; define default as abs_builddir.
+       (srcdist, bindist, licdist): Use it; direct generated tarballs to it.
+       (%.txt.dist): New pattern rule; define, and use it to make a copy...
+       (readme.txt): ...of this, in distdir, when processing...
+       (dist): ...this build objective.
+
+2013-06-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Handle Microsoft's 32-bit vs. 64-bit time_t ambiguity.
+
+       * src/apihook.c: New file; it provides...
+       (have_api): ...this helper; it checks for availability of any specific
+       API function, within a specific system DLL, (MSVCRT.DLL by default).
+
+       * src/tarproc.cpp (have_utime64_api): New inline function; it wraps...
+       (have_api): ...this, to check whether MSVCRT.DLL provides...
+       (commit_saved_entity) [_utime64]: ...this; use if available, else...
+       (commit_saved_entity) [!_utime64]: ...fall back to using...
+       (utime): ...this.
+
+       * Makefile.in (CORE_DLL_OBJECTS): Add apihook.$OBJEXT
+
+2013-06-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Facilitate package extraction and registration at setup time.
+
+       * src/pkgproc.h (IMPLEMENTATION_LEVEL): Add filters to facilitate
+       implementation of distinct setup time archive processing behaviour.
+       (pkgArchiveProcessor::save_on_extract): New property; declare it.
+       (pkgArchiveProcessor::SaveExtractedFiles): New method; implement it.
+       (pkgArchiveProcessor::SetOutputStream): New method; declare it.
+
+       * src/tarproc.cpp (IMPLEMENTATION_LEVEL): Add filters to implement
+       distinct setup time specific archive processing behaviour.
+       (pkgArchiveProcessor::SetOutputStream): Implement it.
+       (pkgTarArchiveExtractor::ProcessDataStream): Use it.
+       (pkgTarArchiveInstaller::ProcessDataStream): Likewise.
+
+2013-06-13  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Implement some GUI progress metering dialogue enhancements.
+
+       * src/pkgbase.h (pkgProgressMeter): Don't pre-empt private features
+       of derived progress metering classes; hence, we no longer need this...
+       (AppWindowMaker): ...as a forward class declaration; delete it.
+
+       * src/guimain.rc (IDD_REPO_UPDATE): Resize, and adjust layout.
+       (IDD_PROGRESS_VAL, IDD_PROGRESS_MAX, IDD_PROGRESS_PCT): Add these
+       dialogue box progress counter display elements.
+
+       * src/pkgbind.cpp (pkgRepository::GetPackageList): Adjust style of
+       progress status messages, to suit reporting via GUI dialogue box or
+       CLI console, as appropriate.
+
+       * src/guiexec.cpp (ProgressMeterMaker): Redefine class, in terms of...
+       (PROGRESS_METER_CLASS): ...this new generic class name macro.
+       Reimplement private members, previously inherited from base class;
+       adjust class constructor to ensure that they are initialised.
+       Delete explicit destructor; a default destructor is now sufficient.
+       (ProgressMeterMaker::SetRange, ProgressMeterMaker::SetValue):
+       (ProgressMeterMaker::Annotate): Factor out; reimplement them...
+
+       * src/pmihook.cpp: ...in this new file, as generalised methods of...
+       (PROGRESS_METER_CLASS): ...the class named by this macro.
+       (PROGRESS_METER_CLASS::PutVal): New private method; implement it.
+
+2013-05-31  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Avoid a potential macro definition conflict.
+
+       * src/pkgbase.h (strcasecmp) [__MINGW32__]: Use string.h definition.
+
+2013-05-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Streamline build-time dependency tracking procedures.
+
+       * Makefile.in (DEPFLAGS): Adjust for simultaneous .o/.d generation.
+       (RC_DEPFLAGS): New macro; define dependency generation flags for the
+       resource compiler, which can't handle the new DEPFLAGS methodology.
+       (%.c, %.cpp, %.rc): Simplify $OBJEXT generation procedures.
+       (%.time): Remove redundantly replicated build-time procedure from...
+       (%.tagged.time): ...this; just make it a prerequisite.
+
+2013-05-15  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Add resources for specification of product version.
+
+       * src/verinfo.rc src/verinfo.h.in: New files; included by...
+       * src/guimain.rc: ...this, whence also specify version information...
+       (VERINFO_FILE_NAME, VERINFO_INTERNAL_NAME, VERINFO_FILE_DESCRIPTION):
+       (VERINFO_FILE_VERSION, VERINFO_FILE_VERSION_STRING): ...per these new
+       manifest constant macros; define them, with propagation to...
+       (ID_MAIN_WINDOW_CAPTION): ...this; keep it consistent.
+
+       * Makefile.in (TAG_SCRIPT): Include invocation for...
+       (PACKAGE_VERINFO_SCRIPT): ...this new macro; defined to interpret...
+       (PACKAGE_VERINFO_PRODUCT_VERSION): ...this new substitution template;
+       it is used in src/verinfo.h.in, whence verinfo.h is generated.
+       (RC_INCLUDES): Add current working directory, for...
+       (verinfo.h): ...this; add rule and dependencies to generate it.
+
+2013-05-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Make application manifest resource definition reusable.
+
+       * src/manifest.rc: New file; factor content from...
+       * src/guimain.rc: ...here, whence include it.
+
+2013-05-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Extend DMH services to delay-loaded DLL clients.
+
+       * src/dmhcore.h (dmh_bind): New function; declare it.
+       * src/dmhcore.cpp (dmh_bind): Implement it; it provides an API through
+       which the setup tool makes its existing DMH services available to post
+       install hooks in mingw-get-0.dll, which cannot be loaded until after
+       the providing package has been downloaded and unpacked.
+
+2013-05-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Avoid unnecessary command line globbing in GUI applications.
+
+       * src/guimain.cpp src/guistub.cpp (_CRT_glob): Declare as extern "C";
+       initialise to zero, so overriding the runtime start-up default.
+
+       * src/rites.c [! IMPLEMENT_INITIATION_RITES] (_CRT_glob): Initialise
+       to zero here too; lastrites.exe doesn't need globbing either.
+
+2013-05-04  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Address some GCC-4.7 string initialisation warnings.
+
+       * src/pkglist.cpp (AppWindowMaker::InitPackageListView): Declare all
+       headings[].text initialisers as 'const'; cast to 'char *' as required.
+       (pkgListViewMaker::Dispatch): Ditto, when inserting the 'const' empty
+       string into the list, as a component class value.
+
+       * src/pkgdata.cpp (AppWindowMaker::InitPackageTabControl): Declare all
+       TabLegend[] initialisers as 'const'; cast to 'char *' as required.
+
+2013-05-02  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Correct a spin wait thread synchronisation issue.
+
+       * src/pkgnget.cpp (pkgDownloadMeterGUI::SpinWait): Handle stop
+       requests explicitly; acknowledge when waiting thread has stopped.
+       (pkgDownloadMeterGUI::SpinWaitAction): Raise explicit stop requests;
+       wait for acknowledgement that waiting thread has stopped.
+
+2013-04-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Select compressed data streaming filters for use by setup tool.
+
+       * src/pkgstrm.cpp [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]:
+       Exclude the implementations of all decompression filters, except...
+       (pkgXzArchiveStream): ...this, together with its requisite methods...
+       (pkgArchiveStream, pkgLzmaArchiveStream): ...from these.
+
+2013-04-23  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Adapt internet download agent for use by setup tool.
+
+       * src/pkgbase.h: More code rearrangement, exposing...
+       (safe_strcmp): ...this in any implementation context, controlled...
+       [USES_SAFE_STRCMP && ! HAVE_SAFE_STRCMP]: ...by this; when true...
+       (HAVE_SAFE_STRCMP): ...define this to 1, (must be non-zero).
+       [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: Ensure that...
+       (USES_SAFE_STRCMP): ...this is defined to 1, (i.e. non-zero).
+       (EXTERN_C): Relocate macro definition...
+       * src/pkgimpl.h: ...to here; add complementary implementation of...
+       (BEGIN_C_DECLS, END_C_DECLS): ...these new macros; define them.
+
+       * src/pkginet.h (pkgDownloadMeter::SpinWait): New static method;
+       declare it as inline, to be implemented elsewhere, delegating to...
+       (pkgDownloadMeter::SpinWaitAction): ...this new protected virtual
+       method; declare and implement it inline, as a "do nothing" base
+       class method, to be optionally overridden in a derived class.
+
+       * src/pkginet.cpp (pkgDownloadMeter::SpinWait): Implement it.
+       (pkgInternetAgent::OpenURL): Use it to invoke SpinWaitAction().
+       (USES_SAFE_STRCMP): Define as 1; (safe_strcmp() is required).
+       [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]: Filter out code
+       which may not be required in more specialised contexts, then...
+       [IMPLEMENTATION_LEVEL == SETUP_TOOL_COMPONENT]: ...add specialised
+       variants specific to this.
+
+       * src/pkgnget.cpp [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]:
+       Filter out code which may not be required in more specialised context.
+       (dmh_setpty): Provide locally declared prototype for external function.
+       (pkgDownloadMeterGUI): Add pseudo-terminal diagnostic message window.
+       (pkgDownloadMeterGUI::SpinWaitAction): Declare and implement GUI
+       specific method specialisation; it invokes a thread, running...
+       (pkgDownloadMeterGUI::SpinWait): ...this new static method overload.
+
+2013-04-19  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Implement pre-emptive update issue number identification.
+
+       * src/pkgkeys.h (serial_number): Declare function prototype.
+       * src/pkginet.cpp (serial_number): Implementation remains here;
+       promote from static to extern "C".
+
+       * src/pkgbind.cpp (value_assumed_new): New char constant; define it.
+       (pkgRepository::expected_issue): New private member var; declare and...
+       (pkgRepository::pkgRepository): ...initialise it, assuming new.
+       (pkgRepository::GetPackageList): Assign pre-emptively declared issue
+       number, (from package-list references), to 'expected_issue'; compare it
+       with 'current_issue' number recorded within locally stored catalogue.
+       [current_issue >= expected_issue]: Suppress redundant download; adjust
+       diagnostic messages as appropriate.
+
+2013-04-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Fix MinGW-Bug #1601 (on new issues tracker).
+
+       * aclocal.m4 (makeopts.m4): New build-aux module; include it.
+       (MINGW_AC_PROG_LEX): New macro; implement it.
+       
+       * configure.ac (AC_INIT): Make version number tripartite.
+       (MINGW_AC_MAKE_NO_PRINT_DIRECTORY): Use this new makeopts.m4 macro.
+       (MINGW_AC_PROG_LEX): Use it, in place of...
+       (AC_PROG_LEX): ...this.
+
+       * Makefile.in (MAKE): New macro; assign using autoconf's SET_MAKE.
+       (QUIET_MAKE): New macro; derive it from $(MAKE) --no-print-directory.
+       (LEX_COMMAND, LEX_COMMAND_ABORT): New macros; define them.
+       (LEX_MISSING, LEX_MISSING_MESSAGE, LEX_OUTPUT): Likewise.
+       (FORMAT_MESSAGE, MESSAGE_FOLD_WIDTH): Likewise; implemented from...
+       (AWK_CLEAR_LINE_BUFFER, AWK_FLUSH_BUFFER, AWK_PRINT_AND_CLEAR_BUFFER):
+       (AWK_COLLECT_MESSAGE, AWK_COLLECT_BLANK_LINE, AWK_PRINT_LINE_BUFFER):
+       ...this collection of internal helper macros; define them.
+       (%.c: %.l): Replacement for built-in rule; it handles "missing lex" in
+       a manner consistent with expectations of autoconf's AC_PROG_LEX.
+       (execute-command): New phoney build goal; it is used with...
+       (WITH_REQUEST): ...this new macro, to invoke commands recursively.
+
+2013-03-25  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Adapt DMH for use in setup tool.
+
+       * src/dmh.cpp: File renamed to...
+       * src/dmhcore.cpp: ...this; some code rearranged, to facilitate...
+       [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: ...marking of code
+       sections which are required in the base package build, but which may
+       be filtered out of the build context for the setup tool.
+       
+       * src/guidmh.cpp: File renamed to this...
+       * src/dmhguix.cpp: ...this; also add marking for...
+       [IMPLEMENTATION_LEVEL == PACKAGE_BASE_COMPONENT]: ...sections which
+       may be filtered out of the build context for the setup tool.
+       (dmhTypePTY::printf): Improve stratagem for output.
+
+       * Makefile.in (CORE_DLL_OBJECTS, GUIMAIN_OBJECTS): Adjust references
+       to renamed source files.
+
+2013-03-22  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Enable context hooks for build time code filtering.
+
+       * src/pkgimpl.h: New file; it defines...
+       (PACKAGE_BASE_COMPONENT, SETUP_TOOL_COMPONENT): ...these contexts;
+       either of these may be selected, by defining as manifest value for...
+       (IMPLEMENTATION_LEVEL): ...this; default is PACKAGE_BASE_COMPONENT.
+
+       * src/pkgbase.h: Include pkgimpl.h
+       [IMPLEMENTATION_LEVEL != PACKAGE_BASE_COMPONENT]: Occlude content.
+
+2013-03-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Specify additional files for clean-up.
+
+       * Makefile.in (distclean): Additionally specify...
+       (build.tag, build.time): ...these, as removable files.
+
+2013-03-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Add a missing distribution dependency.
+
+       * Makefile.in (srcdist): Explicitly require...
+       (pkginfo.c): ...this; previously, it was only an implicit build time
+       requirement, and may not have persisted until distribution time.
+
+2013-03-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Implement by-name association of resource scripts with programs.
+
+       * src/guidata.rc: Renamed as...
+       * src/guimain.rc: ...this, reflecting its association with...
+       * src/guimain.cpp: ...this program source.
+
+       * Makefile.in (GUIMAIN_OBJECTS): Update dependency...
+       (%.$OBJEXT:%.rc): ...replacing use of this pattern rule...
+       (%.res.$OBJEXT:%.rc): ...with this.
+
+2013-01-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Make GUI support visual styles in current Windows versions.
+
+       * src/guidata.rc: Add an appropriate inline manifest resource.
+
+       * src/guiexec.cpp (AppWindowMaker::Invoked): Ensure UpdateWindow() is
+       called after the initial call to AdjustLayout(); this is required to
+       ensure that all child windows are properly displayed from the outset.
+
+       * src/pkgview.cpp (AppWindowMaker::LayoutEngine):
+       [ID_PACKAGE_DATASHEET]: Adjust the top position of the frame, to make
+       the border coincide with the bottom border of the tab strip above.
+
+2013-01-12  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Merge gui-dev branch head to master; close gui-dev branch.
+
+       * configure.ac (AC_INIT): Reset version to 0.6; reset all package
+       files to state prevailing at gui-dev branch head.
+
+2013-01-11  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Create release branch for further r0.5 development.
+
+       * configure.ac (AC_INIT): Bump version number to 0.5.1; assign branch
+       label (mercurial bookmark) as "r0-5-1" for all files; (this is not to
+       be released, at this time).
+
+2013-01-10  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Implement data sheet compiler for list of installed files.
+
+       * src/pkgdata.cpp: #include pkgproc.h; it furnishes...
+       (pkgManifest): ...this class declaration, which is required by...
+       (DataSheetMaker::DisplayFilesManifest): ...this new private inline
+       method; declare and implement it; subsequently, invoke it...
+       (DataSheetMaker::OnPaint) [PKG_DATASHEET_INSTALLED_FILES]: ...here.
+       (pkgTroffLayoutEngine::WriteLn): Correct a defect in handling of
+       excess-length unbreakable "words" outside the viewport; previously
+       they were not dropped from the input queue, resulting in repeated
+       reprocessing in an infinite loop.
+
+2013-01-09  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Include release tags in GUI displayed package versions.
+
+       * src/pkglist.cpp (pkgVersionString) [ReleaseStatus != NULL]:
+       Append ReleaseStatus and ReleaseIndex to generated version string.
+
+2013-01-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Fix enumeration of pending install actions for scheduled upgrades.
+
+       * src/pkgdata.cpp (pkgActionItem::EnumeratePendingActions):
+       [action == ACTION_UPGRADE && classified == ACTION_INSTALL]: Enumerate
+       upgrade as a special case of the install classification.
+
+2013-01-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Implement "Mark All Upgrades" GUI capability.
+
+       * src/guimain.h (IDM_REPO_APPLY): Renumbered; make room for...
+       (IDM_REPO_MARK_UPGRADES): ...this new constant; define it.
+
+       * src/guidata.rc (IDM_REPO_MARK_UPGRADES): New option; add it...
+       (ID_MAIN_WINDOW_WINDOW) [Installation]: ...to this drop-down menu.
+
+       * src/pkgbase.h (pkgActionItem::SuppressRedundantUpgrades): New
+       public inline method; declare it.
+
+       * src/guiexec.cpp (AppWindowMaker::OnCommand):
+       [IDM_REPO_MARK_UPGRADES]: Add case handler for this menu selection.
+       (pkgActionItem::SuppressRedundantUpgrades): New method; implement it.
+
+2013-01-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Avoid unnecessary reloading of package list.
+
+       * src/guiexec.cpp (AppWindowMaker::OnCommand) [IDM_REPO_APPLY]:
+       Do not reload package list after processing; update it in place.
+
+2013-01-08  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Avoid potential heap corruption in action scheduler.
+
+       * src/guiexec.cpp (pkgActionItem::Clear): Factor out; relocate to...
+       * src/pkgexec.cpp (pkgActionItem::Clear): ...here; this keeps all use
+       of new and delete operators on the same side of the EXE/DLL boundary
+       as the constructor and destructor for pkgActionItem objects.
+       (pkgActionItem::Schedule): Ensure that all min_wanted and max_wanted
+       references are unique to each allocated pkgActionItem object, so that
+       the destructor may safely release their associated heap memory blocks.
+
+2013-01-07  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Update copyright notification for development in new year.
+
+       * configure.ac (YEARS_OF_ISSUE): Add year 2013.
+
+       * Makefile.in (version.c, guidata.$OBJEXT): Make them depend on...
+       (Makefile): ...this, so YEARS_OF_ISSUE propagates to built objects.
+
+2012-12-24  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Work around a GUI action scheduling instability.
+
+       * src/guimain.h (AppWindowMaker::UpdateDataSheet): Declare new method.
+       * src/pkgdata.cpp (AppWindowMaker::UpdateDataSheet): Implement it.
+       (AppWindowMaker::OnNotify): Use it.
+
+       * src/guiexec.cpp (AppWindowMaker::OnCommand) [IDD_REPO_APPLY]:
+       Don't refresh package list view in-place; clear and reload it instead.
+
+2012-12-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Update distribution build rules.
+
+       * Makefile.in (SRCDIST_FILES): Remove version.c.in; this was moved
+       to src/version.c.in, and is now automatically included via...
+       (SRCDIST_SUBDIRS): ...this; remove build-aux and build-aux/m4; we want
+       only selected files from these, as filtered by specification in...
+       (BUILD_AUX_DIRS, BUILD_AUX_FILES): ...these new macros; define them.
+       (BLDTAG, SCMTAG, GCMTAG): New release class macros; define them.
+       (bindist, licdist, srcdist): Use them.
+
+2012-12-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Update CLI implementation hooks for GUI integration.
+
+       * Makefile.in (LIBEXEC_PROGRAMS): Replace gui$EXEEXT with
+       guistub$EXEEXT; update make goal references accordingly.
+
+       * src/rites.c (MINGW_GET_GUI): Redefine to be guimain$EXEEXT.
+       (MINGW_GET_GFB): Define new fall-back; let it be guistub$EXEEXT.
+       (RITES_IMPLEMENTATION): Perform rites for MINGW_GET_GUI.
+
+       * src/clistub.c (main) [cannot exec MINGW_GET_GUI]: Try
+       MINGW_GET_GFB instead.
+
+2012-12-21  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Rename executive core file for GUI implementation.
+
+       * src/guixmld.cpp: File renamed...
+       * src/guiexec.cpp: ...to this; its function exceeds original intent.
+       * Makefile.in (GUIMAIN_OBJECTS): Update reference accordingly.
+
+2012-12-20  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Create foundation for implementation of package category tree view.
+
+       * Makefile.in (GUIMAIN_OBJECTS): Add pkgtree.$OBJEXT reference to...
+       * src/pkgtree.cpp: ...incorporate this new file; it implements...
+       (AppWindowMaker::InitPackageTreeView): ...this new class method...
+       (pkgInitCategoryTreeGraft): ...and this new extern "C" function.
+
+       * src/guimain.h (pkgInitCategoryTreeGraft): Declare prototype.
+       (AppWindowMaker::InitPackageTreeView): New private method; declare it.
+       (AppWindowMaker::PackageTreeView): New member variable; declare it.
+
+       * src/guixmld.cpp (AppWindowMaker::LoadPackageData): Call
+       pkgInitCategoryTreeGraft(), after loading profile.xml
+       (AppWindowMaker::Invoked): Call InitPackageTreeView()
+
+       * src/pkgview.cpp (AppWindowMaker::LayoutEngine):
+       [ID_PACKAGE_TREEVIEW]: Handle it.
+
+2012-12-19  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Make the "Apply Changes" dialogue "failure-aware".
+
+       * src/pkgtask.h (ACTION_APPLY_FAILED): Redefine, in terms of...
+       (ACTION_INSTALL_FAILED, ACTION_REMOVE_FAILED): New manifest defines.
+       (ACTION_UNSUCCESSFUL): New manifest constant; define it.
+
+       * src/pkgdata.cpp (pkgActionItem::EnumeratePendingActions):
+       [ACTION_UNSUCCESSFUL]: Make it a special case for enumeration.
+
+       * src/guixmld.cpp (pkgApplyChanges): Enumerate...
+       [ACTION_UNSUCCESSFUL > 0]: ...all such cases; when true...
+       [IDD_AUTO_CLOSE_OPTION]: ...this; select alternative close-out
+       messages, as appropriate.
+       (pkgActionItem::Assert): Factor out; relocate to...
+       * src/pkgexec.cpp (pkgActionItem::Assert): ...here; this moves its
+       object code into the mingw-get DLL.
+
+       * src/pkgunst.cpp (pkgRemove) [ACTION_REMOVE_FAILED]:
+       * src/pkginst.cpp (pkgInstall) [ACTION_INSTALL_FAILED]:
+       Assert as appropriate.
+
+2012-12-19  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Improve progress reporting in "Apply Changes" dialogue.
+
+       * src/pkgstat.h: New header file; it declares...
+       (pkgSpinWait): ...this new pure abstract base class; it specifies an
+       infrastructure for posting arbitrary text to dialogue controls.
+
+       * src/pkgexec.cpp (pkgSpinWait): Implement its static elements.
+       (pkgActionItem::Execute): Dispatch progress reports, handled by...
+       (pkgSpinWait::Report, pkgSpinWait::Indicator): ...these.
+
+       * src/guixmld.cpp (pkgDialogueSpinWait): New class; declare it and
+       implement locally.  It is derived from, and provides a listener for...
+       (pkgSpinWait): ...this abstract class.
+       (pkgApplyChanges): Use it.
+
+       * src/tarproc.cpp (pkgTarArchiveInstaller::ProcessDataStream): Call...
+       (pkgSpinWait::Report): ...this, to report extracted files.
+
+       * src/pkgunst.cpp (pkg_unst): Call...
+       (pkgSpinWait::Report): ...this, to report deleted files.
+
+       * src/sysroot.cpp (pkgXmlDocument::UpdateSystemMap): Call...
+       (pkgSpinWait::Report, pkgSpinWait::Indicator): ...these, to confirm
+       continuing database update activity.
+
+2012-12-18  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Update tab display on right-click in package list view.
+
+       * src/pkgdata.cpp (AppWindowMaker::OnNotify) [NM_RCLICK]:
+       Call DataSheetMaker::DisplayData(), before invoking pop-up menu.
+
+2012-12-17  Keith Marshall  <keithmarshall@users.sourceforge.net>
+
+       Add more protection against NULL pointer abuse.
+
+       * src/pkgbase.h (pkgActionItem::Reset): Method renamed to...
+       * src/guixmld.cpp (pkgActionItem::Assert): ...this; also renamed here.
+       (AppWindowMaker::OnCommand): When calling...
+       (pkgListViewMaker::MarkScheduledActions): ...this, pass argument as...
+       (pkgXmlDocument::ClearScheduledActions): ...pointer returned by this.
+
+       * src/pkgdata.cpp (AppWindowMaker::MarkSchedule):
+       [pending_actions == NULL]: Do not propagate invocation request to...
+       (pkgListViewMaker::MarkScheduledActions): ...this.
+
+       * src/pkglist.cpp (pkgListViewMaker::MarkScheduledActions):
+       [schedule == NULL]: Do nothing.
+
 2012-12-14  Keith Marshall  <keithmarshall@users.sourceforge.net>
 
        Implement some additional permanent debugging support.