Changeset 3

Show
Ignore:
Timestamp:
02/18/06 01:28:34 (6 years ago)
Author:
mloar2
Message:

Fixed SerializationException? handling.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wipt-get/src/Main.cs

    r2 r3  
    100100          case "upgrade": 
    101101            Upgrade(); 
    102             break; 
     102          break; 
    103103          case "update": 
    104104            Update(); 
    105105          break; 
     106          default: 
     107          Usage(); 
     108          break; 
    106109        } 
    107110 
     
    116119          continue; 
    117120 
    118         object obj = Library.GetProduct(p); 
    119         if(obj == null) 
    120         { 
    121           Console.WriteLine("No such product " + p); 
    122           continue; 
    123         } 
    124         else if(obj is Suite) 
    125         { 
    126           InstallSuite((Suite)obj, devel, ignoretransforms); 
    127           continue; 
    128         } 
    129          
    130         Product product = (Product)obj; 
    131  
    132         Version instVersion; 
    133  
    134         if(devel) 
    135           instVersion = product.develVersion; 
    136         else 
    137           instVersion = product.stableVersion; 
    138  
    139         if(instVersion == null) 
    140         { 
    141           Console.WriteLine("Specified version not listed for product " 
    142               + product.name); 
    143           continue; 
    144         } 
    145  
    146         string URL = ""; 
    147         Guid productCode = Guid.Empty; 
    148         if(product.packages != null) 
    149         { 
    150           foreach(Package package in product.packages) 
    151           { 
    152             if(package.version.major == instVersion.major 
    153                 && package.version.minor == instVersion.minor 
    154                 && package.version.build == instVersion.build) 
    155             { 
    156               URL = package.URL; 
    157               productCode = package.productCode; 
    158               break; 
    159             } 
    160           } 
    161         } 
    162         if(URL == "") 
    163         { 
    164           Console.WriteLine("No package listed for specified version of " 
    165               + product.name + ".  Contact the repository maintainer."); 
    166           continue; 
    167         } 
    168  
    169         InstallState state = ApplicationDatabase.getProductState(productCode); 
    170         if(state != InstallState.Removed && state != InstallState.Absent  
    171             && state != InstallState.Unknown) 
    172         { 
    173           Console.WriteLine(product.name + " is already the latest version"); 
    174           continue; 
    175         } 
    176  
    177         string transforms = ""; 
    178         if(!ignoretransforms && product.transforms != null) 
    179         { 
    180           foreach(Transform transform in product.transforms) 
    181           { 
    182             if(transform.version.major == instVersion.major 
    183                 && transform.version.minor == instVersion.minor) 
    184             { 
    185               transforms = transform.URL + ";"; 
    186             } 
    187           } 
    188         } 
    189  
    190         Console.Write("Installing product "+ product.name + "... "); 
    191  
    192         ApplicationDatabase.setProgressHandler( 
    193             new ACM.Sys.Windows.Installer.ProgressHandler( 
    194               ProgressHandler)); 
    195  
    196         uint ret; 
    197         ret = ApplicationDatabase.installProduct(URL, 
    198             (transforms!=""?"TRANSFORMS=" + transforms:"")); 
    199         Console.WriteLine(""); 
    200  
    201         if(ret != 0) 
    202         { 
    203           Console.WriteLine( 
    204               "Error code {0} returned from installProduct for " 
    205               + product.name,ret); 
    206           Console.WriteLine(ApplicationDatabase.getErrorMessage(ret)); 
     121        try 
     122        { 
     123          object obj = Library.GetProduct(p); 
     124          if(obj == null) 
     125          { 
     126            Console.WriteLine("No such product " + p); 
     127            continue; 
     128          } 
     129          else if(obj is Suite) 
     130          { 
     131            InstallSuite((Suite)obj, devel, ignoretransforms); 
     132            continue; 
     133          } 
     134 
     135          Product product = (Product)obj; 
     136 
     137          Version instVersion; 
     138 
     139          if(devel) 
     140            instVersion = product.develVersion; 
     141          else 
     142            instVersion = product.stableVersion; 
     143 
     144          if(instVersion == null) 
     145          { 
     146            Console.WriteLine("Specified version not listed for product " 
     147                + product.name); 
     148            continue; 
     149          } 
     150 
     151          string URL = ""; 
     152          Guid productCode = Guid.Empty; 
     153          if(product.packages != null) 
     154          { 
     155            foreach(Package package in product.packages) 
     156            { 
     157              if(package.version.major == instVersion.major 
     158                  && package.version.minor == instVersion.minor 
     159                  && package.version.build == instVersion.build) 
     160              { 
     161                URL = package.URL; 
     162                productCode = package.productCode; 
     163                break; 
     164              } 
     165            } 
     166          } 
     167          if(URL == "") 
     168          { 
     169            Console.WriteLine("No package listed for specified version of " 
     170                + product.name + ".  Contact the repository maintainer."); 
     171            continue; 
     172          } 
     173 
     174          InstallState state = ApplicationDatabase.getProductState(productCode); 
     175          if(state != InstallState.Removed && state != InstallState.Absent  
     176              && state != InstallState.Unknown) 
     177          { 
     178            Console.WriteLine(product.name + " is already the latest version"); 
     179            continue; 
     180          } 
     181 
     182          string transforms = ""; 
     183          if(!ignoretransforms && product.transforms != null) 
     184          { 
     185            foreach(Transform transform in product.transforms) 
     186            { 
     187              if(transform.version.major == instVersion.major 
     188                  && transform.version.minor == instVersion.minor) 
     189              { 
     190                transforms = transform.URL + ";"; 
     191              } 
     192            } 
     193          } 
     194 
     195          Console.Write("Installing product "+ product.name + "... "); 
     196 
     197          ApplicationDatabase.setProgressHandler( 
     198              new ACM.Sys.Windows.Installer.ProgressHandler( 
     199                ProgressHandler)); 
     200 
     201          uint ret; 
     202          ret = ApplicationDatabase.installProduct(URL, 
     203              (transforms!=""?"TRANSFORMS=" + transforms:"")); 
     204          Console.WriteLine(""); 
     205 
     206          if(ret != 0) 
     207          { 
     208            Console.WriteLine( 
     209                "Error code {0} returned from installProduct for " 
     210                + product.name,ret); 
     211            Console.WriteLine(ApplicationDatabase.getErrorMessage(ret)); 
     212          } 
     213        } 
     214        catch(WiptException e) 
     215        { 
     216          Console.WriteLine(e.Message); 
    207217        } 
    208218      } 
     
    238248        if(p == "") 
    239249          continue; 
    240         object obj = Library.GetProduct(p); 
    241         if(obj == null) 
    242         { 
    243           Console.WriteLine("Could not find product " + p); 
    244           continue; 
    245         } 
    246         else if(obj is Suite) 
    247         { 
    248           RemoveSuite((Suite)obj); 
    249           continue; 
    250         } 
    251  
    252         Product product = (Product)obj; 
    253         Guid productCode =  
    254           ApplicationDatabase.findProductByUpgradeCode( 
    255               product.upgradeCode,0); 
    256         if(productCode != Guid.Empty) 
    257         { 
    258           InstallState state =  
    259             ApplicationDatabase.getProductState(productCode); 
    260           if(state != InstallState.Removed  
    261               && state != InstallState.Absent  
    262               && state != InstallState.Unknown) 
    263           { 
    264             Console.Write("Removing product "+ product.name + "... "); 
    265  
    266             ApplicationDatabase.setProgressHandler( 
    267                 new ACM.Sys.Windows.Installer.ProgressHandler( 
    268                   ProgressHandler)); 
    269  
    270             uint ret = ApplicationDatabase.removeProduct(productCode); 
    271             Console.WriteLine(""); 
    272             if(ret != 0) 
    273             { 
    274               Console.WriteLine( 
    275                   "Error code {0} returned from removeProduct",ret); 
    276               Console.WriteLine(ApplicationDatabase.getErrorMessage(ret)); 
    277             } 
     250        try 
     251        { 
     252          object obj = Library.GetProduct(p); 
     253          if(obj == null) 
     254          { 
     255            Console.WriteLine("Could not find product " + p); 
     256            continue; 
     257          } 
     258          else if(obj is Suite) 
     259          { 
     260            RemoveSuite((Suite)obj); 
     261            continue; 
     262          } 
     263 
     264          Product product = (Product)obj; 
     265          Guid productCode =  
     266            ApplicationDatabase.findProductByUpgradeCode( 
     267                product.upgradeCode,0); 
     268          if(productCode != Guid.Empty) 
     269          { 
     270            InstallState state =  
     271              ApplicationDatabase.getProductState(productCode); 
     272            if(state != InstallState.Removed  
     273                && state != InstallState.Absent  
     274                && state != InstallState.Unknown) 
     275            { 
     276              Console.Write("Removing product "+ product.name + "... "); 
     277 
     278              ApplicationDatabase.setProgressHandler( 
     279                  new ACM.Sys.Windows.Installer.ProgressHandler( 
     280                    ProgressHandler)); 
     281 
     282              uint ret = ApplicationDatabase.removeProduct(productCode); 
     283              Console.WriteLine(""); 
     284              if(ret != 0) 
     285              { 
     286                Console.WriteLine( 
     287                    "Error code {0} returned from removeProduct",ret); 
     288                Console.WriteLine(ApplicationDatabase.getErrorMessage(ret)); 
     289              } 
     290            } 
     291            else 
     292              Console.WriteLine(p + " is not installed"); 
    278293          } 
    279294          else 
    280295            Console.WriteLine(p + " is not installed"); 
    281296        } 
    282         else 
    283           Console.WriteLine(p + " is not installed"); 
     297        catch(WiptException e) 
     298        { 
     299          Console.WriteLine(e.Message); 
     300        } 
    284301      } 
    285302    } 
     
    310327    { 
    311328      string usage = @" 
    312 Usage:        wipt-get [options] <command> <product>[ <product> <product> ...] 
    313 OPTIONS 
    314 --devel                     Install development version 
    315 --ignore-transforms         Don't apply transforms listed in repository 
    316  
    317 COMMANDS 
    318 install 
    319 remove 
    320 update 
    321 upgrade 
    322 show 
    323 "; 
     329        Usage:        wipt-get [options] <command> <product>[ <product> <product> ...] 
     330        OPTIONS 
     331        --devel                     Install development version 
     332        --ignore-transforms         Don't apply transforms listed in repository 
     333 
     334        COMMANDS 
     335        install 
     336        remove 
     337        update 
     338        upgrade 
     339        show 
     340        "; 
    324341      Console.WriteLine(usage); 
    325342    } 
     
    393410    public static void List() 
    394411    { 
    395       object[] list = Library.GetAll(); 
    396       foreach(object o in list) 
    397       { 
    398         if(o is Product) 
    399         { 
    400           Product p = (Product)o; 
    401           Console.WriteLine(p.name); 
    402           if(p.stableVersion != null) 
    403           { 
    404             string installstring=""; 
    405             foreach(Package k in p.packages) 
    406             { 
    407               if(p.stableVersion.major == k.version.major 
    408                   && p.stableVersion.minor == k.version.minor 
    409                   && p.stableVersion.build == k.version.build) 
    410               { 
    411                 if(ApplicationDatabase.getProductState(k.productCode) 
    412                     == InstallState.Default) 
    413                   installstring="(installed)"; 
    414               } 
    415             } 
    416             Console.WriteLine("\tStable Version: {0}.{1}.{2} {3}", 
    417                 p.stableVersion.major, p.stableVersion.minor, 
    418                 p.stableVersion.build, installstring); 
    419           } 
    420           if(p.develVersion != null) 
    421           { 
    422             string installstring=""; 
    423             foreach(Package k in p.packages) 
    424             { 
    425               if(p.develVersion.major == k.version.major 
    426                   && p.develVersion.minor == k.version.minor 
    427                   && p.develVersion.build == k.version.build) 
    428               { 
    429                 if(ApplicationDatabase.getProductState(k.productCode) 
    430                     == InstallState.Default) 
    431                   installstring="(installed)"; 
    432               } 
    433             } 
    434             Console.WriteLine("\tDevelopment Version: {0}.{1}.{2} {3}", 
    435                 p.develVersion.major, p.develVersion.minor, 
    436                 p.develVersion.build, installstring); 
    437           } 
    438         } 
    439         else if(o is Suite) 
    440         { 
    441           Suite u = (Suite)o; 
    442           Console.WriteLine(u.name); 
    443           foreach(string s in u.products) 
    444           { 
    445             Console.WriteLine('\t' + s); 
    446           } 
    447         } 
     412      try 
     413      { 
     414        object[] list = Library.GetAll(); 
     415        foreach(object o in list) 
     416        { 
     417          if(o is Product) 
     418          { 
     419            Product p = (Product)o; 
     420            Console.WriteLine(p.name); 
     421            if(p.stableVersion != null) 
     422            { 
     423              string installstring=""; 
     424              foreach(Package k in p.packages) 
     425              { 
     426                if(p.stableVersion.major == k.version.major 
     427                    && p.stableVersion.minor == k.version.minor 
     428                    && p.stableVersion.build == k.version.build) 
     429                { 
     430                  if(ApplicationDatabase.getProductState(k.productCode) 
     431                      == InstallState.Default) 
     432                    installstring="(installed)"; 
     433                } 
     434              } 
     435              Console.WriteLine("\tStable Version: {0}.{1}.{2} {3}", 
     436                  p.stableVersion.major, p.stableVersion.minor, 
     437                  p.stableVersion.build, installstring); 
     438            } 
     439            if(p.develVersion != null) 
     440            { 
     441              string installstring=""; 
     442              foreach(Package k in p.packages) 
     443              { 
     444                if(p.develVersion.major == k.version.major 
     445                    && p.develVersion.minor == k.version.minor 
     446                    && p.develVersion.build == k.version.build) 
     447                { 
     448                  if(ApplicationDatabase.getProductState(k.productCode) 
     449                      == InstallState.Default) 
     450                    installstring="(installed)"; 
     451                } 
     452              } 
     453              Console.WriteLine("\tDevelopment Version: {0}.{1}.{2} {3}", 
     454                  p.develVersion.major, p.develVersion.minor, 
     455                  p.develVersion.build, installstring); 
     456            } 
     457          } 
     458          else if(o is Suite) 
     459          { 
     460            Suite u = (Suite)o; 
     461            Console.WriteLine(u.name); 
     462            foreach(string s in u.products) 
     463            { 
     464              Console.WriteLine('\t' + s); 
     465            } 
     466          } 
     467        } 
     468      } 
     469      catch(WiptException e) 
     470      { 
     471        Console.WriteLine(e.Message); 
    448472      } 
    449473    } 
  • trunk/WiptLib/src/Library.cs

    r2 r3  
    3737using System.IO; 
    3838using System.Net; 
     39using System.Runtime.Serialization; 
    3940using System.Runtime.Serialization.Formatters.Binary; 
    4041using System.Xml; 
     
    212213    private static bool Load() 
    213214    { 
    214  
    215215      string path = Environment.GetFolderPath( 
    216216          Environment.SpecialFolder.CommonApplicationData) + "\\ACM\\Wipt"; 
     
    230230      } 
    231231 
    232       BinaryFormatter formatter = new BinaryFormatter(); 
    233       library = Hashtable.Synchronized((Hashtable)formatter.Deserialize(st)); 
     232      try 
     233      { 
     234        BinaryFormatter formatter = new BinaryFormatter(); 
     235        library = Hashtable.Synchronized((Hashtable)formatter.Deserialize(st)); 
     236      } 
     237      catch(SerializationException) 
     238      { 
     239        st.Close(); 
     240        library = Hashtable.Synchronized(new Hashtable()); 
     241        return false; 
     242      } 
     243 
    234244      st.Close(); 
    235245 
     
    516526    { 
    517527      if(library == null) 
    518         Load(); 
     528      { 
     529        if(!Load()) 
     530        { 
     531          throw new WiptException("Could not load package database."); 
     532        } 
     533      } 
    519534      if(library.ContainsKey(name.ToLower())) 
    520535      { 
     
    534549    { 
    535550      if(library == null) 
    536         Load(); 
     551      { 
     552        if(!Load()) 
     553        { 
     554          throw new WiptException("Could not load package database."); 
     555        } 
     556      } 
    537557      object[] list = new object[library.Keys.Count]; 
    538558      int i = 0;