Browse Source

theoretically repackaging or bumping should support moving files into a new prefix

Kevin Bradley 1 year ago
parent
commit
09431e1361
3 changed files with 43 additions and 27 deletions
  1. 2 0
      bootstrapTool/Classes/InputPackage.h
  2. 32 26
      bootstrapTool/Classes/InputPackage.m
  3. 9 1
      bootstrapTool/main.m

+ 2 - 0
bootstrapTool/Classes/InputPackage.h

@@ -10,6 +10,8 @@
 @property (nonatomic, strong) NSString *packageName;
 @property (nonatomic, strong) NSString *version;
 @property (nonatomic, strong) NSString *path;
+@property (nonatomic, strong) NSString *appendedPrefix;
+
 
 - (void)bumpVersionInCurrentDirectory;
 - (void)repackageInCurrentDirectoryWithArch:(NSString *)newArch;

+ 32 - 26
bootstrapTool/Classes/InputPackage.m

@@ -344,6 +344,11 @@
     
     NSString *tmpPath = [pwd stringByAppendingPathComponent:output.packageName];
     NSString *debian = [tmpPath stringByAppendingPathComponent:@"DEBIAN"];
+    NSString *newRoot = nil;
+    if (self.appendedPrefix) {
+        newRoot = [tmpPath stringByAppendingPathComponent:self.appendedPrefix];
+        [FM createDirectoryAtPath:newRoot withIntermediateDirectories:true attributes:nil error:nil];
+    }
     [FM createDirectoryAtPath:tmpPath withIntermediateDirectories:TRUE attributes:nil error:nil];
     DLog(@"\nExtracting package contents for processing...\n");
     [HelperClass returnForProcess:[NSString stringWithFormat:@"/usr/local/bin/dpkg -x %@ %@", self.path, tmpPath]];
@@ -391,54 +396,42 @@
                 [FM removeItemAtPath:fullPath error:nil];
                 
             }
-            
+            if (self.appendedPrefix.length > 0) {
+                if (![obj.path containsString:self.appendedPrefix]){
+                    DLog(@"[INFO] %@ doesnt have the prefix!", obj.path);
+                    NSString *oldPath = [tmpPath stringByAppendingPathComponent:obj.path];
+                    NSString *newPath = [newRoot stringByAppendingPathComponent:obj.path];
+                    DLog(@"[INFO] moving %@ to %@", oldPath, newPath);
+                    [FM moveItemAtPath:oldPath toPath:newPath error:nil];
+                    
+                }
+            }
             NSArray *pathComponents = [obj.path pathComponents];
-            if ([pathComponents count] > 1)
-            {
+            if ([pathComponents count] > 1) {
                 
-                NSString *rootPath = [pathComponents objectAtIndex:1];
+                NSString *rootPath = pathComponents[1];
                 //DLog(@"\n Checking root path: %@ for file %@\n", rootPath, obj.path);
-                if ([forbiddenRoots containsObject:rootPath])
-                {
+                if ([forbiddenRoots containsObject:rootPath]) {
                     DLog(@"\n [WARNING] package file: '%@' would overwrite symbolic link at '%@'\n", obj.path, rootPath);
                     NSString *privateDir = [tmpPath stringByAppendingPathComponent:@"private"];
                     if (![FM fileExistsAtPath:privateDir]){
                         [FM createDirectoryAtPath:privateDir withIntermediateDirectories:TRUE attributes:nil error:nil];
-                        
                     }
                     //take <package_name>/[rootPath] (could be etc, var, tmp) and move to <package_name>/private/[rootPath]
                     NSString *badPath = [tmpPath stringByAppendingPathComponent:rootPath];
                     NSString *newPath = [privateDir stringByAppendingPathComponent:rootPath];
                     DLog(@"\n [INFO] Moving %@ to %@...", badPath, newPath);
                     [FM moveItemAtPath:badPath toPath:newPath error:nil];
-                    
-                    
                 }
             }
-            
-            
         }
-        
-        
     }];
-    
-    
     NSString *depArchiveInfo = [NSString stringWithFormat:@"/usr/local/bin/dpkg -b %@", self.packageName];
-    
     if (fakeRoot) {
-        
         depArchiveInfo = [NSString stringWithFormat:@"%@ /usr/local/bin/dpkg -b %@", fakeRoot, self.packageName];
-        
-        
     }
-    
     [[HelperClass returnForProcess:depArchiveInfo] componentsJoinedByString:@"\n"];
-    
-    
-    
     DLog(@"\nDone!\n\n");
-    
-    //return er;
 }
 
 - (void)repackageInCurrentDirectoryWithArch:(NSString *)newArch {
@@ -452,6 +445,11 @@
     
     NSString *tmpPath = [pwd stringByAppendingPathComponent:output.packageName];
     NSString *debian = [tmpPath stringByAppendingPathComponent:@"DEBIAN"];
+    NSString *newRoot = nil;
+    if (self.appendedPrefix) {
+        newRoot = [tmpPath stringByAppendingPathComponent:self.appendedPrefix];
+        [FM createDirectoryAtPath:newRoot withIntermediateDirectories:true attributes:nil error:nil];
+    }
     [FM createDirectoryAtPath:tmpPath withIntermediateDirectories:TRUE attributes:nil error:nil];
     DLog(@"\nExtracting package contents for processing...\n");
     [HelperClass returnForProcess:[NSString stringWithFormat:@"/usr/local/bin/dpkg -x %@ %@", self.path, tmpPath]];
@@ -551,7 +549,15 @@
                 [FM removeItemAtPath:fullPath error:nil];
                 
             }
-            
+            if (self.appendedPrefix.length > 0) {
+                if (![obj.path containsString:self.appendedPrefix]){
+                    DLog(@"[INFO] %@ doesnt have the prefix!", obj.path);
+                    NSString *oldPath = [tmpPath stringByAppendingPathComponent:obj.path];
+                    NSString *newPath = [newRoot stringByAppendingPathComponent:obj.path];
+                    DLog(@"[INFO] moving %@ to %@", oldPath, newPath);
+                    [FM moveItemAtPath:oldPath toPath:newPath error:nil];
+                }
+            }
             NSArray *pathComponents = [obj.path pathComponents];
             if ([pathComponents count] > 1)
             {

+ 9 - 1
bootstrapTool/main.m

@@ -19,7 +19,7 @@
 #import "HelperClass.h"
 
 
-#define OPTION_FLAGS "o:i:ld:hcrb"
+#define OPTION_FLAGS "o:i:ld:hcrbp:"
 
 
 char *progname;
@@ -34,6 +34,7 @@ static struct option longopts[] = {
     { "clean",                     no_argument,            NULL,   'c' },
     { "repackage",                 no_argument,            NULL,   'r' },
     { "bump",                      no_argument,            NULL,   'b' },
+    { "prefix",                    required_argument,      NULL,   'p' },
     { NULL,                        0,                      NULL,    0  }
 };
 
@@ -48,6 +49,7 @@ void cmd_help(void){
     printf("  -c, --clean\t\t\tclean a bad status file from duplicate entries\n");
     printf("  -r, --repackage\t\trepackage to fix bad locations and to change architecture\n");
     printf("  -b, --bump\t\trepackage and bump by one - number (ie 1.0-1 -> 1.0-2)\n");
+    printf("  -p, --prefix\t\tthe prefix to append to all packages when repackaging or bumping a version number\n");
     printf("\n");
 }
 
@@ -63,6 +65,7 @@ int main(int argc, char **argv) {
         NSString *debFile = nil;
         NSString *bootstrapPath = nil;
         NSString *deletePackage = nil;
+        NSString *prefix = nil;
         BOOL listPackage = FALSE;
         BOOL repackage = FALSE;
         BOOL bump = FALSE;
@@ -104,6 +107,9 @@ int main(int argc, char **argv) {
                     clean = TRUE;
                     break;
                     
+                case 'p':
+                    prefix = [NSString stringWithUTF8String:optarg];
+                    break;
                 default:
                     cmd_help();
                     return -1;
@@ -124,6 +130,7 @@ int main(int argc, char **argv) {
             
             DLog(@"\n [INFO] Bumping version number for file: %@...\n", debFile);
             InputPackage *output = [HelperClass packageForDeb:debFile];
+            output.appendedPrefix = prefix;
             [output bumpVersionInCurrentDirectory];
             return 0;
         }
@@ -132,6 +139,7 @@ int main(int argc, char **argv) {
             
             DLog(@"\n [INFO] Repackaging file: %@...\n", debFile);
             InputPackage *output = [HelperClass packageForDeb:debFile];
+            output.appendedPrefix = prefix;
             [output repackageInCurrentDirectoryWithArch:@"appletvos-arm64"];
             return 0;
         }