예제 #1
0
 def get_lineno_last_page(self, fileobj, runner):
     if not fileobj.filename or not exists(runner.dump_dir.filename_public_path(fileobj)):
         return None
     dumpfile = DumpFile(self.wiki,
                         runner.dump_dir.filename_public_path(fileobj, self.wiki.date),
                         fileobj, self.verbose)
     pipeline = dumpfile.setup_uncompression_command()
     grep = self.wiki.config.grep
     if not exists(grep):
         raise BackupError("grep command %s not found" % grep)
     pipeline.append([grep, "-n", "<page>"])
     tail = self.wiki.config.tail
     if not exists(tail):
         raise BackupError("tail command %s not found" % tail)
     pipeline.append([tail, "-1"])
     # without shell
     proc = CommandPipeline(pipeline, quiet=True)
     proc.run_pipeline_get_output()
     if (proc.exited_successfully() or
             (proc.get_failed_cmds_with_retcode() ==
              [[-signal.SIGPIPE, pipeline[0]]]) or
             (proc.get_failed_cmds_with_retcode() ==
              [[signal.SIGPIPE + 128, pipeline[0]]])):
         output = proc.output()
         # 339915646:  <page>
         if ':' in output:
             linecount = output.split(':')[0]
             if linecount.isdigit():
                 return linecount
     return None
예제 #2
0
    def get_last_lines_from_n(self, fileobj, runner, count):
        if not fileobj.filename or not exists(runner.dump_dir.filename_public_path(fileobj)):
            return None

        dumpfile = DumpFile(self.wiki,
                            runner.dump_dir.filename_public_path(fileobj, self.wiki.date),
                            fileobj, self.verbose)
        pipeline = dumpfile.setup_uncompression_command()

        tail = self.wiki.config.tail
        if not exists(tail):
            raise BackupError("tail command %s not found" % tail)
        tail_esc = MiscUtils.shell_escape(tail)
        pipeline.append([tail, "-n", "+%s" % count])
        # without shell
        proc = CommandPipeline(pipeline, quiet=True)
        proc.run_pipeline_get_output()
        if (proc.exited_successfully() or
                (proc.get_failed_cmds_with_retcode() ==
                 [[-signal.SIGPIPE, pipeline[0]]]) or
                (proc.get_failed_cmds_with_retcode() ==
                 [[signal.SIGPIPE + 128, pipeline[0]]])):
            last_lines = proc.output()
        return last_lines