From 12e2ccd5109cc1efaf4fa48092d50e5a9a211919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awomir=20Nizio?= Date: Tue, 23 May 2017 21:01:01 +0200 Subject: [PATCH] git-hooks: new scripts --- git-hooks/overlays-commit-msg.pl | 84 ++++++++++++++++++++++++ git-hooks/prepare-commit-msg.sab-overlay | 20 ++++++ 2 files changed, 104 insertions(+) create mode 100755 git-hooks/overlays-commit-msg.pl create mode 100755 git-hooks/prepare-commit-msg.sab-overlay diff --git a/git-hooks/overlays-commit-msg.pl b/git-hooks/overlays-commit-msg.pl new file mode 100755 index 0000000..3e2ae75 --- /dev/null +++ b/git-hooks/overlays-commit-msg.pl @@ -0,0 +1,84 @@ +#!/usr/bin/env perl +# This code is licenced GPLv2 or newer. + +use warnings; +use strict; +use 5.010; + +my $g_thres = shift // 3; + +sub set_atoms { + my %atoms = (); + my $fh = shift; + while (my $line = <$fh>) { + chomp $line; + my @words = split(' ', $line, 2); + next if $words[0] eq "??"; # allow "dangling" files + my $what = $words[1]; + @words = split(m:/:, $what); + my $pkg; + if (@words >= 2) { + $pkg = join("/", @words[0..1]); + } else { + $pkg = $words[0] + } + $atoms{$pkg} = 1; + } + keys %atoms +} + +sub num { + my $what = shift; + my @arr = @_; + my $num = 0; + for (@arr) { + $num++ if index($_, "$what-") == 0 + } + $num +} + +sub replace { + my $atom = shift; + my @arr = @_; + my @new_arr; + for my $item (@arr) { + if( index($item, $atom) == 0 ) { + 1; + } else { + push @new_arr, $item; + } + } + push @new_arr, "$atom*"; + @new_arr; +} + +# try to make (a*, b, c*) from (a-1, a, a-2, b, c, c-1), +# for example, if numberOf(/^a-?/) >= $thres +sub do_reduce { + my $thres = shift; + my @atoms = @_; + my @processed_atoms = @atoms; + for my $atom (@atoms) { + @processed_atoms = replace($atom, @processed_atoms) + if (num($atom, @processed_atoms) >= $thres); + } + @processed_atoms +} + +#my @atoms = set_atoms(*DATA); +my @atoms = set_atoms(*STDIN); +@atoms = do_reduce($g_thres, @atoms); +say join ",", sort @atoms; + +__DATA__ + M net-p2p/transmission-base/metadata.xml + M net-p2p/transmission-cli/metadata.xml + M net-p2p/transmission-daemon/metadata.xml + M net-p2p/transmission-gtk/metadata.xml + M net-p2p/transmission-qt4/metadata.xml + M net-p2p/transmission/metadata.xml + M cat/pkg-1 + M cat/pkg-2 + M cat/pkg + M net-p2p/nic +?? betr.pl diff --git a/git-hooks/prepare-commit-msg.sab-overlay b/git-hooks/prepare-commit-msg.sab-overlay new file mode 100755 index 0000000..ee5f1f7 --- /dev/null +++ b/git-hooks/prepare-commit-msg.sab-overlay @@ -0,0 +1,20 @@ +#!/bin/sh +# This code is licenced GPLv2 or newer. + +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. + +_out=$(git status -s | overlays-commit-msg.pl) +_ver=$(git status -s | sed -rn 's/^[AR] *(.* -> )?.*-([^-]+)\.ebuild$/\2/p' | head -n 1) +_bump=${_ver:+version bump to $_ver} + +case $2 in +#message) +# sed -i -e "1s:^:[$_subdir/$_curdir] :" "$1" ;; +"") + sed -i -e "1i[$_out] $_bump" "$1" ;; +esac