setup patch - simplistic --include-source for download/installed pkgs

d_hoke@hotmail.com d_hoke@hotmail.com
Fri Jun 21 10:52:00 GMT 2013


A patch for setup providing command line switches (-I, --include-source) to automatically include source packages associated with any selected binary packages when downloading/installing.

The first version is targeted at source revision 2.774 (can obtain as -D20120430) from cvs, which seems to match the binary setup.exe available for download at cygwin.com in early June 2013.

It will almost apply to head around 20130619, but a second version is provided to do that cleanly.

It may not be suitable for release, but am sending here in case it would be found and useful to others.

=====================================================================
file: include_source_D20120430_R2.774.patch.diff
=====================================================================
Index: install.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/install.cc,v
retrieving revision 2.101
diff -u -r2.101 install.cc
--- install.cc    25 Jul 2011 14:36:24 -0000    2.101
+++ install.cc    10 Jun 2013 08:45:50 -0000
@@ -68,6 +68,8 @@
 
 extern ThreeBarProgressPage Progress;
 
+extern BoolOption IncludeSource ;
+
 static int total_bytes = 0;
 static int total_bytes_sofar = 0;
 static int package_bytes = 0;
@@ -675,8 +677,9 @@
       }
     }
 
-    if (pkg.desired.sourcePackage ().picked())
+    if (pkg.desired.sourcePackage ().picked() || IncludeSource)
     {
+      bool skiprequested = false ;
       try
       {
         md5_one (*pkg.desired.sourcePackage ().source ());
@@ -684,9 +687,12 @@
       catch (Exception *e)
       {
         if (yesno (owner, IDS_SKIP_PACKAGE, e->what()) == IDYES)
+    {
+      skiprequested = true ; //(err occurred,) skip pkg desired
           pkg.desired.sourcePackage ().pick (false, &pkg);
+    }
       }
-      if (pkg.desired.sourcePackage().picked())
+      if (pkg.desired.sourcePackage().picked() || (IncludeSource && !skiprequested) )
       {
         md5sum_total_bytes_sofar += pkg.desired.sourcePackage ().source()->size;
         total_bytes += pkg.desired.sourcePackage ().source()->size;
Index: download.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/download.cc,v
retrieving revision 2.55
diff -u -r2.55 download.cc
--- download.cc    29 Apr 2011 12:43:59 -0000    2.55
+++ download.cc    10 Jun 2013 08:45:50 -0000
@@ -57,6 +57,8 @@
 
 extern ThreeBarProgressPage Progress;
 
+BoolOption IncludeSource (false, 'I', "include-source", "Automatically include source download");
+
 static bool
 validateCachedPackage (const std::string& fullname, packagesource & pkgsource)
 {
@@ -223,7 +225,7 @@
             if (!check_for_cached (*i))
                     total_download_bytes += i->size;
         }
-              if (sourceversion.picked ())
+              if (sourceversion.picked () || IncludeSource)
         {
           for (vector<packagesource>::iterator i =
                sourceversion.sources ()->begin();
@@ -262,7 +264,7 @@
            i != version.sources ()->end(); ++i)
             e += download_one (*i, owner);
         }
-      if (sourceversion && sourceversion.picked())
+      if (sourceversion && (sourceversion.picked() || IncludeSource) )
         {
           for (vector<packagesource>::iterator i =
               sourceversion.sources ()->begin();

===========================================================================
file: include_source_patch_HEAD_circa20130612.diff
===========================================================================
Index: install.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/install.cc,v
retrieving revision 2.106
diff -u -r2.106 install.cc
--- install.cc    14 Mar 2013 09:21:06 -0000    2.106
+++ install.cc    12 Jun 2013 11:00:58 -0000
@@ -73,6 +73,7 @@
 static long long int total_bytes_sofar = 0;
 static int package_bytes = 0;
 
+extern BoolOption IncludeSource ;
 static BoolOption NoReplaceOnReboot (false, 'r', "no-replaceonreboot",
                      "Disable replacing in-use files on next "
                      "reboot.");
@@ -704,8 +705,9 @@
       }
     }
 
-    if (pkg.desired.sourcePackage ().picked())
+    if (pkg.desired.sourcePackage ().picked() || IncludeSource)
     {
+      bool skiprequested = false ;
       try
       {
         md5_one (*pkg.desired.sourcePackage ().source ());
@@ -713,9 +715,12 @@
       catch (Exception *e)
       {
         if (yesno (owner, IDS_SKIP_PACKAGE, e->what()) == IDYES)
+    {
+      skiprequested = true ; //(err occurred,) skip pkg desired
           pkg.desired.sourcePackage ().pick (false, &pkg);
+    }
       }
-      if (pkg.desired.sourcePackage().picked())
+      if (pkg.desired.sourcePackage().picked() || (IncludeSource && !skiprequested) )
       {
         md5sum_total_bytes_sofar += pkg.desired.sourcePackage ().source()->size;
         total_bytes += pkg.desired.sourcePackage ().source()->size;
Index: download.cc
===================================================================
RCS file: /cvs/cygwin-apps/setup/download.cc,v
retrieving revision 2.56
diff -u -r2.56 download.cc
--- download.cc    8 Nov 2012 19:12:16 -0000    2.56
+++ download.cc    12 Jun 2013 11:00:58 -0000
@@ -56,6 +56,8 @@
 
 extern ThreeBarProgressPage Progress;
 
+BoolOption IncludeSource (false, 'I', "include-source", "Automatically include source download");
+
 static bool
 validateCachedPackage (const std::string& fullname, packagesource & pkgsource)
 {
@@ -222,7 +224,7 @@
             if (!check_for_cached (*i))
                     total_download_bytes += i->size;
         }
-              if (sourceversion.picked ())
+              if (sourceversion.picked () || IncludeSource)
         {
           for (vector<packagesource>::iterator i =
                sourceversion.sources ()->begin();
@@ -261,7 +263,7 @@
            i != version.sources ()->end(); ++i)
             e += download_one (*i, owner);
         }
-      if (sourceversion && sourceversion.picked())
+      if (sourceversion && (sourceversion.picked() || IncludeSource) )
         {
           for (vector<packagesource>::iterator i =
               sourceversion.sources ()->begin();
============================================================================= 		 	   		  


More information about the Cygwin-apps mailing list