From 4ca4ffd57d046029f3ae60520f3a43d2c7db2632 Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Mon, 1 Jul 2013 01:51:38 +0200 Subject: [PATCH] =?UTF-8?q?[git-whatsnew]=20--porcelain=20+=20On=20n'affic?= =?UTF-8?q?he=20pas=20toujours=20les=20fichiers=20non=20track=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/git-whatsnew | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/utils/git-whatsnew b/utils/git-whatsnew index 4a07018a..e3e669e3 100755 --- a/utils/git-whatsnew +++ b/utils/git-whatsnew @@ -20,18 +20,25 @@ class GitError(Exception): Exception.__init__(self, msg) -def get_status(): - """Récupère le status du dépôt courant. Échoue si on n'est pas dans un dépôt git.""" - proc = subprocess.Popen(["git", "status"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +def get_status(with_untracked_files=False): + """Récupère le status du dépôt courant. Échoue si on n'est pas dans un dépôt git. + -b donne les informations de tracking, mais du coup il y a toujours un output, il faut vérifier si il est relevant""" + cmd = ["git", "status", "--porcelain", "-b"] + if not with_untracked_files: + cmd.append("--untracked-files=no") + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate() if proc.returncode != 0: raise GitError(err) - return out.decode("utf-8") + out = out.decode("utf-8") + return out -def get_status_silentfail(): +def get_status_silentfail(with_untracked_files=False): """Récupère le status, mais ne renvoie rien si le ``git status`` est essentiellement vide.""" - out = get_status() - if not u"nothing to commit (working directory clean)" in out: + out = get_status(with_untracked_files) + if all([len(l) == 0 or l.startswith(u"#") for l in out.split(u"\n")]) and not u"adhead" in out: + return u"" + else: return out def get_repo(): @@ -51,12 +58,13 @@ if __name__ == "__main__": parser.add_argument("-f", "--from", action="store", type=str, dest="mail_from", help="Expéditeur du mail") parser.add_argument("-t", "--to", action="store", type=str, dest="mail_to", help="Destinataire du mail") parser.add_argument("-r", "--repository", action="store", type=str, dest="repo", help="Path du dépôt") + parser.add_argument("-u", "--untracked", action="store_true", dest="untracked", help="Affiche aussi les fichiers non trackés") parser.add_argument("-d", "--debug", action="store_true", dest="debug", help="Affiche le mail au lieu de l'envoyer") parser.set_defaults(**DEFAULTS) args = parser.parse_args() # Si un path de dépôt est fourni, on s'y cd if args.repo: os.chdir(args.repo) - out = get_status_silentfail() + out = get_status_silentfail(args.untracked) if out: send(out, args.mail_from, args.mail_to, args.debug)