Преглед изворни кода

rred: Allow passing files as arguments for compressor testing

This introduces a -t mode in which the first argument is input,
the second is output and the remaining are diffs.

This allows us to test patching compressed files, which are
detected using their file extension.
Julian Andres Klode пре 10 година
родитељ
комит
46cddb8c1a
1 измењених фајлова са 14 додато и 2 уклоњено
  1. 14 2
      methods/rred.cc

+ 14 - 2
methods/rred.cc

@@ -689,6 +689,7 @@ int main(int argc, char **argv)
 {
 {
    int i;
    int i;
    bool just_diff = true;
    bool just_diff = true;
+   bool test = false;
    Patch patch;
    Patch patch;
 
 
    if (argc <= 1) {
    if (argc <= 1) {
@@ -696,7 +697,12 @@ int main(int argc, char **argv)
       return Mth.Run();
       return Mth.Run();
    }
    }
 
 
-   if (argc > 1 && strcmp(argv[1], "-f") == 0) {
+   // Usage: rred -t input output diff ...
+   if (argc > 1 && strcmp(argv[1], "-t") == 0) {
+      just_diff = false;
+      test = true;
+      i = 4;
+   } else if (argc > 1 && strcmp(argv[1], "-f") == 0) {
       just_diff = false;
       just_diff = false;
       i = 2;
       i = 2;
    } else {
    } else {
@@ -716,7 +722,13 @@ int main(int argc, char **argv)
       }
       }
    }
    }
 
 
-   if (just_diff) {
+   if (test) {
+      FileFd out, inp;
+      std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
+      inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
+      out.Open(argv[3], FileFd::WriteOnly | FileFd::Create, FileFd::Extension);
+      patch.apply_against_file(out, inp);
+   } else if (just_diff) {
       FileFd out;
       FileFd out;
       out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
       out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
       patch.write_diff(out);
       patch.write_diff(out);