Setup patch to keep test version if test version installed
Corinna Vinschen
corinna-cygwin@cygwin.com
Tue Feb 3 21:28:00 GMT 2015
On Feb 3 22:04, Corinna Vinschen wrote:
> On Feb 3 21:37, Achim Gratz wrote:
> > Corinna Vinschen writes:
> > > On Feb 3 18:08, Achim Gratz wrote:
> > >> Corinna Vinschen writes:
> > >> > How so? Setup is not a Cygwin application.
> > >>
> > >> Good point. Then I've no idea at all, save the compiler.
> > >
> > > I had a look into this and even rearranged the behaviour when --help
> > > output is requested...
> > >
> > > However, I'm mildly sure this behaviour didn't change in the last couple
> > > of years. The reason is that setup is not a console application but a
> > > GUI application. When running a GUI application from CMD, CMD will
> > > detach. Of course, when --help output is requested, setup calls
> > > AllocConsole, but that's too late. This does not occur in a Cygwin
> > > shell becasue Cygwin always waits for process completion unless the
> > > process is sent to the background.
> > >
> > > I now made the latest setup 2.864 available as standard setup version
> > > on sourceware and removed the test releases.
> >
> > I'm not sure we're talking about the same thing. I've recently added
> > code to print an error message along with the parameter usage when a
> > wrong option or other non-parseable stuff was given instead of simply
> > exiting with no indication other than the non-zero exit code. The
> > changes you've just installed look good to me, but they don't touch the
> > exit path in question:
> >
> > --8<---------------cut here---------------start------------->8---
> > if (!GetOption::GetInstance ().Process (argc,_argv, NULL))
> > - exit (1);
> > + {
> > + GetOption::GetInstance ().ParameterUsage (cerr
> > + << "\nError during option processing."
> > + << "\nCommand Line Options:\n");
> > + exit (1);
> > + }
> > --8<---------------cut here---------------end--------------->8---
> >
> > I guess with those changes one could now use Log (LOG_TIMESTAMP) instead
> > of cerr in that place and hopefully the output would appear again? I
> > was pretty certain I tested that in both mintty and CMD, but maybe
> > not...
>
> I was referring explicitely to the CMD prompt being too early. I didn't
> test the situation when specifying a wrong option, sorry. The point in
> the file where this occurs is somewhat early. At this point the log
> stuff isn't initialized and AttachConsole hasn't been called. I'll
> look into that, maybe it can be fixed easily.
Try this:
Index: main.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/main.cc,v
retrieving revision 2.79
diff -u -p -r2.79 main.cc
--- main.cc 3 Feb 2015 19:51:49 -0000 2.79
+++ main.cc 3 Feb 2015 21:27:31 -0000
@@ -227,17 +227,16 @@ WinMain (HINSTANCE h,
_argv = __argv;
try {
+ bool help_option = false;
+ bool invalid_option = false;
char cwd[MAX_PATH];
GetCurrentDirectory (MAX_PATH, cwd);
local_dir = std::string (cwd);
if (!GetOption::GetInstance ().Process (argc,_argv, NULL))
- {
- GetOption::GetInstance ().ParameterUsage (cerr
- << "\nError during option processing."
- << "\nCommand Line Options:\n");
- exit (1);
- }
+ help_option = invalid_option = true;
+ else if (HelpOption)
+ help_option = true;
if (!((string) Arch).size ())
{
@@ -264,7 +263,7 @@ WinMain (HINSTANCE h,
unattended_mode = PackageManagerOption ? chooseronly
: (UnattendedOption ? unattended : attended);
- if (unattended_mode || HelpOption)
+ if (unattended_mode || help_option)
set_cout ();
/* Get System info */
@@ -275,7 +274,7 @@ WinMain (HINSTANCE h,
supposed to elevate. */
nt_sec.initialiseWellKnownSIDs ();
/* Check if we have to elevate. */
- bool elevate = !HelpOption && version.dwMajorVersion >= 6
+ bool elevate = !help_option && version.dwMajorVersion >= 6
&& !NoAdminOption && !nt_sec.isRunAsAdmin ();
/* Start logging only if we don't elevate. Same for setting default
@@ -284,7 +283,7 @@ WinMain (HINSTANCE h,
const char *sep = isdirsep (local_dir[local_dir.size () - 1])
? "" : "\\";
/* Don't create log files for help output only. */
- if (!elevate && !HelpOption)
+ if (!elevate && !help_option)
{
theLog->setFile (LOG_BABBLE, local_dir + sep + "setup.log.full",
false);
@@ -293,8 +292,10 @@ WinMain (HINSTANCE h,
<< setup_version << endLog;
}
- if (HelpOption)
+ if (help_option)
{
+ if (invalid_option)
+ Log (LOG_PLAIN) << "\nError during option processing." << endLog;
Log (LOG_PLAIN) << "\nCommand Line Options:\n" << endLog;
GetOption::GetInstance ().ParameterUsage (Log (LOG_PLAIN));
Log (LOG_PLAIN) << endLog;
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-apps/attachments/20150203/9702e989/attachment.sig>
More information about the Cygwin-apps
mailing list