From 67829ce0974c674f286009980a4bb3fff61f7b1e Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sun, 19 May 2002 12:54:16 +0000 Subject: [PATCH] 2002-05-19 Robert Collins * IniDBBuilderPackage.cc (IniDBBuilderPackage::IniDBBuilderPackage): New method. (IniDBBuilderPackage::buildVersion): Provide a warning when a newer setup version created the ini file. * IniDBBuilderPackage.h (IniDBBuilderPackage::IniDBBuilderPackage): New method. * IniParseFindVisitor.cc (IniParseFindVisitor::visitFile): Use the new feedback strategy. * IniParseFindVisitor.h (IniParseFindVisitor::IniParseFindVisitor): Require a feedback strategy. * Makefile.am (setup_SOURCES): Add IniParseFeedback sources. * Makefile.in: Regenerate. --- ChangeLog | 15 +++++++++++++++ IniDBBuilderPackage.cc | 13 +++++++++++++ IniDBBuilderPackage.h | 3 +++ IniParseFindVisitor.cc | 10 ++++------ IniParseFindVisitor.h | 4 +++- Makefile.am | 2 ++ Makefile.in | 17 +++++++++++------ fromcwd.cc | 4 +++- ini.cc | 42 ++++++++++++++++++++++++++++++++---------- 9 files changed, 86 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4840aa8b..6a27f2e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2002-05-19 Robert Collins + + * IniDBBuilderPackage.cc (IniDBBuilderPackage::IniDBBuilderPackage): New + method. + (IniDBBuilderPackage::buildVersion): Provide a warning when a newer + setup version created the ini file. + * IniDBBuilderPackage.h (IniDBBuilderPackage::IniDBBuilderPackage): New + method. + * IniParseFindVisitor.cc (IniParseFindVisitor::visitFile): Use the new + feedback strategy. + * IniParseFindVisitor.h (IniParseFindVisitor::IniParseFindVisitor): + Require a feedback strategy. + * Makefile.am (setup_SOURCES): Add IniParseFeedback sources. + * Makefile.in: Regenerate. + 2002-05-19 Robert Collins * io_stream_file.cc (io_stream_file::remove): Use the SetFileAttributes diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc index b294240b..8020e31d 100644 --- a/IniDBBuilderPackage.cc +++ b/IniDBBuilderPackage.cc @@ -14,14 +14,19 @@ */ #include "IniDBBuilderPackage.h" +#include "IniParseFeedback.h" #include "package_db.h" #include "package_meta.h" #include "package_version.h" #include "cygpackage.h" #include "filemanip.h" +#include "version.h" // for strtoul #include +IniDBBuilderPackage::IniDBBuilderPackage (IniParseFeedback const &aFeedback) : +cp (0), cpv (0), trust (0), _feedback (aFeedback){} + void IniDBBuilderPackage::buildTimestamp (String const &time) { @@ -32,6 +37,14 @@ void IniDBBuilderPackage::buildVersion (String const &aVersion) { version = aVersion; + if (version.size()) + { + String ini_version = canonicalize_version (version); + String our_version = canonicalize_version (::version); + // XXX useversion < operator + if (our_version.compare (ini_version) < 0) + _feedback.warning("The current ini file is from a newer version of setup.exe. If you have any trouble installing, please download a fresh version from http://www.cygwin.com/setup.exe"); + } } void diff --git a/IniDBBuilderPackage.h b/IniDBBuilderPackage.h index b1a873ed..8e1bb18e 100644 --- a/IniDBBuilderPackage.h +++ b/IniDBBuilderPackage.h @@ -17,6 +17,7 @@ #define _INIDBBUILDERPACKAGE_H_ #include "IniDBBuilder.h" +class IniParseFeedback; class packagesource; class packagemeta; class cygpackage; @@ -24,6 +25,7 @@ class cygpackage; class IniDBBuilderPackage:public IniDBBuilder { public: + IniDBBuilderPackage (IniParseFeedback const &); virtual void buildTimestamp (String const &); virtual void buildVersion (String const &); virtual void buildPackage (String const &); @@ -45,6 +47,7 @@ private: packagemeta *cp; cygpackage *cpv; int trust; + IniParseFeedback const &_feedback; }; #endif /* _INIDBBUILDERPACKAGE_H_ */ diff --git a/IniParseFindVisitor.cc b/IniParseFindVisitor.cc index 21e46db6..bd6c8b28 100644 --- a/IniParseFindVisitor.cc +++ b/IniParseFindVisitor.cc @@ -19,6 +19,7 @@ static const char *cvsid = #endif #include "IniParseFindVisitor.h" +#include "IniParseFeedback.h" #include "IniDBBuilder.h" #include "io_stream.h" #include "rfc1738.h" @@ -27,7 +28,7 @@ static const char *cvsid = extern int yyparse (); -IniParseFindVisitor::IniParseFindVisitor(IniDBBuilder &aBuilder, String const &localroot) : _Builder (aBuilder), baseLength (localroot.size()), local_ini(0), +IniParseFindVisitor::IniParseFindVisitor(IniDBBuilder &aBuilder, String const &localroot, IniParseFeedback const &feedback) : _Builder (aBuilder), _feedback (feedback), baseLength (localroot.size()), local_ini(0), error_buf(0), error_count (0), setup_timestamp (0), setup_version() {} IniParseFindVisitor::~IniParseFindVisitor(){} @@ -56,8 +57,7 @@ IniParseFindVisitor::visitFile(String const &basePath, const WIN32_FIND_DATA *th return; } - // FIXME: use a strategy and tell about this as well. - // log (LOG_BABBLE, String ("Found ini file - file://") + local_dir + "/" + path); + _feedback.babble (String ("Found ini file - ") + path); /* Copy leading part of path to temporary buffer and unescape it */ @@ -69,9 +69,7 @@ IniParseFindVisitor::visitFile(String const &basePath, const WIN32_FIND_DATA *th /*yydebug = 1; */ if (yyparse () || error_count > 0) - // FIXME: use a stragtegy and tell on this. - //MessageBox (0, error_buf, error_count == 1 ? "Parse Error" : "Parse Errors", 0); - ; + _feedback.error(error_buf); else local_ini++; diff --git a/IniParseFindVisitor.h b/IniParseFindVisitor.h index 55ede077..f6cc4222 100644 --- a/IniParseFindVisitor.h +++ b/IniParseFindVisitor.h @@ -21,11 +21,12 @@ /* parse passed in setup.ini files from disk. */ class IniDBBuilder; +class IniParseFeedback; /* IniParse files and create a package db when no cached .ini exists */ class IniParseFindVisitor : public FindVisitor { public: - IniParseFindVisitor (IniDBBuilder &aBuilder, String const &localroot); + IniParseFindVisitor (IniDBBuilder &aBuilder, String const &localroot, IniParseFeedback const &); virtual void visitFile(String const &basePath, const WIN32_FIND_DATA *); virtual ~ IniParseFindVisitor (); @@ -37,6 +38,7 @@ protected: IniParseFindVisitor & operator= (IniParseFindVisitor const &); private: IniDBBuilder &_Builder; + IniParseFeedback const &_feedback; unsigned int baseLength; int local_ini; char *error_buf; diff --git a/Makefile.am b/Makefile.am index bf215d60..e9679bc1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -159,6 +159,8 @@ setup_SOURCES = \ inilex.cc \ iniparse.cc \ iniparse.h \ + IniParseFeedback.cc \ + IniParseFeedback.h \ IniParseFindVisitor.cc \ IniParseFindVisitor.h \ install.cc \ diff --git a/Makefile.in b/Makefile.in index 0aea5e99..12da2735 100644 --- a/Makefile.in +++ b/Makefile.in @@ -256,6 +256,8 @@ setup_SOURCES = \ inilex.cc \ iniparse.cc \ iniparse.h \ + IniParseFeedback.cc \ + IniParseFeedback.h \ IniParseFindVisitor.cc \ IniParseFindVisitor.h \ install.cc \ @@ -388,12 +390,13 @@ am_setup_OBJECTS = archive.$(OBJEXT) archive_tar.$(OBJEXT) \ filemanip.$(OBJEXT) fromcwd.$(OBJEXT) geturl.$(OBJEXT) \ hash.$(OBJEXT) ini.$(OBJEXT) IniDBBuilder.$(OBJEXT) \ IniDBBuilderPackage.$(OBJEXT) inilex.$(OBJEXT) \ - iniparse.$(OBJEXT) IniParseFindVisitor.$(OBJEXT) \ - install.$(OBJEXT) io_stream.$(OBJEXT) \ - io_stream_cygfile.$(OBJEXT) io_stream_file.$(OBJEXT) \ - io_stream_memory.$(OBJEXT) localdir.$(OBJEXT) log.$(OBJEXT) \ - LogFile.$(OBJEXT) LogSingleton.$(OBJEXT) main.$(OBJEXT) \ - md5.$(OBJEXT) MD5++.$(OBJEXT) mkdir.$(OBJEXT) mklink2.$(OBJEXT) \ + iniparse.$(OBJEXT) IniParseFeedback.$(OBJEXT) \ + IniParseFindVisitor.$(OBJEXT) install.$(OBJEXT) \ + io_stream.$(OBJEXT) io_stream_cygfile.$(OBJEXT) \ + io_stream_file.$(OBJEXT) io_stream_memory.$(OBJEXT) \ + localdir.$(OBJEXT) log.$(OBJEXT) LogFile.$(OBJEXT) \ + LogSingleton.$(OBJEXT) main.$(OBJEXT) md5.$(OBJEXT) \ + MD5++.$(OBJEXT) mkdir.$(OBJEXT) mklink2.$(OBJEXT) \ mount.$(OBJEXT) msg.$(OBJEXT) net.$(OBJEXT) netio.$(OBJEXT) \ nio-ie5.$(OBJEXT) nio-file.$(OBJEXT) nio-ftp.$(OBJEXT) \ nio-http.$(OBJEXT) package_db.$(OBJEXT) package_meta.$(OBJEXT) \ @@ -422,6 +425,7 @@ am__depfiles_maybe = depfiles @AMDEP_TRUE@ ./$(DEPDIR)/FindVisitor.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/IniDBBuilder.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/IniDBBuilderPackage.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/IniParseFeedback.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/IniParseFindVisitor.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/LogFile.Po ./$(DEPDIR)/LogSingleton.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/MD5++.Po \ @@ -545,6 +549,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FindVisitor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IniDBBuilder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IniDBBuilderPackage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IniParseFeedback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IniParseFindVisitor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogFile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogSingleton.Po@am__quote@ diff --git a/fromcwd.cc b/fromcwd.cc index 8987ae33..241d9939 100644 --- a/fromcwd.cc +++ b/fromcwd.cc @@ -48,6 +48,7 @@ static const char *cvsid = #include "port.h" #include "IniDBBuilderPackage.h" +#include "IniParseFeedback.h" /* Trivial class for detecting the existence of setup.ini */ @@ -85,7 +86,8 @@ do_fromcwd (HINSTANCE h, HWND owner) next_dialog = IDD_CHOOSE; - IniDBBuilderPackage myBuilder; + IniParseFeedback myFeedback; + IniDBBuilderPackage myBuilder(myFeedback); ScanFindVisitor myVisitor (myBuilder); Find(".").accept(myVisitor); return; diff --git a/ini.cc b/ini.cc index 27be5e71..6afde384 100644 --- a/ini.cc +++ b/ini.cc @@ -44,7 +44,8 @@ static const char *cvsid = #include "rfc1738.h" #include "find.h" #include "IniParseFindVisitor.h" -#include "filemanip.h" +#include "IniParseFeedback.h" +//#include "filemanip.h" #include "io_stream.h" @@ -68,11 +69,32 @@ static int error_count = 0; static const char *ini_filename; +class GuiParseFeedback : public IniParseFeedback +{ +public: + virtual void babble(String const &message)const + { + log (LOG_BABBLE, message); + } + virtual void warning (String const &message)const + { + MessageBox (0, message.cstr_oneuse(), "Warning", 0); + } + virtual void error(String const &message)const + { + MessageBox (0, message.cstr_oneuse(), "Error parsing", 0); + } + virtual ~ GuiParseFeedback () + { + } +}; + static int do_local_ini (HWND owner) { - IniDBBuilderPackage findBuilder; - IniParseFindVisitor myVisitor (findBuilder, local_dir); + GuiParseFeedback myFeedback; + IniDBBuilderPackage findBuilder(myFeedback); + IniParseFindVisitor myVisitor (findBuilder, local_dir, myFeedback); Find (local_dir).accept(myVisitor); setup_timestamp = myVisitor.timeStamp(); setup_version = myVisitor.version(); @@ -83,7 +105,8 @@ static int do_remote_ini (HWND owner) { size_t ini_count = 0; - IniDBBuilderPackage *aBuilder = new IniDBBuilderPackage; + GuiParseFeedback myFeedback; + IniDBBuilderPackage aBuilder(myFeedback); for (size_t n = 1; n <= site_list.number (); n++) { @@ -103,8 +126,8 @@ do_remote_ini (HWND owner) continue; } - aBuilder->parse_mirror = site_list[n]->url; - ini_init (ini_file, aBuilder); + aBuilder.parse_mirror = site_list[n]->url; + ini_init (ini_file, &aBuilder); /*yydebug = 1; */ @@ -135,15 +158,14 @@ do_remote_ini (HWND owner) } ++ini_count; } - if (aBuilder->timestamp > setup_timestamp) + if (aBuilder.timestamp > setup_timestamp) { - setup_timestamp = aBuilder->timestamp; - setup_version = aBuilder->version; + setup_timestamp = aBuilder.timestamp; + setup_version = aBuilder.version; } delete ini_file; delete compressed_ini_file; } - delete aBuilder; return ini_count; } -- 2.43.5