Browse Source

better command-line parameters

David Rose 19 years ago
parent
commit
2b22c30352
2 changed files with 49 additions and 12 deletions
  1. 36 8
      panda/src/downloadertools/build_patch.cxx
  2. 13 4
      panda/src/downloadertools/multify.cxx

+ 36 - 8
panda/src/downloadertools/build_patch.cxx

@@ -27,7 +27,7 @@
 
 void 
 usage() {
-  cerr << "Usage: build_patch [-f] <old_file> <new_file>" << endl;
+  cerr << "Usage: build_patch [opts] <old_file> <new_file>" << endl;
 }
 
 void
@@ -42,23 +42,45 @@ help() {
     "The patching algorithm can get very slow for very large files.  As an\n"
     "optimization, if the input files are both Panda Multifiles, the patcher\n"
     "will by default patch them on a per-subfile basis, which has the potential\n"
-    "to be much faster.  The -f option will forbid this and force the patcher\n"
-    "to work on the full file.\n\n";
+    "to be much faster.  The -c option will forbid this and force the patcher\n"
+    "to work on the full file.\n\n"
+
+    "Options:\n\n"
+
+    "    -o output_name\n"
+    "        Specify the filename of the patch file to generate.\n\n"
+
+    "    -c\n"
+    "        Always generate patches against the complete file, even if the\n"
+    "        input files appear to be multifiles.\n\n"
+
+    "    -f footprint_length\n"
+    "        Specify the footprint length for the patching algorithm.\n\n";
 }
 
 int
 main(int argc, char *argv[]) {
-  bool full_file = false;
+  Filename patch_file;
+  bool complete_file = false;
+  int footprint_length = 0;
 
   //  extern char *optarg;
   extern int optind;
-  static const char *optflags = "fh";
+  static const char *optflags = "o:cf:h";
   int flag = getopt(argc, argv, optflags);
   Filename rel_path;
   while (flag != EOF) {
     switch (flag) {
+    case 'o':
+      patch_file = optarg;
+      break;
+
+    case 'c':
+      complete_file = true;
+      break;
+
     case 'f':
-      full_file = true;
+      footprint_length = atoi(optarg);
       break;
 
     case 'h':
@@ -87,10 +109,16 @@ main(int argc, char *argv[]) {
   Filename dest_file = Filename::from_os_specific(argv[2]);
   dest_file.set_binary();
 
-  Filename patch_file = dest_file.get_fullpath() + ".pch";
+  if (patch_file.empty()) {
+    patch_file = dest_file.get_fullpath() + ".pch";
+  }
   Patchfile pfile;
 
-  pfile.set_allow_multifile(!full_file);
+  pfile.set_allow_multifile(!complete_file);
+  if (footprint_length != 0) {
+    cerr << "Footprint length is " << footprint_length << "\n";
+    pfile.set_footprint_length(footprint_length);
+  }
 
   cerr << "Building patch file to convert " << src_file << " to "
        << dest_file << endl;

+ 13 - 4
panda/src/downloadertools/multify.cxx

@@ -469,12 +469,21 @@ kill_files(int argc, char *argv[]) {
     }
   }
 
-  if (!multifile->repack()) {
-    cerr << "Failed to write " << multifile_name << ".\n";
-    return false;
+  bool okflag = true;
+
+  if (multifile->needs_repack()) {
+    if (!multifile->repack()) {
+      cerr << "Failed to write " << multifile_name << ".\n";
+      okflag = false;
+    }
+  } else {
+    if (!multifile->flush()) {
+      cerr << "Failed to write " << multifile_name << ".\n";
+      okflag = false;
+    }
   }
 
-  return true;
+  return okflag;
 }
 
 const char *