From 65bd53489a091ee9f8b517d92a5b68887204ea9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20F=C3=B6rtsch?= Date: Sun, 1 Mar 2026 11:44:24 +0100 Subject: [PATCH] sync current state --- .DS_Store | Bin 6148 -> 6148 bytes ...-conflict-20260301-014345-HBWUQZ5.DS_Store | Bin 0 -> 6148 bytes ...-conflict-20260301-014346-HBWUQZ5.DS_Store | Bin 0 -> 6148 bytes ...-conflict-20260301-092732-HBWUQZ5.DS_Store | Bin 0 -> 6148 bytes HEAD | 1 + config | 11 ++ description | 1 + hooks/applypatch-msg.sample | 15 ++ hooks/commit-msg.sample | 24 +++ hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ hooks/post-update.sample | 8 + hooks/pre-applypatch.sample | 14 ++ hooks/pre-commit.sample | 49 +++++ hooks/pre-merge-commit.sample | 13 ++ hooks/pre-push.sample | 53 ++++++ hooks/pre-rebase.sample | 169 +++++++++++++++++ hooks/pre-receive.sample | 24 +++ hooks/prepare-commit-msg.sample | 42 +++++ hooks/push-to-checkout.sample | 78 ++++++++ hooks/sendemail-validate.sample | 77 ++++++++ hooks/update.sample | 128 +++++++++++++ info/exclude | 6 + ...bf97b4e1578476e08e31b889f6abd749205a33.idx | Bin 0 -> 1268 bytes ...f97b4e1578476e08e31b889f6abd749205a33.pack | Bin 0 -> 10684 bytes ...bf97b4e1578476e08e31b889f6abd749205a33.rev | Bin 0 -> 80 bytes packed-refs | 2 + 26 files changed, 889 insertions(+) create mode 100644 .sync-conflict-20260301-014345-HBWUQZ5.DS_Store create mode 100644 .sync-conflict-20260301-014346-HBWUQZ5.DS_Store create mode 100644 .sync-conflict-20260301-092732-HBWUQZ5.DS_Store create mode 100644 HEAD create mode 100644 config create mode 100644 description create mode 100755 hooks/applypatch-msg.sample create mode 100755 hooks/commit-msg.sample create mode 100755 hooks/fsmonitor-watchman.sample create mode 100755 hooks/post-update.sample create mode 100755 hooks/pre-applypatch.sample create mode 100755 hooks/pre-commit.sample create mode 100755 hooks/pre-merge-commit.sample create mode 100755 hooks/pre-push.sample create mode 100755 hooks/pre-rebase.sample create mode 100755 hooks/pre-receive.sample create mode 100755 hooks/prepare-commit-msg.sample create mode 100755 hooks/push-to-checkout.sample create mode 100755 hooks/sendemail-validate.sample create mode 100755 hooks/update.sample create mode 100644 info/exclude create mode 100644 objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.idx create mode 100644 objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.pack create mode 100644 objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.rev create mode 100644 packed-refs diff --git a/.DS_Store b/.DS_Store index d05c13084815d869ef2c87c58a9ff417378d409f..834c9bcf07ab471456f251846151bf82a770e671 100644 GIT binary patch literal 6148 zcmeHKy-ou$40hlU6)YVX7;j-h0(E3Ns^baz0;nzhfgV>uyQ1R_Ixz4GtRU2Zfswah zN9>&#uw%C*ZORA;*;V}A#dd6e(j^T5nCh@u0Vo4N2?t@cfhr(mr?DU_GP8wfXpLUG zQfuT{f5B5HlmTVnFET*iZUlSKhAs^J?|10gvOG=ey}XY8rRT}V=;7|=(2dRV=C}5K z$Jraqh`3mT4&?YdgG)cNdG)Ps?wkAUYRtKvcsG04!^>~?JM6m)=g@-O&rYR%+1%Xk z``1s8)4nCv%^b4(dF|Tk*mE6D;RG5mnD0I0;nwhWa67GGZXLIhTER+Y zHn)b|@y>Y0gT%VoL-s&k+p4NxV*t-=lF}xlYGptfPzGiU(EbqPAWQ@cM!R*OvR44a z2&b*!Gu7{@UV67nk;Z3rqk hj_m^-#oIWnpe?2c#6+-Q#2FO*BVcJzr40Ni1E15mq_Y43 delta 157 zcmZoMXfc=|#>CJ*F;Q%yo+2a5!~knXmdQLUQn8zh85kH?81xv@88R74a`RnWl5+Bs zfMOhhzg84HTy)$KRXzo;d_jg`aB_Zb0Ziv-99N| diff --git a/.sync-conflict-20260301-014345-HBWUQZ5.DS_Store b/.sync-conflict-20260301-014345-HBWUQZ5.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..816b95aaef18488d61e5df62ad4f2061b856b2c0 GIT binary patch literal 6148 zcmeHKu}%U(5S_&{qBay3miGl3e!!gMtR=z9$^Zf?a73{`|9~&BvC$7O(ilts!p6$R znD_&}+1B>8!3Me0cc>LI{U;*abrxqnXJAJu6 zmwQwlDa$>{b(!=09a||gNCzn-{s0?BHSAKcjMdC%s&$~)nI;k7;iMvi(u)G3fUm%cc`fnze}FYS=l<^}$(tx33j8YtR1nwV3Z`Vw*39Ji vtPRml(AYRGHKB>8!3Me0cc>LI{U;*abrxqnXJAJu6 zmwQwlDa$>{b(!=09a||gNCzn-{s0?BHSAKcjMdC%s&$~)nI;k7;iMvi(u)G3fUm%cc`fnze}FYS=l<^}$(tx33j8YtR1nwV3Z`Vw*39Ji vtPRml(AYRGHKB>8!3Me0cc>LI{U;*abrxqnXJAJu6 zmwQwlDa$>{b(!=09a||gNCzn-{s0?BHSAKcjMdC%s&$~)nI;k7;iMvi(u)G3fUm%cc`fnze}FYS=l<^}$(tx33j8YtR1nwV3Z`Vw*39Ji vtPRml(AYRGHK\).*$/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/hooks/fsmonitor-watchman.sample b/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..23e856f --- /dev/null +++ b/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/hooks/post-update.sample b/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/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/hooks/pre-applypatch.sample b/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/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/hooks/pre-commit.sample b/hooks/pre-commit.sample new file mode 100755 index 0000000..29ed5ee --- /dev/null +++ b/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/hooks/pre-merge-commit.sample b/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/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/hooks/pre-push.sample b/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/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/hooks/pre-rebase.sample b/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/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/hooks/pre-receive.sample b/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/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/hooks/prepare-commit-msg.sample b/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/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/hooks/push-to-checkout.sample b/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/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/hooks/update.sample b/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/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/info/exclude b/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/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/objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.idx b/objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.idx new file mode 100644 index 0000000000000000000000000000000000000000..df82988a3379fcce9a2b85182e3cabc9290ec5a3 GIT binary patch literal 1268 zcmexg;-AdGz`z8=qhRQS03*<;Fbs;j!Hk)K?i);)1?V1HU^bw+q+)iUo9oKtYGp8M$1zP~-!&rkg$@c{s#h;s`7 literal 0 HcmV?d00001 diff --git a/objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.pack b/objects/pack/pack-85bf97b4e1578476e08e31b889f6abd749205a33.pack new file mode 100644 index 0000000000000000000000000000000000000000..e3f52fdb39b6ebcf8141440b6d690b47373edca2 GIT binary patch literal 10684 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 W>F-VNJ0@rDP2al5E@HV^_8kC0Ll_$X literal 0 HcmV?d00001 diff --git a/packed-refs b/packed-refs new file mode 100644 index 0000000..a687ffc --- /dev/null +++ b/packed-refs @@ -0,0 +1,2 @@ +# pack-refs with: peeled fully-peeled sorted +6b5c875169ea7a9bed2fa71f866d47bff0a99237 refs/heads/main