From 6305bfd25a57068dabd08e2980182d8b9e445175 Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Sun, 3 Dec 2023 08:34:39 +0100 Subject: [PATCH] Cloning in my home directory. --- .gitignore | 1 + install.sh | 6 ----- interactive_copy.py | 56 --------------------------------------------- 3 files changed, 1 insertion(+), 62 deletions(-) create mode 100644 .gitignore delete mode 100644 install.sh delete mode 100755 interactive_copy.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +* diff --git a/install.sh b/install.sh deleted file mode 100644 index 9925432..0000000 --- a/install.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -rm -fr /tmp/.dotfiles/ -git clone -q https://github.com/JulienPalard/dotfiles.git /tmp/.dotfiles/ && - /tmp/.dotfiles/interactive_copy.py /tmp/.dotfiles/ ~/ --exclude README.md .git interactive_copy.py install.sh __pycache__ && - rm -fr /tmp/.dotfiles/ diff --git a/interactive_copy.py b/interactive_copy.py deleted file mode 100755 index 592dee2..0000000 --- a/interactive_copy.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python3 - -"""Interactively and recursively copy files, prompting user when file -differs, showing him diffs. -""" - -from filecmp import cmpfiles -from difflib import unified_diff -from os.path import expanduser, join, isdir, exists, dirname -from os import listdir, makedirs -from shutil import copy2 as copy -from itertools import chain - - -def maybe_copy_file(src, dest): - if not exists(dest): - if input("Copy {} [y,n]? ".format(src)).lower()[0] == 'y': - makedirs(dirname(dest), exist_ok=True) - copy(src, dest) - return - with open(src) as a, open(dest) as b: - diff = unified_diff(list(b), list(a)) - print(''.join(list(diff))) - if input("Copy {} [y,n]? ".format(src)).lower()[0] == 'y': - copy(src, dest) - - -def maybe_copy_dir(src, dest, common): - matches, missmatches, errors = cmpfiles(src, dest, common, shallow=False) - for match in sorted(matches): - print(join(dest, match), '√') - for missmatch in sorted(chain(missmatches, errors)): - if isdir(join(src, missmatch)): - maybe_copy_dir(join(src, missmatch), join(dest, missmatch), - listdir(join(src, missmatch))) - else: - maybe_copy_file(join(src, missmatch), join(dest, missmatch)) - - -def parse_args(): - import argparse - parser = argparse.ArgumentParser(description='Interactively copy files.') - parser.add_argument('src') - parser.add_argument('dest') - parser.add_argument('--exclude', help='Exclude those files', nargs='*', - default=[]) - return parser.parse_args() - - -def main(src, dest, exclude): - maybe_copy_dir(expanduser(src), expanduser(dest), - set(listdir(src)) - set(exclude)) - - -if __name__ == '__main__': - main(**vars(parse_args()))