From 74b9420c67f2bb437f9fcd4c51d027960142886e Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 22 Feb 2026 19:00:41 +0100 Subject: [PATCH] feat: initial commit for PKGBUILD repo --- .SRCINFO | 4 +- PKGBUILD | 6 +- SysPulse-rs/FETCH_HEAD | 1 + SysPulse-rs/HEAD | 1 + SysPulse-rs/config | 9 + SysPulse-rs/description | 1 + SysPulse-rs/hooks/applypatch-msg.sample | 15 ++ SysPulse-rs/hooks/commit-msg.sample | 24 +++ SysPulse-rs/hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ SysPulse-rs/hooks/post-update.sample | 8 + SysPulse-rs/hooks/pre-applypatch.sample | 14 ++ SysPulse-rs/hooks/pre-commit.sample | 49 +++++ SysPulse-rs/hooks/pre-merge-commit.sample | 13 ++ SysPulse-rs/hooks/pre-push.sample | 53 ++++++ SysPulse-rs/hooks/pre-rebase.sample | 169 +++++++++++++++++ SysPulse-rs/hooks/pre-receive.sample | 24 +++ SysPulse-rs/hooks/prepare-commit-msg.sample | 42 +++++ SysPulse-rs/hooks/push-to-checkout.sample | 78 ++++++++ SysPulse-rs/hooks/sendemail-validate.sample | 77 ++++++++ SysPulse-rs/hooks/update.sample | 128 +++++++++++++ SysPulse-rs/info/attributes | 1 + SysPulse-rs/info/exclude | 6 + ...34e776e86533601348c8e62c854f038213444e.idx | Bin 0 -> 1716 bytes ...4e776e86533601348c8e62c854f038213444e.pack | Bin 0 -> 31200 bytes ...34e776e86533601348c8e62c854f038213444e.rev | Bin 0 -> 144 bytes SysPulse-rs/packed-refs | 2 + src/SysPulse-rs | 1 + src/syspulse-rs | 1 + syspulse-rs/HEAD | 1 + syspulse-rs/config | 9 + syspulse-rs/description | 1 + syspulse-rs/hooks/applypatch-msg.sample | 15 ++ syspulse-rs/hooks/commit-msg.sample | 24 +++ syspulse-rs/hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ syspulse-rs/hooks/post-update.sample | 8 + syspulse-rs/hooks/pre-applypatch.sample | 14 ++ syspulse-rs/hooks/pre-commit.sample | 49 +++++ syspulse-rs/hooks/pre-merge-commit.sample | 13 ++ syspulse-rs/hooks/pre-push.sample | 53 ++++++ syspulse-rs/hooks/pre-rebase.sample | 169 +++++++++++++++++ syspulse-rs/hooks/pre-receive.sample | 24 +++ syspulse-rs/hooks/prepare-commit-msg.sample | 42 +++++ syspulse-rs/hooks/push-to-checkout.sample | 78 ++++++++ syspulse-rs/hooks/sendemail-validate.sample | 77 ++++++++ syspulse-rs/hooks/update.sample | 128 +++++++++++++ syspulse-rs/info/attributes | 1 + syspulse-rs/info/exclude | 6 + ...bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.idx | Bin 0 -> 2220 bytes ...f2a5d4056bffd6f46eefd2076d5cdeb57c7c3.pack | Bin 0 -> 33947 bytes ...bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.rev | Bin 0 -> 216 bytes syspulse-rs/packed-refs | 2 + 51 files changed, 1784 insertions(+), 5 deletions(-) create mode 100644 SysPulse-rs/FETCH_HEAD create mode 100644 SysPulse-rs/HEAD create mode 100644 SysPulse-rs/config create mode 100644 SysPulse-rs/description create mode 100755 SysPulse-rs/hooks/applypatch-msg.sample create mode 100755 SysPulse-rs/hooks/commit-msg.sample create mode 100755 SysPulse-rs/hooks/fsmonitor-watchman.sample create mode 100755 SysPulse-rs/hooks/post-update.sample create mode 100755 SysPulse-rs/hooks/pre-applypatch.sample create mode 100755 SysPulse-rs/hooks/pre-commit.sample create mode 100755 SysPulse-rs/hooks/pre-merge-commit.sample create mode 100755 SysPulse-rs/hooks/pre-push.sample create mode 100755 SysPulse-rs/hooks/pre-rebase.sample create mode 100755 SysPulse-rs/hooks/pre-receive.sample create mode 100755 SysPulse-rs/hooks/prepare-commit-msg.sample create mode 100755 SysPulse-rs/hooks/push-to-checkout.sample create mode 100755 SysPulse-rs/hooks/sendemail-validate.sample create mode 100755 SysPulse-rs/hooks/update.sample create mode 100644 SysPulse-rs/info/attributes create mode 100644 SysPulse-rs/info/exclude create mode 100644 SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.idx create mode 100644 SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.pack create mode 100644 SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.rev create mode 100644 SysPulse-rs/packed-refs create mode 160000 src/SysPulse-rs create mode 160000 src/syspulse-rs create mode 100644 syspulse-rs/HEAD create mode 100644 syspulse-rs/config create mode 100644 syspulse-rs/description create mode 100755 syspulse-rs/hooks/applypatch-msg.sample create mode 100755 syspulse-rs/hooks/commit-msg.sample create mode 100755 syspulse-rs/hooks/fsmonitor-watchman.sample create mode 100755 syspulse-rs/hooks/post-update.sample create mode 100755 syspulse-rs/hooks/pre-applypatch.sample create mode 100755 syspulse-rs/hooks/pre-commit.sample create mode 100755 syspulse-rs/hooks/pre-merge-commit.sample create mode 100755 syspulse-rs/hooks/pre-push.sample create mode 100755 syspulse-rs/hooks/pre-rebase.sample create mode 100755 syspulse-rs/hooks/pre-receive.sample create mode 100755 syspulse-rs/hooks/prepare-commit-msg.sample create mode 100755 syspulse-rs/hooks/push-to-checkout.sample create mode 100755 syspulse-rs/hooks/sendemail-validate.sample create mode 100755 syspulse-rs/hooks/update.sample create mode 100644 syspulse-rs/info/attributes create mode 100644 syspulse-rs/info/exclude create mode 100644 syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.idx create mode 100644 syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.pack create mode 100644 syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.rev create mode 100644 syspulse-rs/packed-refs diff --git a/.SRCINFO b/.SRCINFO index 89ef664..5295b87 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -2,7 +2,7 @@ pkgbase = syspulse-rs pkgdesc = A professional Linux system profiler for Wayland pkgver = 0.1.0 pkgrel = 1 - url = https://git.narl.io/nvrl/SysPulse-rs + url = https://git.narl.io/nvrl/syspulse-rs arch = x86_64 license = MIT makedepends = nodejs @@ -13,7 +13,7 @@ pkgbase = syspulse-rs depends = gtk3 depends = libayatana-appindicator depends = librsvg - source = git+ssh://git@narl.io/nvrl/SysPulse-rs.git + source = git+https://git.narl.io/nvrl/syspulse-rs.git sha256sums = SKIP pkgname = syspulse-rs diff --git a/PKGBUILD b/PKGBUILD index 154f93c..8888128 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,18 +5,18 @@ pkgver=0.1.0 pkgrel=1 pkgdesc="A professional Linux system profiler for Wayland" arch=('x86_64') -url="https://git.narl.io/nvrl/SysPulse-rs" +url="https://git.narl.io/nvrl/syspulse-rs" license=('MIT') depends=('webkit2gtk-4.1' 'gtk3' 'libayatana-appindicator' 'librsvg') makedepends=('nodejs' 'npm' 'rust' 'cargo') -source=("git+ssh://git@narl.io/nvrl/SysPulse-rs.git") +source=("git+https://git.narl.io/nvrl/syspulse-rs.git") sha256sums=('SKIP') build() { cd "$pkgname" npm install npm run build - npm run tauri build + npm run tauri build -- --bundles none } package() { diff --git a/SysPulse-rs/FETCH_HEAD b/SysPulse-rs/FETCH_HEAD new file mode 100644 index 0000000..493eac9 --- /dev/null +++ b/SysPulse-rs/FETCH_HEAD @@ -0,0 +1 @@ +ec142b09bdd86e407f2a5653df64f5537799d40b not-for-merge branch 'main' of ssh://narl.io/nvrl/SysPulse-rs diff --git a/SysPulse-rs/HEAD b/SysPulse-rs/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/SysPulse-rs/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/SysPulse-rs/config b/SysPulse-rs/config new file mode 100644 index 0000000..81e64ab --- /dev/null +++ b/SysPulse-rs/config @@ -0,0 +1,9 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = true +[remote "origin"] + url = ssh://git@narl.io/nvrl/SysPulse-rs.git + tagOpt = --no-tags + fetch = +refs/*:refs/* + mirror = true diff --git a/SysPulse-rs/description b/SysPulse-rs/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/SysPulse-rs/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/SysPulse-rs/hooks/applypatch-msg.sample b/SysPulse-rs/hooks/applypatch-msg.sample new file mode 100755 index 0000000..a5d7b84 --- /dev/null +++ b/SysPulse-rs/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/SysPulse-rs/hooks/commit-msg.sample b/SysPulse-rs/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/SysPulse-rs/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/SysPulse-rs/hooks/fsmonitor-watchman.sample b/SysPulse-rs/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..23e856f --- /dev/null +++ b/SysPulse-rs/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/SysPulse-rs/hooks/post-update.sample b/SysPulse-rs/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/SysPulse-rs/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/SysPulse-rs/hooks/pre-applypatch.sample b/SysPulse-rs/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/SysPulse-rs/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/SysPulse-rs/hooks/pre-commit.sample b/SysPulse-rs/hooks/pre-commit.sample new file mode 100755 index 0000000..29ed5ee --- /dev/null +++ b/SysPulse-rs/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/SysPulse-rs/hooks/pre-merge-commit.sample b/SysPulse-rs/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/SysPulse-rs/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/SysPulse-rs/hooks/pre-push.sample b/SysPulse-rs/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/SysPulse-rs/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/SysPulse-rs/hooks/pre-rebase.sample b/SysPulse-rs/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/SysPulse-rs/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/SysPulse-rs/hooks/pre-receive.sample b/SysPulse-rs/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/SysPulse-rs/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/SysPulse-rs/hooks/prepare-commit-msg.sample b/SysPulse-rs/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/SysPulse-rs/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# 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. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/SysPulse-rs/hooks/push-to-checkout.sample b/SysPulse-rs/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/SysPulse-rs/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/SysPulse-rs/hooks/update.sample b/SysPulse-rs/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/SysPulse-rs/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/SysPulse-rs/info/attributes b/SysPulse-rs/info/attributes new file mode 100644 index 0000000..1c897b7 --- /dev/null +++ b/SysPulse-rs/info/attributes @@ -0,0 +1 @@ +* -export-subst -export-ignore diff --git a/SysPulse-rs/info/exclude b/SysPulse-rs/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/SysPulse-rs/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.idx b/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.idx new file mode 100644 index 0000000000000000000000000000000000000000..efc646172a88da3302545bdb1b98a766f0cebbde GIT binary patch literal 1716 zcmexg;-AdGz`z8=)C7z`!$`p(`^m-3K)uMA1<1#RS%GrMm<`BB$Lv5c5az&vIf3H% zFc(ms9Lx>WM-1ixsv{Tk0rd_S%n$Sn3=06+aH422_U) zivz{sSh%GB*!(M}e)b&v`{m5d;|HCy+kePMbH)Un*J6LWW%<;`xop1OD>U}&Rejq2 zaoOjIx5Nx@T4t=g(!OhYtxeeLN4Ns+y^KV{~{-O&AeY`?8-;62NmS*KIYXWD61${8GbeJJo&M743&txAsF zQ+`=jdFKBLC}^1?x85cChh}B;?3(7=f3m-XOznGL@zYLGocYq4Hsy#u?|LcUJvIh` z(^p-%a`1ZV`YywWroZ#TXZh#MYq`6y=1tb-$9p495+D3)Kc8=q`{a(^PsM}R%k;1N zFOmp|=T2NS@zR^ZOt{l;+Gga-k&LHnn@N)x+z^o@u%=iVE64)t1L z!S_?X2A9vg!u=+c^?JxRo#YG0bYi>MCw=>}y)Wb23&~=my1-f?mgtI~Ga?&*Y`ft6 zrzmH6Q0U1=uit;&ASEvE`SAVM%WGJdD$UV;akGPEiHV!l$*msKj_`bZuxBgx^PXRu z+BLijxVOCdb=+v7>V%+YXC_~)FN$1v?cKpS!68pm{eK087gg!)K00-VP_}Vvrt?zw zBN5RVeV>k+Ej_yW%%j^34BplZ4B^1?hwBmp1FseXL)i%ihLTDKh6-SEs+bKd#?^qu zu^F%^JI}z7zZO`G9t9RxI~f>CfoUz`4v_r>C?^9{yb*|j=6GiU#q)thYX2FN=VdQa ojT3}DPCV0T^=EDpcJb>!FqLuUWQLVX9@={6PGn2WJ6Jp$06bnv4gdfE literal 0 HcmV?d00001 diff --git a/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.pack b/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.pack new file mode 100644 index 0000000000000000000000000000000000000000..8282acb4ce4b83c57d8864a863e2b9305e75fbd9 GIT binary patch literal 31200 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 P6G+JBEQL=4f)hkeTEVu+ literal 0 HcmV?d00001 diff --git a/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.rev b/SysPulse-rs/objects/pack/pack-cc34e776e86533601348c8e62c854f038213444e.rev new file mode 100644 index 0000000000000000000000000000000000000000..5c4152667da75f407fc6ccd4f16c9f5f2186ca59 GIT binary patch literal 144 zcmWIYbctYKU|@t|VIVC8#2i4(3B)`=EC$3(Kr9HvTtLhV!~#If48$NH0>mKwqCm_K z#N0s43dDRs%mT!0K+Jx|2<4RBS3euXsr!D} IiY@~g0A>ghr2qf` literal 0 HcmV?d00001 diff --git a/SysPulse-rs/packed-refs b/SysPulse-rs/packed-refs new file mode 100644 index 0000000..427198d --- /dev/null +++ b/SysPulse-rs/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +ec142b09bdd86e407f2a5653df64f5537799d40b refs/heads/main diff --git a/src/SysPulse-rs b/src/SysPulse-rs new file mode 160000 index 0000000..ec142b0 --- /dev/null +++ b/src/SysPulse-rs @@ -0,0 +1 @@ +Subproject commit ec142b09bdd86e407f2a5653df64f5537799d40b diff --git a/src/syspulse-rs b/src/syspulse-rs new file mode 160000 index 0000000..2bc9d76 --- /dev/null +++ b/src/syspulse-rs @@ -0,0 +1 @@ +Subproject commit 2bc9d76b5198ee65e5ff2215b95abe242254ab27 diff --git a/syspulse-rs/HEAD b/syspulse-rs/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/syspulse-rs/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/syspulse-rs/config b/syspulse-rs/config new file mode 100644 index 0000000..7c35ebe --- /dev/null +++ b/syspulse-rs/config @@ -0,0 +1,9 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = true +[remote "origin"] + url = https://git.narl.io/nvrl/syspulse-rs.git + tagOpt = --no-tags + fetch = +refs/*:refs/* + mirror = true diff --git a/syspulse-rs/description b/syspulse-rs/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/syspulse-rs/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/syspulse-rs/hooks/applypatch-msg.sample b/syspulse-rs/hooks/applypatch-msg.sample new file mode 100755 index 0000000..a5d7b84 --- /dev/null +++ b/syspulse-rs/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/syspulse-rs/hooks/commit-msg.sample b/syspulse-rs/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/syspulse-rs/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/syspulse-rs/hooks/fsmonitor-watchman.sample b/syspulse-rs/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..23e856f --- /dev/null +++ b/syspulse-rs/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/syspulse-rs/hooks/post-update.sample b/syspulse-rs/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/syspulse-rs/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/syspulse-rs/hooks/pre-applypatch.sample b/syspulse-rs/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/syspulse-rs/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/syspulse-rs/hooks/pre-commit.sample b/syspulse-rs/hooks/pre-commit.sample new file mode 100755 index 0000000..29ed5ee --- /dev/null +++ b/syspulse-rs/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/syspulse-rs/hooks/pre-merge-commit.sample b/syspulse-rs/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/syspulse-rs/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/syspulse-rs/hooks/pre-push.sample b/syspulse-rs/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/syspulse-rs/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/syspulse-rs/hooks/pre-rebase.sample b/syspulse-rs/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/syspulse-rs/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/syspulse-rs/hooks/pre-receive.sample b/syspulse-rs/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/syspulse-rs/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/syspulse-rs/hooks/prepare-commit-msg.sample b/syspulse-rs/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/syspulse-rs/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# 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. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/syspulse-rs/hooks/push-to-checkout.sample b/syspulse-rs/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/syspulse-rs/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/syspulse-rs/hooks/update.sample b/syspulse-rs/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/syspulse-rs/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/syspulse-rs/info/attributes b/syspulse-rs/info/attributes new file mode 100644 index 0000000..1c897b7 --- /dev/null +++ b/syspulse-rs/info/attributes @@ -0,0 +1 @@ +* -export-subst -export-ignore diff --git a/syspulse-rs/info/exclude b/syspulse-rs/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/syspulse-rs/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.idx b/syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.idx new file mode 100644 index 0000000000000000000000000000000000000000..94ac6caaafa1ff7c11fbe3955ec652136d890c73 GIT binary patch literal 2220 zcmciEdo+}390%~nnsI4#F}dZ|m}$u+msoe2R*Kr1F^o$SQj}0ivJ7VAHYH0E(lT3v zC^oVoX%dlKS`wxqmqghN5=I=8eVkK!`Xi!@i|h4Rec;g0(M^f%Q+x!t+wd!QB5z9zO4D6kz5fMYvy}^o`cS{P)1XzNJ!u zS?mWmxGu#ynEM)4m|2V(tbMc|?mtHzUjL6oG{d0XJJj09)w$)(wS(l>holj!0}~(o z(bg~%UnQ7q;?`AJ`7+)~6OwCQ1>KBq5GgHnp!7)VZ`M;?OA+5gYSs`PxtW`CGE-#d znY{Itn)MuCy9=XUgY#JF^4)jWVIA_-w9-hH{%2b_PUM8?bM!oq6~so2R$d4*GQ&hw zsA2htHl{H`ySI_5O?_K7eq|!5Q$~+#;(fJ^aXT%1W2pVDJp*+lMqHLSsWvFMhsXQ5)Cx6PbB7*?MmtBz!wb*9@}hLjRa?u zGV-H5Q2_1qGegT|sz@=39BUnLM~CgKpNsd~QgxjwY+mS~Z(xO2k$)4M)mDzSZhyFc zFHY*Ji|{~cjIH;a?hx8+J6gPiiHX7n#$BuHnOb#wldIb@(!64DHjS?<*^t&WidxtS%;kM3teORH^L^~ zi;zzlizL1-&g$Yg+&w5cVl0Wvj)=i2V1BF6E{MfBC+wih@4REKYnOJdrLBq+Qy8b` z94TNrT_pH1qq{GM@qGSzaf3Ew^3UdrMj16UZr>)vk?YoF*=!dBkG}VeW`Eto1JAT) zRH`^ZI&5}*Zf(BTC|k1cYTBb^1&%AziW}woX{@AvcgZ<1&meyV8*?%7pbmVn>2|47 zi$Jvvvj%0t9VFw;czUU4`-tJB%GB2fWVp32 zu&jL+$O@T)y#$NL=K?$C@;BxX^X^YidfL|_& zT;D%DHdQ1qyVmyk*whn8IhtevG6!ofsMgHT9O9B6qMMltr^{paWlo+#WE*TXtuL`j zt&te-yHjF(g26z&il3dfZI@A^+*Q4O-Rb#k-Nwta#BFg+$&cyAgVF2&m&+ZaRT=iJ zI=vK*X;Cne>w$(VNMNPkIri!s@4RdPqoBF%pIC}xW$uR(EKLN1&3H;5&85fKPV2>dH5p+1p zV20`jK*&8fzskhp;aWuJHXA3E$HQ3%J_CuX9PQQo|MR nSSj$|Ix4^fwLcnms=GgL*eyyrkmdgO4!+{0z~r&AP=WEk_)|HE literal 0 HcmV?d00001 diff --git a/syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.pack b/syspulse-rs/objects/pack/pack-27bf2a5d4056bffd6f46eefd2076d5cdeb57c7c3.pack new file mode 100644 index 0000000000000000000000000000000000000000..37144b72dc2b9590185498313e36f3955c6cdd74 GIT binary patch literal 33947 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 literal 0 HcmV?d00001 diff --git a/syspulse-rs/packed-refs b/syspulse-rs/packed-refs new file mode 100644 index 0000000..d41df92 --- /dev/null +++ b/syspulse-rs/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +2bc9d76b5198ee65e5ff2215b95abe242254ab27 refs/heads/main