Ejemplo n.º 1
0
def update_config(files, diff_cmd):
    """Processes files in files and copy them in the $HOME directory."""
    home_dir = os.environ.get('HOME') or os.environ['USERPROFILE']
    to_diff = []
    ok_files = []
    for basename in sorted(files):
        dst = os.path.join(home_dir, basename)
        dst_dir = os.path.dirname(dst)
        if not os.path.isdir(dst_dir):
            os.makedirs(dst_dir)
        content = files[basename]
        if not os.path.isfile(dst):
            print('Copying %s' % basename)
            maruel.write(dst, content)
            ok_files.append(basename)
        else:
            if maruel.read(dst) != content:
                to_diff.append(basename)
            else:
                ok_files.append(basename)

    for basename in to_diff:
        result = diff(
            diff_cmd, os.path.join(home_dir, basename), basename, files[basename])
        if result:
            return result
    print('The following files are ok:')
    for f in ok_files:
      print('  ' + f)
Ejemplo n.º 2
0
def diff(diff_cmd, dst, basename, content):
    """Diffs the destination file with the content it should be."""
    old_size = 0
    if os.path.isfile(dst):
        old_size = os.stat(dst).st_size
    print(
        'Diffing %-16s  new: %5d bytes  current: %5d bytes' % (
            basename, len(content), old_size))
    handle, name = tempfile.mkstemp()
    try:
        try:
            os.write(handle, content)
        finally:
            os.close(handle)
        result = subprocess.call(
            diff_cmd + [name, dst], shell=sys.platform=='win32')
        if result:
            return result
        # Look if the source content changed.
        actual_content = maruel.read(name)
        if actual_content != content:
            # The user modified the source. For now just quit early.
            print('You modified the source')
            for i in difflib.unified_diff(
                    content.splitlines(True),
                    actual_content.splitlines(True),
                    fromfile=basename,
                    tofile=basename):
                sys.stdout.write(i)
            return 1
    finally:
        os.remove(name)
    return 0
Ejemplo n.º 3
0
def update_config(files, diff_cmd):
    """Processes files in files and copy them in the $HOME directory."""
    home_dir = os.environ.get('HOME') or os.environ['USERPROFILE']
    to_diff = []
    ok_files = []
    for basename in sorted(files):
        dst = os.path.join(home_dir, basename)
        dst_dir = os.path.dirname(dst)
        if not os.path.isdir(dst_dir):
            os.makedirs(dst_dir)
        content = files[basename]
        if not os.path.isfile(dst):
            print('Copying %s' % basename)
            maruel.write(dst, content)
            ok_files.append(basename)
        else:
            if maruel.read(dst) != content:
                to_diff.append(basename)
            else:
                ok_files.append(basename)

    for basename in to_diff:
        result = diff(diff_cmd, os.path.join(home_dir, basename), basename,
                      files[basename])
        if result:
            return result
    print('The following files are ok:')
    for f in ok_files:
        print('  ' + f)
Ejemplo n.º 4
0
def diff(diff_cmd, dst, basename, content):
    """Diffs the destination file with the content it should be."""
    old_size = 0
    if os.path.isfile(dst):
        old_size = os.stat(dst).st_size
    print('Diffing %-16s  new: %5d bytes  current: %5d bytes' %
          (basename, len(content), old_size))
    handle, name = tempfile.mkstemp()
    try:
        try:
            os.write(handle, content)
        finally:
            os.close(handle)
        result = subprocess.call(diff_cmd + [name, dst],
                                 shell=sys.platform == 'win32')
        if result:
            return result
        # Look if the source content changed.
        actual_content = maruel.read(name)
        if actual_content != content:
            # The user modified the source. For now just quit early.
            print('You modified the source')
            for i in difflib.unified_diff(content.splitlines(True),
                                          actual_content.splitlines(True),
                                          fromfile=basename,
                                          tofile=basename):
                sys.stdout.write(i)
            return 1
    finally:
        os.remove(name)
    return 0
Ejemplo n.º 5
0
def load_files(config_dir, files):
    """Loads all the files content into dictionnary |files|.

    Appends the content if an entry is already present.
    """
    blacklist = [r'.*README.md$', r'.*\.swp$']
    for basename in maruel.walk(config_dir, [r'.*'], blacklist):
        src = os.path.join(config_dir, basename)
        if os.path.isfile(src):
            files.setdefault(basename, '')
            files[basename] += maruel.read(src)
Ejemplo n.º 6
0
def load_files(config_dir, files):
    """Loads all the files content into dictionnary |files|.

    Appends the content if an entry is already present.
    """
    blacklist = [r'.*README.md$', r'.*\.swp$']
    for basename in maruel.walk(config_dir, [r'.*'], blacklist):
        src = os.path.join(config_dir, basename)
        if os.path.isfile(src):
            files.setdefault(basename, '')
            files[basename] += maruel.read(src)