Example #1
0
    def iter_diff_files(self, handle):
        '''Iterate over null terminated results of git diff-*.

        Yields status, filename, extra_filename; where status is the
        status code from git diff-*, filename is the filename, and
        extra_filename is either None or a filename involved in a
        rename or copy operation.

        The command executed should contain -z, as this function
        assumes null terminated output.
        '''
        segments = iter(NullTerminated(handle))
        try:
            while 1:
                info = segments.next()
                # strip colon
                info = info[1:]
                info_fields = info.split()
                status = info_fields[4]
                file_name = segments.next()
                if status[0] in 'CR':
                    extra_file_name = segments.next()
                else:
                    extra_file_name = None
                yield status, file_name, extra_file_name
        except StopIteration:
            pass
Example #2
0
    def iter_unknown_files(self):
        '''Run git ls-files -o to find "unknown" files.

        Yields filename.
        '''
        cmd = 'git ls-files -z -o --directory --exclude-from=%s' \
              % self.exclude_file
        remote_in, remote_out, waiter = self.popen2(cmd)
        remote_in.close()
        for filename in NullTerminated(remote_out):
            yield filename
        remote_out.close()
        waiter()
Example #3
0
    def iter_unknown_files(self):
        '''Run git ls-files -o to find "unknown" files.

        Yields filename.
        '''
        cmd = 'git ls-files -z -o --directory --exclude-from=%s' \
              % self.global_exclude_file

        if self.local_exclude_file != "" and os.path.isfile(
                self.local_exclude_file):
            cmd += " --exclude-from=%s" % self.local_exclude_file

        remote_in, remote_out, waiter = self.popen2(cmd)
        remote_in.close()
        for filename in NullTerminated(remote_out):
            yield filename
        remote_out.close()
        waiter()
Example #4
0
    def iter_ls_tree(self, raw_tree, raw_files):
        '''Run git ls-tree against the given tree.

        Yields stat, kind, blob_id, filename.

        File list explodes to all files if empty.
        '''
        if raw_files:
            files = '--' + self.quote_args(raw_files)
        else:
            files = ''
        tree = mkarg(raw_tree)
        cmd = 'git ls-tree -r -z %s %s' % (tree, files)
        remote_in, remote_out, waiter = self.popen2(cmd)
        remote_in.close()
        for item in NullTerminated(remote_out):
            stat, kind, blob_id, filename = item.split(None, 3)
            yield stat, kind, blob_id, filename
        waiter()
Example #5
0
    def iter_ls_files(self, files, modified_flag=False):
        '''Run git ls-files.

        Yields filename.

        If modified_flag is true, only modified files are
        returned. The modified filter is applied after file list
        explosion.
        '''
        args = self.quote_args(files)

        if modified_flag:
            modified_arg = '-m'
        else:
            modified_arg = ''

        cmd = 'git ls-files -z %s %s' % (modified_arg, args)
        remote_in, remote_out, waiter = self.popen2(cmd)
        remote_in.close()
        for filename in NullTerminated(remote_out):
            yield filename
        waiter()
Example #6
0
 def test_zero_length(self):
     underlying = 'abc\ndef\0\0fgh\0ijk'
     handle = stringio(underlying)
     self.assert_equal(['abc\ndef', '', 'fgh', 'ijk'],
                       list(NullTerminated(handle)))
Example #7
0
 def test_terminator_at_block_end(self):
     underlying = 'abc\ndef\0fgh\0ijk'
     handle = stringio(underlying)
     self.assert_equal(['abc\ndef', 'fgh', 'ijk'],
                       list(NullTerminated(handle, 8)))
Example #8
0
 def test_over_block_size(self):
     underlying = 'abc\ndef\0fgh\0ijk'
     handle = stringio(underlying)
     self.assert_equal(['abc\ndef', 'fgh', 'ijk'],
                       list(NullTerminated(handle, 5)))
Example #9
0
 def test_null_terminated_missing_last(self):
     underlying = 'abc\ndef\0fgh\0ijk'
     handle = stringio(underlying)
     self.assert_equal(['abc\ndef', 'fgh', 'ijk'],
                       list(NullTerminated(handle)))