diff --git a/.repos/1/LabGraph.git/HEAD b/.repos/1/LabGraph.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/LabGraph.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/LabGraph.git/config b/.repos/1/LabGraph.git/config deleted file mode 100644 index 0f16f02..0000000 --- a/.repos/1/LabGraph.git/config +++ /dev/null @@ -1,13 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[remote "origin"] - url = https://gitea.dokploy.second-breakfast.dev/HomeLab/LabGraph.git - tagOpt = --no-tags - fetch = +refs/*:refs/* - mirror = true -[http] - receivepack = true diff --git a/.repos/1/LabGraph.git/description b/.repos/1/LabGraph.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/LabGraph.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/LabGraph.git/hooks/applypatch-msg.sample b/.repos/1/LabGraph.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/LabGraph.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/commit-msg.sample b/.repos/1/LabGraph.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/LabGraph.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/LabGraph.git/hooks/fsmonitor-watchman.sample b/.repos/1/LabGraph.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/LabGraph.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/LabGraph.git/hooks/post-update.sample b/.repos/1/LabGraph.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/LabGraph.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-applypatch.sample b/.repos/1/LabGraph.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-commit.sample b/.repos/1/LabGraph.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-merge-commit.sample b/.repos/1/LabGraph.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-push.sample b/.repos/1/LabGraph.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-rebase.sample b/.repos/1/LabGraph.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/pre-receive.sample b/.repos/1/LabGraph.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/LabGraph.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/prepare-commit-msg.sample b/.repos/1/LabGraph.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/LabGraph.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/push-to-checkout.sample b/.repos/1/LabGraph.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/LabGraph.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/LabGraph.git/hooks/update.sample b/.repos/1/LabGraph.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/LabGraph.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/LabGraph.git/info/exclude b/.repos/1/LabGraph.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/LabGraph.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.idx b/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.idx deleted file mode 100644 index 3b568e7..0000000 Binary files a/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.idx and /dev/null differ diff --git a/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.pack b/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.pack deleted file mode 100644 index e482ba5..0000000 Binary files a/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.pack and /dev/null differ diff --git a/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.rev b/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.rev deleted file mode 100644 index 1d5e2f5..0000000 Binary files a/.repos/1/LabGraph.git/objects/pack/pack-6ea9b8fca256d50845c4aab1dcbd42c53eb5ba83.rev and /dev/null differ diff --git a/.repos/1/LabGraph.git/packed-refs b/.repos/1/LabGraph.git/packed-refs deleted file mode 100644 index 773f6bf..0000000 --- a/.repos/1/LabGraph.git/packed-refs +++ /dev/null @@ -1,3 +0,0 @@ -# pack-refs with: peeled fully-peeled sorted -15b1173937033f8e16ebecd2881041d9891894f1 refs/heads/main -a6ed575b09bf89b4941f2ded112e369723b21562 refs/heads/staging diff --git a/.repos/1/forge-test.git/HEAD b/.repos/1/forge-test.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/forge-test.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/forge-test.git/config b/.repos/1/forge-test.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/forge-test.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/forge-test.git/description b/.repos/1/forge-test.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/forge-test.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/forge-test.git/hooks/applypatch-msg.sample b/.repos/1/forge-test.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/forge-test.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/commit-msg.sample b/.repos/1/forge-test.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/forge-test.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/forge-test.git/hooks/fsmonitor-watchman.sample b/.repos/1/forge-test.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/forge-test.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/forge-test.git/hooks/post-update.sample b/.repos/1/forge-test.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/forge-test.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-applypatch.sample b/.repos/1/forge-test.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/forge-test.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-commit.sample b/.repos/1/forge-test.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/forge-test.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-merge-commit.sample b/.repos/1/forge-test.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/forge-test.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-push.sample b/.repos/1/forge-test.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/forge-test.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-rebase.sample b/.repos/1/forge-test.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/forge-test.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/pre-receive.sample b/.repos/1/forge-test.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/forge-test.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/prepare-commit-msg.sample b/.repos/1/forge-test.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/forge-test.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/push-to-checkout.sample b/.repos/1/forge-test.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/forge-test.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/forge-test.git/hooks/update.sample b/.repos/1/forge-test.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/forge-test.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/forge-test.git/info/exclude b/.repos/1/forge-test.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/forge-test.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/forge-test.git/objects/0c/496fdda205dc4c090617151aebb9038fdd30e5 b/.repos/1/forge-test.git/objects/0c/496fdda205dc4c090617151aebb9038fdd30e5 deleted file mode 100644 index ce67a8c..0000000 Binary files a/.repos/1/forge-test.git/objects/0c/496fdda205dc4c090617151aebb9038fdd30e5 and /dev/null differ diff --git a/.repos/1/forge-test.git/objects/2e/132196a0aabe3a32c3f84689abfc01f8f308fa b/.repos/1/forge-test.git/objects/2e/132196a0aabe3a32c3f84689abfc01f8f308fa deleted file mode 100644 index 52da028..0000000 Binary files a/.repos/1/forge-test.git/objects/2e/132196a0aabe3a32c3f84689abfc01f8f308fa and /dev/null differ diff --git a/.repos/1/forge-test.git/objects/b3/76c9941fda362c8d2c5c8ddb35db3e0b003402 b/.repos/1/forge-test.git/objects/b3/76c9941fda362c8d2c5c8ddb35db3e0b003402 deleted file mode 100644 index 023c45d..0000000 Binary files a/.repos/1/forge-test.git/objects/b3/76c9941fda362c8d2c5c8ddb35db3e0b003402 and /dev/null differ diff --git a/.repos/1/forge-test.git/objects/bc/f542d87bd56256d61a1be5c584d3dbcfcb3c62 b/.repos/1/forge-test.git/objects/bc/f542d87bd56256d61a1be5c584d3dbcfcb3c62 deleted file mode 100644 index d89720e..0000000 --- a/.repos/1/forge-test.git/objects/bc/f542d87bd56256d61a1be5c584d3dbcfcb3c62 +++ /dev/null @@ -1,2 +0,0 @@ -xA -1 E]÷Ù ’L'ÓD<„è¤ ÖÂL¼¿/àæ-þŸ/½µj@ÌÛTeN˽”F pÄ Ñt¼˜þë»úªVó~C÷K81Þ \ No newline at end of file diff --git a/.repos/1/forge-test.git/refs/heads/main b/.repos/1/forge-test.git/refs/heads/main deleted file mode 100644 index 77e4e9f..0000000 --- a/.repos/1/forge-test.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -bcf542d87bd56256d61a1be5c584d3dbcfcb3c62 diff --git a/.repos/1/forgebucket.git/HEAD b/.repos/1/forgebucket.git/HEAD deleted file mode 100644 index cb089cd..0000000 --- a/.repos/1/forgebucket.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/.repos/1/forgebucket.git/config b/.repos/1/forgebucket.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/forgebucket.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/forgebucket.git/description b/.repos/1/forgebucket.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/forgebucket.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/forgebucket.git/hooks/applypatch-msg.sample b/.repos/1/forgebucket.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/forgebucket.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/commit-msg.sample b/.repos/1/forgebucket.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/forgebucket.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/forgebucket.git/hooks/fsmonitor-watchman.sample b/.repos/1/forgebucket.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/forgebucket.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/forgebucket.git/hooks/post-update.sample b/.repos/1/forgebucket.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/forgebucket.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-applypatch.sample b/.repos/1/forgebucket.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-commit.sample b/.repos/1/forgebucket.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-merge-commit.sample b/.repos/1/forgebucket.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-push.sample b/.repos/1/forgebucket.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-rebase.sample b/.repos/1/forgebucket.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/pre-receive.sample b/.repos/1/forgebucket.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/forgebucket.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/prepare-commit-msg.sample b/.repos/1/forgebucket.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/forgebucket.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/push-to-checkout.sample b/.repos/1/forgebucket.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/forgebucket.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/forgebucket.git/hooks/update.sample b/.repos/1/forgebucket.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/forgebucket.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/forgebucket.git/info/exclude b/.repos/1/forgebucket.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/forgebucket.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/hello-world.git/HEAD b/.repos/1/hello-world.git/HEAD deleted file mode 100644 index cb089cd..0000000 --- a/.repos/1/hello-world.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/.repos/1/hello-world.git/config b/.repos/1/hello-world.git/config deleted file mode 100644 index e6da231..0000000 --- a/.repos/1/hello-world.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/.repos/1/hello-world.git/description b/.repos/1/hello-world.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/hello-world.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/hello-world.git/hooks/applypatch-msg.sample b/.repos/1/hello-world.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/hello-world.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/commit-msg.sample b/.repos/1/hello-world.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/hello-world.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/hello-world.git/hooks/fsmonitor-watchman.sample b/.repos/1/hello-world.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/hello-world.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/hello-world.git/hooks/post-update.sample b/.repos/1/hello-world.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/hello-world.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-applypatch.sample b/.repos/1/hello-world.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/hello-world.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-commit.sample b/.repos/1/hello-world.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/hello-world.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-merge-commit.sample b/.repos/1/hello-world.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/hello-world.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-push.sample b/.repos/1/hello-world.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/hello-world.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-rebase.sample b/.repos/1/hello-world.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/hello-world.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/pre-receive.sample b/.repos/1/hello-world.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/hello-world.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/prepare-commit-msg.sample b/.repos/1/hello-world.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/hello-world.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/push-to-checkout.sample b/.repos/1/hello-world.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/hello-world.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/hello-world.git/hooks/update.sample b/.repos/1/hello-world.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/hello-world.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/hello-world.git/info/exclude b/.repos/1/hello-world.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/hello-world.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/my-project.git/HEAD b/.repos/1/my-project.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/my-project.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/my-project.git/config b/.repos/1/my-project.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/my-project.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/my-project.git/description b/.repos/1/my-project.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/my-project.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/my-project.git/hooks/applypatch-msg.sample b/.repos/1/my-project.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/my-project.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/commit-msg.sample b/.repos/1/my-project.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/my-project.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/my-project.git/hooks/fsmonitor-watchman.sample b/.repos/1/my-project.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/my-project.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/my-project.git/hooks/post-update.sample b/.repos/1/my-project.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/my-project.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-applypatch.sample b/.repos/1/my-project.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/my-project.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-commit.sample b/.repos/1/my-project.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/my-project.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-merge-commit.sample b/.repos/1/my-project.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/my-project.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-push.sample b/.repos/1/my-project.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/my-project.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-rebase.sample b/.repos/1/my-project.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/my-project.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/pre-receive.sample b/.repos/1/my-project.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/my-project.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/prepare-commit-msg.sample b/.repos/1/my-project.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/my-project.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/push-to-checkout.sample b/.repos/1/my-project.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/my-project.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/my-project.git/hooks/update.sample b/.repos/1/my-project.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/my-project.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/my-project.git/info/exclude b/.repos/1/my-project.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/my-project.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/my-project.git/objects/42/5b0efa97487e9ba00617c014401d44941887ef b/.repos/1/my-project.git/objects/42/5b0efa97487e9ba00617c014401d44941887ef deleted file mode 100644 index 173b7ad..0000000 Binary files a/.repos/1/my-project.git/objects/42/5b0efa97487e9ba00617c014401d44941887ef and /dev/null differ diff --git a/.repos/1/my-project.git/objects/83/100b0d5c25e49f4522418cb5475df93d3756db b/.repos/1/my-project.git/objects/83/100b0d5c25e49f4522418cb5475df93d3756db deleted file mode 100644 index b6491bd..0000000 Binary files a/.repos/1/my-project.git/objects/83/100b0d5c25e49f4522418cb5475df93d3756db and /dev/null differ diff --git a/.repos/1/my-project.git/objects/9b/b44448374d994d9ff09055d42d623adc9387b6 b/.repos/1/my-project.git/objects/9b/b44448374d994d9ff09055d42d623adc9387b6 deleted file mode 100644 index 149dc95..0000000 Binary files a/.repos/1/my-project.git/objects/9b/b44448374d994d9ff09055d42d623adc9387b6 and /dev/null differ diff --git a/.repos/1/my-project.git/objects/c6/727942d6cb4a7370012089badb7579d6f0ed26 b/.repos/1/my-project.git/objects/c6/727942d6cb4a7370012089badb7579d6f0ed26 deleted file mode 100644 index 53a16ba..0000000 --- a/.repos/1/my-project.git/objects/c6/727942d6cb4a7370012089badb7579d6f0ed26 +++ /dev/null @@ -1,4 +0,0 @@ -xŽK -1D]ç½$Ÿ“€ˆWét:£à$C&âõôÔ²^=nËò`]8Œ.œ‰'ïmHX -“ÃbµC3±  ʼnhV«•ºÔ1%ÜœÇãÞRtÔÓ”Ñæ³u”9ºàÓYÑkÜ[éTgy¸Ð6SÏOJÛmím´zZä -Æû`ö£ᨭ֊¿‚Cþ˜ªM¸Õ ?ŒUÞv¾«rÛL \ No newline at end of file diff --git a/.repos/1/my-project.git/objects/cd/aa4c57728b4ffca34f203415ce418f3ee07420 b/.repos/1/my-project.git/objects/cd/aa4c57728b4ffca34f203415ce418f3ee07420 deleted file mode 100644 index 8b10ae2..0000000 Binary files a/.repos/1/my-project.git/objects/cd/aa4c57728b4ffca34f203415ce418f3ee07420 and /dev/null differ diff --git a/.repos/1/my-project.git/objects/d0/9edd32e24e52aa3f0f507362fce72b9e4a2266 b/.repos/1/my-project.git/objects/d0/9edd32e24e52aa3f0f507362fce72b9e4a2266 deleted file mode 100644 index 351ed72..0000000 Binary files a/.repos/1/my-project.git/objects/d0/9edd32e24e52aa3f0f507362fce72b9e4a2266 and /dev/null differ diff --git a/.repos/1/my-project.git/refs/heads/dev b/.repos/1/my-project.git/refs/heads/dev deleted file mode 100644 index 195dd87..0000000 --- a/.repos/1/my-project.git/refs/heads/dev +++ /dev/null @@ -1 +0,0 @@ -c6727942d6cb4a7370012089badb7579d6f0ed26 diff --git a/.repos/1/my-project.git/refs/heads/main b/.repos/1/my-project.git/refs/heads/main deleted file mode 100644 index 195dd87..0000000 --- a/.repos/1/my-project.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -c6727942d6cb4a7370012089badb7579d6f0ed26 diff --git a/.repos/1/my-repo-test.git/HEAD b/.repos/1/my-repo-test.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/my-repo-test.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/my-repo-test.git/config b/.repos/1/my-repo-test.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/my-repo-test.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/my-repo-test.git/description b/.repos/1/my-repo-test.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/my-repo-test.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/my-repo-test.git/hooks/applypatch-msg.sample b/.repos/1/my-repo-test.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/my-repo-test.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/commit-msg.sample b/.repos/1/my-repo-test.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/my-repo-test.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/my-repo-test.git/hooks/fsmonitor-watchman.sample b/.repos/1/my-repo-test.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/my-repo-test.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/my-repo-test.git/hooks/post-update.sample b/.repos/1/my-repo-test.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/my-repo-test.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-applypatch.sample b/.repos/1/my-repo-test.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-commit.sample b/.repos/1/my-repo-test.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-merge-commit.sample b/.repos/1/my-repo-test.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-push.sample b/.repos/1/my-repo-test.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-rebase.sample b/.repos/1/my-repo-test.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/pre-receive.sample b/.repos/1/my-repo-test.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/my-repo-test.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/prepare-commit-msg.sample b/.repos/1/my-repo-test.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/my-repo-test.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/push-to-checkout.sample b/.repos/1/my-repo-test.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/my-repo-test.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/hooks/update.sample b/.repos/1/my-repo-test.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/my-repo-test.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/my-repo-test.git/info/exclude b/.repos/1/my-repo-test.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/my-repo-test.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/my-repo-test.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e b/.repos/1/my-repo-test.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e deleted file mode 100644 index 52838cc..0000000 Binary files a/.repos/1/my-repo-test.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e and /dev/null differ diff --git a/.repos/1/my-repo-test.git/objects/ca/679097ea1a679cf8f21c616b60afefea3f34d6 b/.repos/1/my-repo-test.git/objects/ca/679097ea1a679cf8f21c616b60afefea3f34d6 deleted file mode 100644 index 9013bf6..0000000 --- a/.repos/1/my-repo-test.git/objects/ca/679097ea1a679cf8f21c616b60afefea3f34d6 +++ /dev/null @@ -1 +0,0 @@ -xMAOÃ0 …9çW<Ôó*8¢!Ф!Mbü€´µÖLYÜÅŽ¦þ{Ü–1nqžý½g7‘<½<ßU8«L¯”D«*¼‘´9 89÷Úu¹d ™Ô*º›Šž2ÕóÌ©†tÀ—ú¬ÔMvÙôs ŒíÜ6ˆ^Yÿ„¥Â&‰úýâýPc9´'L Äyt5Þ9F¾@HË€`S¹´ÓÙ˜ñ·ø9·,ÒzkUFºúÏ»,Ñל4‡¦Lù»UƒÏ„ Å–Ot]$o(Á'‘b•]¦ÄhñΟ ·¡¥$–`ßù»œ=ã"t(©£<ïõ¹Ùã·¿v?un‰z \ No newline at end of file diff --git a/.repos/1/my-repo-test.git/objects/e8/78c82f3642a9b7784527de36480e100c0fd1d3 b/.repos/1/my-repo-test.git/objects/e8/78c82f3642a9b7784527de36480e100c0fd1d3 deleted file mode 100644 index bc90ccd..0000000 Binary files a/.repos/1/my-repo-test.git/objects/e8/78c82f3642a9b7784527de36480e100c0fd1d3 and /dev/null differ diff --git a/.repos/1/my-repo-test.git/objects/eb/2c6de468a10d102b968b64a475eb237746c335 b/.repos/1/my-repo-test.git/objects/eb/2c6de468a10d102b968b64a475eb237746c335 deleted file mode 100644 index 44142db..0000000 Binary files a/.repos/1/my-repo-test.git/objects/eb/2c6de468a10d102b968b64a475eb237746c335 and /dev/null differ diff --git a/.repos/1/my-repo-test.git/refs/heads/main b/.repos/1/my-repo-test.git/refs/heads/main deleted file mode 100644 index 9487f0f..0000000 --- a/.repos/1/my-repo-test.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -eb2c6de468a10d102b968b64a475eb237746c335 diff --git a/.repos/1/test-repo.git/HEAD b/.repos/1/test-repo.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/test-repo.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/test-repo.git/config b/.repos/1/test-repo.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/test-repo.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/test-repo.git/description b/.repos/1/test-repo.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/test-repo.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/test-repo.git/hooks/applypatch-msg.sample b/.repos/1/test-repo.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/test-repo.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/commit-msg.sample b/.repos/1/test-repo.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/test-repo.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/test-repo.git/hooks/fsmonitor-watchman.sample b/.repos/1/test-repo.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/test-repo.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/test-repo.git/hooks/post-update.sample b/.repos/1/test-repo.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/test-repo.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-applypatch.sample b/.repos/1/test-repo.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/test-repo.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-commit.sample b/.repos/1/test-repo.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/test-repo.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-merge-commit.sample b/.repos/1/test-repo.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/test-repo.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-push.sample b/.repos/1/test-repo.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/test-repo.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-rebase.sample b/.repos/1/test-repo.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/test-repo.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/pre-receive.sample b/.repos/1/test-repo.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/test-repo.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/prepare-commit-msg.sample b/.repos/1/test-repo.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/test-repo.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/push-to-checkout.sample b/.repos/1/test-repo.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/test-repo.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/test-repo.git/hooks/update.sample b/.repos/1/test-repo.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/test-repo.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/test-repo.git/info/exclude b/.repos/1/test-repo.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/test-repo.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/test-repo.git/logs/refs/heads/main b/.repos/1/test-repo.git/logs/refs/heads/main deleted file mode 100644 index 9ea85e1..0000000 --- a/.repos/1/test-repo.git/logs/refs/heads/main +++ /dev/null @@ -1,4 +0,0 @@ -0967e6aea1334a0e48b72ff9347c9d474eaa7aac 5ea23c4e5fe28f150891cf6b73119bb9b13aba92 erangel1 1778161109 +0200 commit: Update README.md -5ea23c4e5fe28f150891cf6b73119bb9b13aba92 be8d7d3467a3b1b6c31acdd01aa7c03e2b84aa5a erangel1 1778164837 +0200 push -be8d7d3467a3b1b6c31acdd01aa7c03e2b84aa5a 3684bc48e2daf7a8de9896a1065be7d32e17732c erangel1 1778165267 +0200 push -3684bc48e2daf7a8de9896a1065be7d32e17732c 77c5c76e8ea828995772452abf1ff2444d361cc7 erangel1 1778165724 +0200 push diff --git a/.repos/1/test-repo.git/objects/09/67e6aea1334a0e48b72ff9347c9d474eaa7aac b/.repos/1/test-repo.git/objects/09/67e6aea1334a0e48b72ff9347c9d474eaa7aac deleted file mode 100644 index ed0c4a7..0000000 --- a/.repos/1/test-repo.git/objects/09/67e6aea1334a0e48b72ff9347c9d474eaa7aac +++ /dev/null @@ -1,3 +0,0 @@ -xÍQ -B!@Ѿ]…ÿAŒÂ8 -ý¶ŒQÇ— >ðÙþ£ÚA ¸ç¦½÷º´!:­)¢™±`Ê>ˆ%armB„1CÁ'çLůõܧ–Éc“fô•s¯ãÎÇÆ37ŽÇeȺ}`o}  Òw¸äT=F]•›þê ™Í:) \ No newline at end of file diff --git a/.repos/1/test-repo.git/objects/5e/a23c4e5fe28f150891cf6b73119bb9b13aba92 b/.repos/1/test-repo.git/objects/5e/a23c4e5fe28f150891cf6b73119bb9b13aba92 deleted file mode 100644 index 5bfcd1e..0000000 Binary files a/.repos/1/test-repo.git/objects/5e/a23c4e5fe28f150891cf6b73119bb9b13aba92 and /dev/null differ diff --git a/.repos/1/test-repo.git/objects/81/e7fa190a2369a48dba5b5e51a81238d0f6f956 b/.repos/1/test-repo.git/objects/81/e7fa190a2369a48dba5b5e51a81238d0f6f956 deleted file mode 100644 index 23d53fe..0000000 --- a/.repos/1/test-repo.git/objects/81/e7fa190a2369a48dba5b5e51a81238d0f6f956 +++ /dev/null @@ -1,2 +0,0 @@ -xMPMOÃ0 åì_ñPÏTÄ#MÒ$ÆHkÍâ.q4íßã¶Œq‹óü¾ÜEéðøütÓ@¹è]æQˆš¯\úF ’ˆ^¼ÇYjƘåÀ½Â_Q œ¹9ï¬ÒŸê²²Ÿþl³áÇJ0¢M(zÑú\U¬SQ£[¼ï[¬¢$†Œ)ž I>ÓC‹7‰QN(¬uD0V®ýD23þ*nÏDK‘Ž1ت -já‹ÿÜe‰¾’¤9tuÊOtL .3N{ùæ[l#;S‘\B(¥Úd—©1Z¼cµ+.’›Ðs*–`7„òw9{Æð¨Ésž{}¬wøÝoéÀUˆd \ No newline at end of file diff --git a/.repos/1/test-repo.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e b/.repos/1/test-repo.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e deleted file mode 100644 index 52838cc..0000000 Binary files a/.repos/1/test-repo.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e and /dev/null differ diff --git a/.repos/1/test-repo.git/objects/aa/5f5de7d89e27ea760d2c550fb5bf1798c661c0 b/.repos/1/test-repo.git/objects/aa/5f5de7d89e27ea760d2c550fb5bf1798c661c0 deleted file mode 100644 index e2c9d85..0000000 Binary files a/.repos/1/test-repo.git/objects/aa/5f5de7d89e27ea760d2c550fb5bf1798c661c0 and /dev/null differ diff --git a/.repos/1/test-repo.git/objects/b1/9b2b61ae8a75876648aebda30324bd6d4a6963 b/.repos/1/test-repo.git/objects/b1/9b2b61ae8a75876648aebda30324bd6d4a6963 deleted file mode 100644 index 18a3b84..0000000 --- a/.repos/1/test-repo.git/objects/b1/9b2b61ae8a75876648aebda30324bd6d4a6963 +++ /dev/null @@ -1 +0,0 @@ -xMQMoÂ0 Ý9¿ÂSÏkM↘6!1 iìNÚZM&/.‰#Ä¿ŸÛØ-Éóûrjâž_&yŠØ³1E¯˜šè{ñŒY·-\8Gè#c#ÐÞQp±9ï(âCŸb£`;¼°ŠŸ²O^ ŒÙù$W­À]¥€mHb‰ìä=/aCÄ! ñTˆãÅ,Jxc">CBÉ=xeÅÜ $µQã¯d;4f*R#8†œðê?v™¢o8Hôuòs¿©؈pFjøaOhU{ `ø”²Þt3™Hã²nq’ÜùCÒçÓmsz¤ h!‡ãØëc{€¿y%ÇÚ&g:/ÐŒÝH¿ª*âÆ’ã$«ål9«0ÚÐ!Í«ÛוJè¿|(Ÿ \ No newline at end of file diff --git a/.repos/1/test-repo.git/objects/d9/11b04610d6f228429ce9cf0fe79d4571c2a99f b/.repos/1/test-repo.git/objects/d9/11b04610d6f228429ce9cf0fe79d4571c2a99f deleted file mode 100644 index fddad27..0000000 Binary files a/.repos/1/test-repo.git/objects/d9/11b04610d6f228429ce9cf0fe79d4571c2a99f and /dev/null differ diff --git a/.repos/1/test-repo.git/refs/heads/main b/.repos/1/test-repo.git/refs/heads/main deleted file mode 100644 index 65d2006..0000000 --- a/.repos/1/test-repo.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -77c5c76e8ea828995772452abf1ff2444d361cc7 diff --git a/.repos/1/test-repo123.git/HEAD b/.repos/1/test-repo123.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/1/test-repo123.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/1/test-repo123.git/config b/.repos/1/test-repo123.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/1/test-repo123.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/1/test-repo123.git/description b/.repos/1/test-repo123.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/1/test-repo123.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/1/test-repo123.git/hooks/applypatch-msg.sample b/.repos/1/test-repo123.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/1/test-repo123.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/commit-msg.sample b/.repos/1/test-repo123.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/1/test-repo123.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/1/test-repo123.git/hooks/fsmonitor-watchman.sample b/.repos/1/test-repo123.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/1/test-repo123.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/1/test-repo123.git/hooks/post-update.sample b/.repos/1/test-repo123.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/1/test-repo123.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-applypatch.sample b/.repos/1/test-repo123.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-commit.sample b/.repos/1/test-repo123.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-merge-commit.sample b/.repos/1/test-repo123.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-push.sample b/.repos/1/test-repo123.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-rebase.sample b/.repos/1/test-repo123.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/pre-receive.sample b/.repos/1/test-repo123.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/1/test-repo123.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/prepare-commit-msg.sample b/.repos/1/test-repo123.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/1/test-repo123.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/push-to-checkout.sample b/.repos/1/test-repo123.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/1/test-repo123.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/1/test-repo123.git/hooks/update.sample b/.repos/1/test-repo123.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/1/test-repo123.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/1/test-repo123.git/info/exclude b/.repos/1/test-repo123.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/1/test-repo123.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/1/test-repo123.git/objects/85/05ec978656e5d0f9bda042c14ded933179b30e b/.repos/1/test-repo123.git/objects/85/05ec978656e5d0f9bda042c14ded933179b30e deleted file mode 100644 index a078b2b..0000000 Binary files a/.repos/1/test-repo123.git/objects/85/05ec978656e5d0f9bda042c14ded933179b30e and /dev/null differ diff --git a/.repos/1/test-repo123.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e b/.repos/1/test-repo123.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e deleted file mode 100644 index 52838cc..0000000 Binary files a/.repos/1/test-repo123.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e and /dev/null differ diff --git a/.repos/1/test-repo123.git/objects/e0/91ab05d9142d069279cadbff8a7e4b5e787d4c b/.repos/1/test-repo123.git/objects/e0/91ab05d9142d069279cadbff8a7e4b5e787d4c deleted file mode 100644 index a179e6f..0000000 --- a/.repos/1/test-repo123.git/objects/e0/91ab05d9142d069279cadbff8a7e4b5e787d4c +++ /dev/null @@ -1 +0,0 @@ -xÍA @Qלbö&Ú˜¤1n=Ʀ•„Ò„Ž÷7ê <À?íÛV\'í" 1ˆ°#É’‹]‚èŠ>ÎL™a ¿ô¹wÎm•ê`⼕vçcåž+ÏÇ¥‰Þ>ptG´p¶ƒµ&}‡*¤æÑŠ®ð3̉ó: \ No newline at end of file diff --git a/.repos/1/test-repo123.git/objects/e8/7eea19eda8c4967f0f76295468ba9d94ac94d3 b/.repos/1/test-repo123.git/objects/e8/7eea19eda8c4967f0f76295468ba9d94ac94d3 deleted file mode 100644 index 784c2aa..0000000 Binary files a/.repos/1/test-repo123.git/objects/e8/7eea19eda8c4967f0f76295468ba9d94ac94d3 and /dev/null differ diff --git a/.repos/1/test-repo123.git/refs/heads/main b/.repos/1/test-repo123.git/refs/heads/main deleted file mode 100644 index d96af52..0000000 --- a/.repos/1/test-repo123.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -e091ab05d9142d069279cadbff8a7e4b5e787d4c diff --git a/.repos/2/my-first-repo.git/HEAD b/.repos/2/my-first-repo.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/2/my-first-repo.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/2/my-first-repo.git/config b/.repos/2/my-first-repo.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/2/my-first-repo.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/2/my-first-repo.git/description b/.repos/2/my-first-repo.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/2/my-first-repo.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/2/my-first-repo.git/hooks/applypatch-msg.sample b/.repos/2/my-first-repo.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/2/my-first-repo.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/commit-msg.sample b/.repos/2/my-first-repo.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/2/my-first-repo.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/2/my-first-repo.git/hooks/fsmonitor-watchman.sample b/.repos/2/my-first-repo.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/2/my-first-repo.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/2/my-first-repo.git/hooks/post-update.sample b/.repos/2/my-first-repo.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/2/my-first-repo.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-applypatch.sample b/.repos/2/my-first-repo.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-commit.sample b/.repos/2/my-first-repo.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-merge-commit.sample b/.repos/2/my-first-repo.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-push.sample b/.repos/2/my-first-repo.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-rebase.sample b/.repos/2/my-first-repo.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/pre-receive.sample b/.repos/2/my-first-repo.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/2/my-first-repo.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/prepare-commit-msg.sample b/.repos/2/my-first-repo.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/2/my-first-repo.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/push-to-checkout.sample b/.repos/2/my-first-repo.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/2/my-first-repo.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/hooks/update.sample b/.repos/2/my-first-repo.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/2/my-first-repo.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/2/my-first-repo.git/info/exclude b/.repos/2/my-first-repo.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/2/my-first-repo.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/demo-repo.git/HEAD b/.repos/3/demo-repo.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/3/demo-repo.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/3/demo-repo.git/config b/.repos/3/demo-repo.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/3/demo-repo.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/3/demo-repo.git/description b/.repos/3/demo-repo.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/3/demo-repo.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/3/demo-repo.git/hooks/applypatch-msg.sample b/.repos/3/demo-repo.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/3/demo-repo.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/commit-msg.sample b/.repos/3/demo-repo.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/3/demo-repo.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/3/demo-repo.git/hooks/fsmonitor-watchman.sample b/.repos/3/demo-repo.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/3/demo-repo.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/3/demo-repo.git/hooks/post-update.sample b/.repos/3/demo-repo.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/3/demo-repo.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-applypatch.sample b/.repos/3/demo-repo.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-commit.sample b/.repos/3/demo-repo.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-merge-commit.sample b/.repos/3/demo-repo.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-push.sample b/.repos/3/demo-repo.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-rebase.sample b/.repos/3/demo-repo.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/pre-receive.sample b/.repos/3/demo-repo.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/3/demo-repo.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/prepare-commit-msg.sample b/.repos/3/demo-repo.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/3/demo-repo.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/push-to-checkout.sample b/.repos/3/demo-repo.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/3/demo-repo.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/3/demo-repo.git/hooks/update.sample b/.repos/3/demo-repo.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/3/demo-repo.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/3/demo-repo.git/info/exclude b/.repos/3/demo-repo.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/3/demo-repo.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/demo-repo.git/logs/refs/heads/main b/.repos/3/demo-repo.git/logs/refs/heads/main deleted file mode 100644 index 0ae21f4..0000000 --- a/.repos/3/demo-repo.git/logs/refs/heads/main +++ /dev/null @@ -1,4 +0,0 @@ -822b85a78b17deb9373a3f5a802e9db2a9893846 eed5dac1a3ac99a4e127a1b3b74acedc8c6b2945 devtest 1778145720 +0200 commit: Update README via editor -eed5dac1a3ac99a4e127a1b3b74acedc8c6b2945 b8eb0c5e1ab3acc860bb55c75fcde31ab22b83dd testuser 1778158078 +0200 push -b8eb0c5e1ab3acc860bb55c75fcde31ab22b83dd dbbf02422886140077541fff3dd8874def5d0b07 deploy-key 1778158842 +0200 push -dbbf02422886140077541fff3dd8874def5d0b07 c5c74f826a772ffa4eb0a7de315d66be01f797f7 access-token 1778158967 +0200 push diff --git a/.repos/3/demo-repo.git/objects/0c/95ad722f38257a052cb11ace8c52e6f1c3b690 b/.repos/3/demo-repo.git/objects/0c/95ad722f38257a052cb11ace8c52e6f1c3b690 deleted file mode 100644 index 3da9288..0000000 Binary files a/.repos/3/demo-repo.git/objects/0c/95ad722f38257a052cb11ace8c52e6f1c3b690 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/0c/ab0d84bbc6c67a04f7783fa5309e19e063085e b/.repos/3/demo-repo.git/objects/0c/ab0d84bbc6c67a04f7783fa5309e19e063085e deleted file mode 100644 index cc0ece4..0000000 Binary files a/.repos/3/demo-repo.git/objects/0c/ab0d84bbc6c67a04f7783fa5309e19e063085e and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/0c/cf8689c3542ebf7e2a58a0396c4038869178cc b/.repos/3/demo-repo.git/objects/0c/cf8689c3542ebf7e2a58a0396c4038869178cc deleted file mode 100644 index c1083ed..0000000 Binary files a/.repos/3/demo-repo.git/objects/0c/cf8689c3542ebf7e2a58a0396c4038869178cc and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/17/17a8dd130ab9a8e14790a94a06fcf56018c061 b/.repos/3/demo-repo.git/objects/17/17a8dd130ab9a8e14790a94a06fcf56018c061 deleted file mode 100644 index d074ac9..0000000 Binary files a/.repos/3/demo-repo.git/objects/17/17a8dd130ab9a8e14790a94a06fcf56018c061 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/.repos/3/demo-repo.git/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 deleted file mode 100644 index f74bf23..0000000 Binary files a/.repos/3/demo-repo.git/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/1d/e519f69accb5d6509bc2445e8c66115c84f9e2 b/.repos/3/demo-repo.git/objects/1d/e519f69accb5d6509bc2445e8c66115c84f9e2 deleted file mode 100644 index 74d5001..0000000 --- a/.repos/3/demo-repo.git/objects/1d/e519f69accb5d6509bc2445e8c66115c84f9e2 +++ /dev/null @@ -1,2 +0,0 @@ -x%ËÁ -Â0PÏû¹Jÿ@¤7/â¤Íbk"›Ôàß»E˜Ë¼aæµÌ†ñàpáWÁ߅螤Âà}4öjC•Vô{"r‡¶)W¢#&Yá.ùaõôKÏöÉ‘õg yI¨]Ú’vúèø&á \ No newline at end of file diff --git a/.repos/3/demo-repo.git/objects/2a/f7a10f10625157495e11c480e38c7288f0b0cb b/.repos/3/demo-repo.git/objects/2a/f7a10f10625157495e11c480e38c7288f0b0cb deleted file mode 100644 index 83f0084..0000000 Binary files a/.repos/3/demo-repo.git/objects/2a/f7a10f10625157495e11c480e38c7288f0b0cb and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/32/ec2fff56298ac465136f296ce15a91380d9f5c b/.repos/3/demo-repo.git/objects/32/ec2fff56298ac465136f296ce15a91380d9f5c deleted file mode 100644 index 6e83f88..0000000 Binary files a/.repos/3/demo-repo.git/objects/32/ec2fff56298ac465136f296ce15a91380d9f5c and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/3e/77cfa6061320c3eeeb57a0df4f43779a065112 b/.repos/3/demo-repo.git/objects/3e/77cfa6061320c3eeeb57a0df4f43779a065112 deleted file mode 100644 index c92d8c3..0000000 Binary files a/.repos/3/demo-repo.git/objects/3e/77cfa6061320c3eeeb57a0df4f43779a065112 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/6f/aa60f828e8362d9d979eda57308fcd292166b5 b/.repos/3/demo-repo.git/objects/6f/aa60f828e8362d9d979eda57308fcd292166b5 deleted file mode 100644 index 5db73bf..0000000 Binary files a/.repos/3/demo-repo.git/objects/6f/aa60f828e8362d9d979eda57308fcd292166b5 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/82/2b85a78b17deb9373a3f5a802e9db2a9893846 b/.repos/3/demo-repo.git/objects/82/2b85a78b17deb9373a3f5a802e9db2a9893846 deleted file mode 100644 index 6373fd9..0000000 Binary files a/.repos/3/demo-repo.git/objects/82/2b85a78b17deb9373a3f5a802e9db2a9893846 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/83/a6deadd9fb535dbda33ea3104eba54709bac8a b/.repos/3/demo-repo.git/objects/83/a6deadd9fb535dbda33ea3104eba54709bac8a deleted file mode 100644 index 6b83504..0000000 Binary files a/.repos/3/demo-repo.git/objects/83/a6deadd9fb535dbda33ea3104eba54709bac8a and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/95/36638427c5837fecbee8b1e444b9ef80df9e27 b/.repos/3/demo-repo.git/objects/95/36638427c5837fecbee8b1e444b9ef80df9e27 deleted file mode 100644 index 1fae27d..0000000 Binary files a/.repos/3/demo-repo.git/objects/95/36638427c5837fecbee8b1e444b9ef80df9e27 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 b/.repos/3/demo-repo.git/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 deleted file mode 100644 index 4667dcf..0000000 Binary files a/.repos/3/demo-repo.git/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/b8/eb0c5e1ab3acc860bb55c75fcde31ab22b83dd b/.repos/3/demo-repo.git/objects/b8/eb0c5e1ab3acc860bb55c75fcde31ab22b83dd deleted file mode 100644 index 9225adb..0000000 Binary files a/.repos/3/demo-repo.git/objects/b8/eb0c5e1ab3acc860bb55c75fcde31ab22b83dd and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/c5/c74f826a772ffa4eb0a7de315d66be01f797f7 b/.repos/3/demo-repo.git/objects/c5/c74f826a772ffa4eb0a7de315d66be01f797f7 deleted file mode 100644 index a49105e..0000000 Binary files a/.repos/3/demo-repo.git/objects/c5/c74f826a772ffa4eb0a7de315d66be01f797f7 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/db/bf02422886140077541fff3dd8874def5d0b07 b/.repos/3/demo-repo.git/objects/db/bf02422886140077541fff3dd8874def5d0b07 deleted file mode 100644 index a86526f..0000000 Binary files a/.repos/3/demo-repo.git/objects/db/bf02422886140077541fff3dd8874def5d0b07 and /dev/null differ diff --git a/.repos/3/demo-repo.git/objects/ee/d5dac1a3ac99a4e127a1b3b74acedc8c6b2945 b/.repos/3/demo-repo.git/objects/ee/d5dac1a3ac99a4e127a1b3b74acedc8c6b2945 deleted file mode 100644 index 797f41e..0000000 Binary files a/.repos/3/demo-repo.git/objects/ee/d5dac1a3ac99a4e127a1b3b74acedc8c6b2945 and /dev/null differ diff --git a/.repos/3/demo-repo.git/refs/heads/main b/.repos/3/demo-repo.git/refs/heads/main deleted file mode 100644 index c5460c1..0000000 --- a/.repos/3/demo-repo.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -c5c74f826a772ffa4eb0a7de315d66be01f797f7 diff --git a/.repos/3/hello-world-import.git/HEAD b/.repos/3/hello-world-import.git/HEAD deleted file mode 100644 index cb089cd..0000000 --- a/.repos/3/hello-world-import.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/.repos/3/hello-world-import.git/config b/.repos/3/hello-world-import.git/config deleted file mode 100644 index 4020fba..0000000 --- a/.repos/3/hello-world-import.git/config +++ /dev/null @@ -1,13 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[remote "origin"] - url = https://github.com/octocat/Hello-World.git - tagOpt = --no-tags - fetch = +refs/*:refs/* - mirror = true -[http] - receivepack = true diff --git a/.repos/3/hello-world-import.git/description b/.repos/3/hello-world-import.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/3/hello-world-import.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/3/hello-world-import.git/hooks/applypatch-msg.sample b/.repos/3/hello-world-import.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/3/hello-world-import.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/commit-msg.sample b/.repos/3/hello-world-import.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/3/hello-world-import.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/3/hello-world-import.git/hooks/fsmonitor-watchman.sample b/.repos/3/hello-world-import.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/3/hello-world-import.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/3/hello-world-import.git/hooks/post-update.sample b/.repos/3/hello-world-import.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/3/hello-world-import.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-applypatch.sample b/.repos/3/hello-world-import.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-commit.sample b/.repos/3/hello-world-import.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-merge-commit.sample b/.repos/3/hello-world-import.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-push.sample b/.repos/3/hello-world-import.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-rebase.sample b/.repos/3/hello-world-import.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/pre-receive.sample b/.repos/3/hello-world-import.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/3/hello-world-import.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/prepare-commit-msg.sample b/.repos/3/hello-world-import.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/3/hello-world-import.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/push-to-checkout.sample b/.repos/3/hello-world-import.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/3/hello-world-import.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/hooks/update.sample b/.repos/3/hello-world-import.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/3/hello-world-import.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/3/hello-world-import.git/info/exclude b/.repos/3/hello-world-import.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/3/hello-world-import.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.idx b/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.idx deleted file mode 100644 index 2a8a9b8..0000000 Binary files a/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.idx and /dev/null differ diff --git a/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.pack b/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.pack deleted file mode 100644 index 7c152b4..0000000 Binary files a/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.pack and /dev/null differ diff --git a/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.rev b/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.rev deleted file mode 100644 index b090210..0000000 Binary files a/.repos/3/hello-world-import.git/objects/pack/pack-b17a137e2c75abc6ed667864fc2c7f07dfe914e2.rev and /dev/null differ diff --git a/.repos/3/hello-world-import.git/packed-refs b/.repos/3/hello-world-import.git/packed-refs deleted file mode 100644 index eccd1f6..0000000 --- a/.repos/3/hello-world-import.git/packed-refs +++ /dev/null @@ -1,3040 +0,0 @@ -# pack-refs with: peeled fully-peeled sorted -7fd1a60b01f91b314f59955a4e4d4e80d8edf11d refs/heads/master -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/heads/octocat-patch-1 -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/heads/test -7044a8a032e85b6ab611033b2ac8af7ce85805b2 refs/pull/1/head -f13731c44acf96f2e5d6f0080f54e09215e36248 refs/pull/1/merge -549d75694b43ff0d0f71018200401d956374841e refs/pull/100/head -a0b9bbb3733b4ece241e6a7b113a6fb64f8064c3 refs/pull/100/merge -51cbe4c1421e4555cf3cc8ea675fb361788d8691 refs/pull/101/head -bebdc5b90aeb6930906ec33f5448f0015c8f4273 refs/pull/101/merge -93673d0b8eb7eb0733df5ea0f48ba109a73ae477 refs/pull/1010/head -d82cac4c53376d809c619dd028799484f071df58 refs/pull/1011/head -8bc69d8f14ef155d4c14b0faaef1b2056e1b8279 refs/pull/1012/head -754af091f8b55df5ef9d30bf91b8c9a68db09d7e refs/pull/1012/merge -2590c0acfeefe2f3f1e5e3a9b857c5b596d34670 refs/pull/1013/head -96f34928bb4aa252ff7fb632563e7c171745e6db refs/pull/1013/merge -b0d19b932e359f99948a1d7a3227197256c56bdb refs/pull/1014/head -7998ceef2a17334d128b93a54b8df0a0c8dca112 refs/pull/1014/merge -5bdef84f30603a29cc70d45dca4b0806eb289289 refs/pull/1015/head -b4e8f49455430953a44751c192bf140a78126f10 refs/pull/1016/head -5b13bb997904d89d8ce38b2aa4567f258b2a22a6 refs/pull/1017/head -db9ed23a6611b0ab344f240b6eadefa407849082 refs/pull/1017/merge -b850e8e4773d9a98afec9b7fd600002e6ad2faab refs/pull/1018/head -f8dccb0150795028af4c774bec6626d766f8b06e refs/pull/1018/merge -95aa27d9cf03ea8f30e4b5b55cc57dc18c9c58fb refs/pull/1019/head -36fddb5f3137b92afb820f06a1401301fe6fdb7e refs/pull/1019/merge -b4bf7cd89d4c05119bf2008a79c18e76c86c6aea refs/pull/102/head -68a2ae7aa1019de910009a8bb3a951d240e60bb5 refs/pull/1020/head -216adee202ab5aa9b46876792c0a3632c9f73f63 refs/pull/1020/merge -c2ac9baa20fe0db37a067886833bc7324875eb77 refs/pull/1021/head -0743d5410efa899b5e6da6a9627639c6ce0a2a34 refs/pull/1021/merge -ede756b64850f3b68f509521335aceabf21f3827 refs/pull/1022/head -8dc8ad6059585a895fb2e072437f63d9b2461d4a refs/pull/1022/merge -ee8e44baa625852747802b74aa05bd5387868e5f refs/pull/1024/head -570e1e5f3e94202c2a13046e003f253c5394ba69 refs/pull/1024/merge -88c206116e472148197903d8f5de4ef69a4311e2 refs/pull/1026/head -88c206116e472148197903d8f5de4ef69a4311e2 refs/pull/1027/head -88c206116e472148197903d8f5de4ef69a4311e2 refs/pull/1028/head -290391f7215af682ad16fe42eaf1d138aafd7fe1 refs/pull/1028/merge -09df6220e39b3abf957a263251d0134cd4079fd1 refs/pull/103/head -da6c99e831d07448bb3cf0d0b333c1a7fdfe255d refs/pull/103/merge -c51a3660eb33b383c1b6aabe9235137655d6ce01 refs/pull/1033/head -37bba7d7f0456562d5a60ba1903cdd6bd7c6a32c refs/pull/1033/merge -8bb25be16dcf229dda4ed643d3e44894605bf0d9 refs/pull/1037/head -5a32990dfa4dcb89eec46071064bd598b57788cd refs/pull/1046/head -d709fea4e2dcdaf70aec380d39d36e784ae6c896 refs/pull/1046/merge -6a0d7a98f5aa3d7faf3fa1ece5332121e4340c91 refs/pull/105/head -39ee9308a68fd7bc3e70622ef74094a95c581cd8 refs/pull/105/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/1051/head -8abdf737520cc3ffc6068ec7701ba034f502b38e refs/pull/1051/merge -e8e9c03ede093e70c850f7d101f143a7911526e0 refs/pull/1055/head -f2aa41f3203ece064fa6c1e2cf5c153803e2b6fe refs/pull/1055/merge -955d997d66b8d9d66fd425b0b865dbb631c91f62 refs/pull/106/head -f81f73451d9cd9547f4f2d77c2c85b50a9f1f450 refs/pull/106/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/1060/head -5478739495445ccc29533b469190d8e9dd37097f refs/pull/1060/merge -235e03d783be9f75413a44eef0d625f2b9ccb20d refs/pull/1063/head -a5a83ee00ae755fbe8971ac9f082db4b69254888 refs/pull/1064/head -5a53a931e01549126a3bb91a36c3f4f92e053ac8 refs/pull/1064/merge -1d5414f2f4880f6c8273d0334ea248fa4313c9d9 refs/pull/1065/head -a58f47347255faa4c412c5018bf59286afcd090f refs/pull/1065/merge -ca68823763b1c205ae19b9285f5e420fadeb65a4 refs/pull/1066/head -4605f69a62d25d32c117279ad227f2bed15b7f19 refs/pull/1066/merge -02c1914af594abc3c49a3af9dc278643bccafdc5 refs/pull/1067/head -9494b43b8ea3a7139236dd8f2acd55001b09206a refs/pull/1067/merge -17e5a9326a3dbdca4f32f35bdda6ed5db42fd369 refs/pull/1068/head -4a405a66b01f7ed2f6205822cfba97076d4fd57e refs/pull/1068/merge -ec2f3113d37abbf8667530be506a4758a4319035 refs/pull/1069/head -68c49cbeefeca0256074b0e7e8f78da8f8d3d3f8 refs/pull/1069/merge -600eeb62a188895fdeb641af1c6e843e27183ff0 refs/pull/107/head -970e463c2855a32c0e5859a869e3bfac983bfb31 refs/pull/107/merge -6008b600b2388adfded26f691e90be1821e309b1 refs/pull/1070/head -094adbda91b0cfd5531481b133fe4520f0ee500f refs/pull/1071/head -c9e2eb8d67e88a18881dbf0285d7b72aa10b2cbe refs/pull/1071/merge -6008b600b2388adfded26f691e90be1821e309b1 refs/pull/1072/head -30d297840f79ba304d03765105880d02514502b4 refs/pull/1072/merge -f4e7e684efa5e1b1fd5a7b581c08b88e46e22e79 refs/pull/1073/head -947d8b00179ee181ef8b66a321b8597fe77bedff refs/pull/1073/merge -86d1d82d3c6e6d5918456e6c82848fdd50bc1fab refs/pull/108/head -a9dd8a7efdca219cbd1f44405e425bdd67ec920e refs/pull/108/merge -d5ab6b3211a2f00268d4d0140d4e2399a03fbfe3 refs/pull/109/head -69b03a4084f1b915fb60b7f040ced0ce9f227191 refs/pull/109/merge -fccc53714c2e15bb62a95dce1efc1582e6dcdb58 refs/pull/110/head -92105e394835ff10c2f5e8e0a733d25771f67a86 refs/pull/110/merge -bbf5d6eebdc63cc1a1965cb1642df3f0c2a6fda0 refs/pull/111/head -140c7d5d3b3d35bcb486112444afea80f9f4d3e9 refs/pull/111/merge -7fd7e17262f599c807c783fb67e448f905f08b8c refs/pull/112/head -c93a0443cb838337e08c963ff4bb7d6428ba18d8 refs/pull/112/merge -1f996f2883c5ea06472694f4424937fbeaa22023 refs/pull/113/head -b2eb28631c35238f4213dc49f9190cc1cc79652a refs/pull/113/merge -d512b49ed5482ed68086504462ebf9fc06eb5907 refs/pull/114/head -5ba40f734acd3b24f7fed235470c26ae50081353 refs/pull/114/merge -bb11f45f1b075c90ee441de2cff2f447f2dd80d0 refs/pull/115/head -56113bb6f63ab217574b1c50e6efcb164bba87ea refs/pull/115/merge -98cef27ca354bb154d849e62a99da0943acbcfcf refs/pull/117/head -f7aac7d6b9e832bc3ea8fb703cd453c2c0f87900 refs/pull/117/merge -d2eccd353954325a0d6f2a87df7c271831d3ecc4 refs/pull/119/head -d539396a307c0ae221affb4b7ed1f887f13d7cbd refs/pull/119/merge -f2be6c569c0241e1de481009715dabfe8f6ee867 refs/pull/120/head -d5b106c94d3ffa32ba28cab0ae7e151de290b269 refs/pull/120/merge -7b891a4f1245fab899d65f974de81f628cc23b63 refs/pull/121/head -3c84ffd78acc496bc7019a26addd98dc011264dc refs/pull/121/merge -c5160b209b9094e02c90e7dfb39523db72949d44 refs/pull/122/head -c80ad89c7c214bd511aa3c53c03af9610b200128 refs/pull/122/merge -5606d5a22cf0c624c719a57ddafadf4aa9b84992 refs/pull/123/head -99171d0ec80c215d94e851bf9e69df88d719ed20 refs/pull/123/merge -0e36e7fb353297f425e12d69f130d4406a29a2c8 refs/pull/125/head -917eda27b586ff8cfe3443a1b89c1775e425bd1d refs/pull/125/merge -f8eda913874047e187d9a9b05cb9c4d6ed98da94 refs/pull/126/head -b10c72210b5bff49a6a174a7a4a75e6dcc0e3fd2 refs/pull/126/merge -139f8420b72434b933cc7b464f79e45ce67e7fbc refs/pull/127/head -af63d1a4c5f94131bf9b9b7db8cf4325439857fc refs/pull/127/merge -2b3f4ed5967f931878d8417ad164172081a352ef refs/pull/129/head -d35ba8f753acc3cdaa1f42750ed38d3c09e1bc36 refs/pull/129/merge -b4d9f0bb81b63e7a597b9b3bdbae1ee3e1e04978 refs/pull/130/head -d5a9d77049af473a5ef35d19430dd43fe8edc413 refs/pull/130/merge -ff9df160e98512ad1f9e9924d509f36172fabe8c refs/pull/131/head -594a38eec189e1c95897567bf52587d1d3369bb7 refs/pull/131/merge -f1e267d3f7af10a55fa387906f9e6285b2c5062c refs/pull/132/head -4c04863021a9fbc596f20b80f582f84d6750ea95 refs/pull/132/merge -6e7eb8adda78a7ab0722b34dda81aa7057d3805f refs/pull/133/head -aac1ded0a78e727ba5109748c9a482cf4a75e861 refs/pull/133/merge -73c67887542f41ab7e1f5e9eaea06aa5e0950684 refs/pull/134/head -b3e4d1ade102427c3952f9e6213a3594fb5ee5f6 refs/pull/135/head -f6ae7b3ae86829360d1db5faa4fdb255e00db5f8 refs/pull/135/merge -549e3b746004f7a6529eb10c309c6897bd1369c7 refs/pull/136/head -194def77dea080dcea650067512ee54e74d67176 refs/pull/136/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/138/head -4425bcf9dddb01778dbe8199856301d3d13d6d8f refs/pull/138/merge -561c2aeedcf1118adf0bcb2ac6792def4b8629b5 refs/pull/139/head -56382754f3fd858d0c1ea778484db41ae8edfbf3 refs/pull/139/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/140/head -4eadb3265983d9f27e02277d0350dddfa47ee148 refs/pull/140/merge -cc6b305df52358e1b23fec7186ad5511cc38c41d refs/pull/141/head -63d87de8a26cb1f578753dcfc4b4eba8a0c53d67 refs/pull/141/merge -cbc0df0bd64f4630c7de3471808ffe7c14f31901 refs/pull/149/head -6be4c753b265cfe574b6f6367aff0f0f4d2376b9 refs/pull/149/merge -117c02d4f6cb962cf52233859f7d1b6df3c5d5a2 refs/pull/150/head -88da3a6c74dc472895bfd2937cfa01e5083b2c31 refs/pull/150/merge -4ab8aa9ab4931d761cf2dd0a3f91ff0c34def7ab refs/pull/151/head -a280a915178bd45699557ff03b86464bedb64acf refs/pull/151/merge -d3b8195b58ed186e33aa0db8ba04f894a59c91de refs/pull/152/head -73d79afff060e563ab34ebb273f3cb7b7c47c5cf refs/pull/152/merge -b5f6285b00b1d2949bac8c5000ed3ad3e89162bb refs/pull/156/head -0e922fc4c60c81e12f27133b1964ceb28d849b0c refs/pull/156/merge -ec18ca7bca5202d8e139a58b25757dc161255245 refs/pull/158/head -2dbdae14e38b9d2c362bd6e61dc3ce15f5661783 refs/pull/158/merge -92a18cc474a80c4a0a3c73e80a76ad64a6e4d475 refs/pull/159/head -626b59216e8acd7f80b369801b4be90b01e6cea7 refs/pull/159/merge -bc9c579cc2bd4e373b20cb509fbc82f012d9fdbe refs/pull/1609/head -e782bb87752c326ad2f49b3bf8ff632cb95297ea refs/pull/1609/merge -48236f06a6cf616f593dbc7ebe4e756a9ae32b8d refs/pull/163/head -61811d9c62d0106fce3a2a3e6b0d740a18663c25 refs/pull/163/merge -4d5cc3ec84d05483d0ddcd7a20681dfccbc31480 refs/pull/164/head -bab5596abaeabeced99f4ea34134c8caa86e6284 refs/pull/164/merge -4a89ee9aea88f9266f2f255340598b2b03ad9644 refs/pull/165/head -cb26d11eb69b2a5fb31acf393a4f4241b9c5b2b9 refs/pull/165/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/167/head -2ffa3ec35d6062f20e8085f8a25204bbaab47f71 refs/pull/167/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/168/head -795d57dbab41794f770e3a17b9e0dfdfabb2fae2 refs/pull/168/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/169/head -7e7162477a15da412a9ec03b73a694f8473b0204 refs/pull/169/merge -734d7ee40e000e856b9586eff4362ef97531ed9e refs/pull/170/head -6b8a5bc5fc4501795e5d6e982cf76a7f69ebe4e3 refs/pull/170/merge -e65d001ad82a70a6b94a2fb48b43a565b6f2fb7e refs/pull/173/head -b794c3842f68c0f582a118f12abd3f8d3853bcbb refs/pull/173/merge -9d5f89fddef05005ee1ced101eef8c76b7aa9173 refs/pull/175/head -9d131debf396fdd93b46d3b3a743228815d4e162 refs/pull/175/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/176/head -70e4d9575dc30ec9397d5b9d84939ab436bbbd90 refs/pull/176/merge -5bac952e8e18f8dcfbe2223bd5fc9f46ec4f3caf refs/pull/177/head -09e10ab4f817a80d7a409335efad584000c1bd2a refs/pull/177/merge -1762bf195045086055b6b12b957572494094bf8b refs/pull/178/head -f6f743223d30af56832cd03e479703cdcdd949e7 refs/pull/178/merge -f29f8023b2fc26faf73ae121313002014512f4e3 refs/pull/180/head -3ffff3ee27f44ff68d7513f8e144be6f00be971e refs/pull/180/merge -b37e4945c3e2ad38dfd353c730531f6a3b3ed273 refs/pull/182/head -819811d111cb848cbf96ba4e860006d0a5ebe070 refs/pull/182/merge -40049d1b76ad4018568d10e03f788126f5d3b7e5 refs/pull/184/head -27d9d4873e03e915a26852996e5ecfee80e392d4 refs/pull/184/merge -1e4273e4938e6781887d4107e22eb7b1a689ce63 refs/pull/188/head -49b8734c5ca6043c3511da2bb4991407663eb4f8 refs/pull/188/merge -4fb8a2498225aa1cca381175926aac691b0ca175 refs/pull/189/head -6fa56c3fc3005d2c6cdbe540a9abec0775387d53 refs/pull/189/merge -63257c51014802b057762baccc53d763d351da6b refs/pull/190/head -4b7a3ab587dcb127fdbaec80116615babf2ea752 refs/pull/190/merge -4e66dc70fb39467e39b82b6eb88fef649c7ab0a9 refs/pull/192/head -b8701b201d788dfabe9be5ba1e59a6a9bada4ac7 refs/pull/192/merge -5ef25fce98736bdb5f272deb3a215ccb4f022e61 refs/pull/193/head -0e70a65ac5893ed713afeea5a3246f4814026a64 refs/pull/193/merge -5ef25fce98736bdb5f272deb3a215ccb4f022e61 refs/pull/194/head -0e7cb5bdbfd7245f535efce33a947a7566fd7dca refs/pull/194/merge -826aa76e7a796d9bb9378cbba2a5d0c3538f5b75 refs/pull/1942/head -ddd268b6267641cf9c3930826c118ea2119e1f2e refs/pull/1942/merge -fd1711e93086d41f56b4caf48fcd73ae8fc2f9cc refs/pull/195/head -6d23800e8317ad62d186b4f686a16ea47bbe81c2 refs/pull/195/merge -4ab2a2444363f009c9da8f3f4ae7a01d6b1fe5e9 refs/pull/196/head -02d8681275e29404083648dd1aadd9b1fd65d928 refs/pull/196/merge -2a8ff747a3d1e8f3506f159487db94960f5cfb22 refs/pull/198/head -79dc3916adfd2355d032cd100b31afb371e8c73c refs/pull/198/merge -c924aea18853fad14fd1c2f809caf1ccfd1d9744 refs/pull/199/head -47d3fe7e1f45e30d2c16912247e8f0025a027500 refs/pull/199/merge -51735b4fabe0086c23e13d74a3312f53f3ba90cc refs/pull/1999/head -11032a190cc1d55bdd9e6c2b728f06674b6b7f50 refs/pull/1999/merge -ce9b3dc76dcc24a6e17cfb4ccee92e47205c5739 refs/pull/2/head -2125511535b3389a555da4c5e9ff1db4e8f7836d refs/pull/2/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/200/head -deb5ecef51b0ccc8574cf90e23e268a5c4333792 refs/pull/200/merge -c924aea18853fad14fd1c2f809caf1ccfd1d9744 refs/pull/201/head -ff87a1cec07afda0c1b3b88cd490ced93055ad86 refs/pull/201/merge -ec338c95d2277c299048a6ee24b991ec11ba115b refs/pull/202/head -df22248d43e4aa68b72481f146af2209613b3e0b refs/pull/202/merge -23b6346ea65cb4f88a87a9066329e7b344075ef8 refs/pull/203/head -3af8379e4aa0a1f87247f63b25fb1bbd7a5378ac refs/pull/203/merge -6fea83f6697d0c6467f59d13e79bc6f5b7e2c809 refs/pull/204/head -c94b9b7b8943dd5988d82be401c96f0199e099a8 refs/pull/204/merge -c924aea18853fad14fd1c2f809caf1ccfd1d9744 refs/pull/205/head -95a00b35201f474fe0d4df6ebc4df18059879727 refs/pull/205/merge -e51ddcb4458ecd40b6a0d24d5e495d4e8e42fed5 refs/pull/206/head -6902f2781aae47ccea09ca4d2e3ea718f48bfd97 refs/pull/206/merge -0419c63cd7ccf7bf4c6a39bff35e67f439ad188f refs/pull/207/head -7f69e54cd02da51960763430fc9e63dae25d564b refs/pull/207/merge -7c87c6e180591b45f35fca47c6f875f6b5a410d6 refs/pull/208/head -5083a14116ed4612d6064f9b0f3b237fc4ad59e0 refs/pull/2091/head -3c852b71cc947f9875ce6ff9a49c496f30ded973 refs/pull/2091/merge -192d6c8b3842016f8055cbca5d63d7b1f1be2ea4 refs/pull/2092/head -dc6a34ef4c024b76fe092927b1ce5a2162ba72af refs/pull/2092/merge -67c35448bd56d56b29eb6aa75e1142f8cfda58d3 refs/pull/2093/head -bb575b8f78aa64fd99e55f852812af0023405bd2 refs/pull/2093/merge -543259410805744c2e7b9e62644de7554114fe29 refs/pull/2094/head -62f0201be0b3e2755a232d8918358bb6c2ec7f4a refs/pull/2094/merge -63adccc1a136090ae83bfde632ff671dbaae5c16 refs/pull/2106/head -f78e85a17e551e574fa5969ce55c131db3852b5d refs/pull/2106/merge -73732dfed83f29678f7910d16c3433f6bab9316a refs/pull/2108/head -93e7c43364ceda21351899c145fc4ab1c7e2a95f refs/pull/214/head -4344e89223fc39ded116e9f41a66bac5761a95c8 refs/pull/214/merge -60d0094d48cc461712f83b6788240a148bb559fc refs/pull/2160/head -bd763ac5fbf4dd286045174e339a5495b37a7973 refs/pull/2160/merge -3fa6d65cc363ef3a3faea1f33f5d2ba5516b176f refs/pull/2162/head -11281fbd6aa5e7f72af06c0fb23da8bc3720a37a refs/pull/2162/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/2169/head -3dbddb6c41d5c112e3938d9fa09eb600108e944a refs/pull/217/head -8f879f50a4610d06adbfb45af49423dfcc9324b3 refs/pull/2171/head -762941318ee16e59dabbacb1b4049eec22f0d303 refs/pull/2172/head -4a829b4bde6263f935454efb31016a031c186c21 refs/pull/2203/head -233e9ed3b8fd822df7bf14d04d4cf062c26700a7 refs/pull/221/head -e913ab05ff6c5bc82acf6cae6288dd509c4b2dcb refs/pull/221/merge -38e22186d1564c20de15b92f76b716e9280d2dd3 refs/pull/2213/head -e1a8665ce6cce6ad1f0208204173ecd22d345bcd refs/pull/2213/merge -8b349562966ef3266485b0769039583a5cf2be29 refs/pull/2214/head -85d49113d08c21ac1464a28ffe46c30718dac824 refs/pull/2214/merge -a21d71e821e052c862253e8822a1afccb0207850 refs/pull/2216/head -ac7732017888f46d3a936cbe62c449354f0e1279 refs/pull/2216/merge -b74e2083c5796adaf49ba7a861fbbd9afede413d refs/pull/2217/head -baee194a19b3060bec750f8dc68be3729bdd86d5 refs/pull/2218/head -02afebfab17beb3cbf30c4d9e6cedf341350ad96 refs/pull/2218/merge -8f6e5f5975833624e68e4ca41b1aa1f135034fa5 refs/pull/2219/head -ca084dc55866e264c850326790fbedbe5743e927 refs/pull/2219/merge -2f3a38f7f6116410d2e4d0d32b7eb9019e088083 refs/pull/222/head -7117bfb5219a50d9778335dc4c804b5a5c1f4343 refs/pull/222/merge -39304a464fd4269538d3aeca1a9e0973c61ca22b refs/pull/2220/head -c50438417869d9f5319e9b5b774b5b4d0b9c9b67 refs/pull/2220/merge -728eedf2084a23054608d743ba9f2df52ce8fe1f refs/pull/2221/head -e27ddfb49dfe41b4de6cdf964535871da0449d03 refs/pull/2221/merge -204ddc898a6da5206c8ba56f870027b860a30a14 refs/pull/2222/head -29844023799468e97e589704859e4ec2c2c09284 refs/pull/2222/merge -f82c17f5b6e559ff94ffb0ed8b6a131e8c148037 refs/pull/2223/head -8b42296c01db4cca17031280b15001841a0cf781 refs/pull/2223/merge -d3e506287baaf40ac51cd1dd71c4a339c6299e97 refs/pull/2224/head -5eaff13d50e347c9c5a508ecc1d0aba2264ac90f refs/pull/2224/merge -da50ebdd6cdeaf5f4712cce85397963e2efa4f5e refs/pull/223/head -b4d2409d0147c471276bc496c77429d74ff410f8 refs/pull/223/merge -e9d2380794fb289bb33dd8b8362b6e4c8e547751 refs/pull/2230/head -26c9ce2395d0f8083b169919e8f3502dddd3dba8 refs/pull/2232/head -ce6444bff17742b756cd9f0ce1cc1928cd089bca refs/pull/2233/head -35633dd6cc3a74105842a2c4ae441388ee710605 refs/pull/2234/head -f4dafbc696cedba722a6554a2c1a4c02fc745eb9 refs/pull/2235/head -0f94dfa3d07cef995e85119e8e39d14e25477d88 refs/pull/2235/merge -2cd599c33446a1e8e63105c3cfc8d6062f6499ef refs/pull/2236/head -4de9e5a3f76cc7ba66f7513fe582bc80f6998b68 refs/pull/2236/merge -2e2502cf4528e8e565fec02ca2aa0fe1bb984604 refs/pull/224/head -6f631519efad4f9386d89937df5974d9263f9385 refs/pull/224/merge -2e2502cf4528e8e565fec02ca2aa0fe1bb984604 refs/pull/225/head -62acbfa49b0760df6fb06550fbb19d548efe05b0 refs/pull/2252/head -a17050c520f53c9ea11c2e4500bac68bc700f84d refs/pull/2252/merge -1bb689bf1bdf9bef96265a42d99eb835d0475d06 refs/pull/2253/head -c82ecfba9918f69682cb9c99beed3e179864920a refs/pull/2253/merge -0ff8b8a4bd2f69ae602035bb1e10009c68fe984c refs/pull/2256/head -4b9ebecde2c08878f74abc55442ac07526bfd8f6 refs/pull/2256/merge -d4694814b0636a1c5eefbf5ed63bc866c50c3930 refs/pull/226/head -e6e7f9eda14ae97a8b54d58b595084309871cded refs/pull/226/merge -faf288beb8781bfea178401ebaac67885e743cfb refs/pull/2261/head -abb540053167ec2a420541049982f16f9d9ca46b refs/pull/2261/merge -75b56a2bbfef935ed77040038891698d9c8111da refs/pull/227/head -2aa6d1a578555bc9cb8189e707aa186e334f063e refs/pull/227/merge -ef8d9d52ab968bc5d12523a6e51fd643bbd714a4 refs/pull/2271/head -2798c0d7cad13493bdacc8057a8d9db38f37330a refs/pull/2271/merge -be0ccbc58f86c8cc377498648722f71d42e937c7 refs/pull/2274/head -d255115461deeff7875b59c1ab797e77e291a2da refs/pull/2274/merge -10bbe627e9e39298b1ab7ddc021b44016f16f993 refs/pull/2279/head -20d98f2ea66e1a3a77258ac8a472cc3ca864e9f6 refs/pull/2279/merge -8f2562bde8313b5fd05c1ea86d617f1c4f6838be refs/pull/228/head -2da814fd54c100a96f227a35697964f501b29cf6 refs/pull/228/merge -130ddda71dd163c1511b9fcae8acde233d565f5a refs/pull/2280/head -76ce925766af89d470848fbf636fc68a151cee38 refs/pull/2280/merge -02b890f1d2361707e9411860f785d23d2a2a9963 refs/pull/2281/head -3f3e82b3b2a94aae00d305cd05212e1d3dbe758c refs/pull/2281/merge -986824d04f4f995f014779f6ac728f5c85ea9bce refs/pull/2282/head -1e05171f879443a6fd6698436044dd682dd7dffa refs/pull/2282/merge -221b4b674e657e60a48874de320a154bba24e4ad refs/pull/2283/head -1a4a1fd6e14ae03c1fbb6c2597840692b7ecd8a2 refs/pull/2283/merge -3be6ce39fb754eab92423c0a109f18f2c4519453 refs/pull/2284/head -653e783e3122bd298fe01bcf8add06c0fdace1d9 refs/pull/2284/merge -646e8a7d72565f5c80c5de5dc4d51b3e738a6aa6 refs/pull/2285/head -2137b5b33cc75024e4eb01fd85dd98245243ba5f refs/pull/2285/merge -8efa447fc40d70364bace764438e2fa89e63d9bc refs/pull/2286/head -b27eab8913802f304213717c640edf375368380b refs/pull/2286/merge -0bf6fa0cbfd22a9d59ab9b88e24fcd530a1bce9e refs/pull/2287/head -892aa7d2e532564cf2f10824e2d28159806f1254 refs/pull/2287/merge -c3604d811ba7ccf8c3a3dccd91c9f6f0ab060738 refs/pull/229/head -0767b08038762a50b14bc71878fc5f54e8c8beaf refs/pull/229/merge -195a49a55fe9c6263554519f620f18b26b441dbe refs/pull/2290/head -43bec4d92343a7141d71b02157f2757217f3ea28 refs/pull/2294/head -eac0aa3523c4d6fb187e372d783ec2156338adff refs/pull/2294/merge -4ea61bdbf78b81929df1e47ad655e5007ab6d30d refs/pull/2296/head -de8029578a8ed659586041ed9a6227841ab604b0 refs/pull/2298/head -b78748ce9643933397947a72e1e978e3c15adcf6 refs/pull/2298/merge -e5c314ba60127d80bb62bdace0a2c5fae284cf9d refs/pull/23/head -02c5c535dabfa9fc65af8b1cdfc4a4f116349eea refs/pull/23/merge -3d9812857366d0412f1869f89df802e59653b780 refs/pull/2317/head -05d221ea35ec9bf1be09b4d97e2f8abae4e21726 refs/pull/2319/head -d1bd9ac97898044637c42e8ce040946a18e2bfe3 refs/pull/2319/merge -7206281186c249130c9e57621f9ded85b85a98bf refs/pull/2326/head -bc5c168c958a53b907f244262c58d826a3ee3cf3 refs/pull/2326/merge -d6a6bc22a79c8b0f96baae4f4bdfcf9535c344a5 refs/pull/2330/head -cfb71d974c1713cf2747424597a9664907bab02f refs/pull/2330/merge -227aee24f63b73f1015a09887711d99421b79410 refs/pull/2333/head -fc375d1fed435b306dc8ecf9cf01898dbd8f5390 refs/pull/2333/merge -f35f184fd358e80df4fae57226e52af3b516aa06 refs/pull/2339/head -4c09be0096b0355183eb0c8fb151261c924581fb refs/pull/2339/merge -f745198efd7ae383636b7b1c3b04c53c65d8660f refs/pull/2340/head -ca0f7f1b4cc8bf91dcf271a13e12b1f6d6ff9bc2 refs/pull/2340/merge -e609f897b5e2f346f744c60203bde567f1342a16 refs/pull/2341/head -5ae0c2b3fc75acefe9ef34e19ab06f4ec16315f2 refs/pull/2341/merge -603680506004d8b06d3550fb96f60a56c98d7a20 refs/pull/2342/head -53eaf9ef038134cbc9e8df134ea54c30d159f7d9 refs/pull/2342/merge -14d71d6e77fcc621e8896793da1f15e870a3244c refs/pull/2343/head -5fb615b75f956c1e4bd7d74ab9278f29cd18e487 refs/pull/2343/merge -fb92af6090a3be39c821b2456f810dd8a478fab5 refs/pull/2344/head -08dcc4d543bb186574399420457af706847653cf refs/pull/2344/merge -9965246b9e180989c814f57f9feb29d81880c050 refs/pull/2345/head -ddec72c2ff13086e553bc22e397b992fed31a4e3 refs/pull/2345/merge -8eb3f3a02f4326d6fe12ea57a8738128260f7e10 refs/pull/2346/head -6d2af5d3bbb1c8e7948b067d2366f8b57ceb1c63 refs/pull/2346/merge -b3f2eff47e931d388625c6ab5d95140f62a0329d refs/pull/2347/head -ee162df0139b0ecfdbab6497d6b4f9583ee1c7b3 refs/pull/2347/merge -57386f98203b19389a5d1be94fe9bec148223fc4 refs/pull/2357/head -1faa0ec12966c0b1d77a969d69ece66fa84296dd refs/pull/2357/merge -911b117d5c2dec2c1f9ac0254da1c92edf8f45d5 refs/pull/2358/head -046035c07000d7d0a7068efa1c9d46fee25fdc64 refs/pull/2358/merge -15aef586fe7f2efe6e075363861afb00472ecc56 refs/pull/2359/head -e86b341577ed9bec84d97704f467cb2356294ade refs/pull/2359/merge -15b675daf244edfbb10c39b60f09a6d1f423ff7e refs/pull/236/head -cb8ddf417b2bfbd3c42b7276a5c5338e674a38e3 refs/pull/236/merge -808a7310079e3daddc62dc3805ac4dae79f57747 refs/pull/2360/head -181495b8c68c393e5867a68d82c808bf494ee078 refs/pull/2360/merge -0445d4408650ae445649d3c4cef773fa85b9f8cb refs/pull/2361/head -698b446f313fcd4154d685d796629aecd2e4cc38 refs/pull/2361/merge -d4b230159ea5b0e437e678a0e53059c993510b63 refs/pull/2362/head -503e37e295d5f52a42f721608e4f8f90a4ff6628 refs/pull/2362/merge -7a1fcafec23fc2477f43942788365d8b07b44e01 refs/pull/2363/head -c6788f97a918a815879ba0af8d557ac49edccc40 refs/pull/2363/merge -504da3f6542cd9191b595709491eab3f260bb7b6 refs/pull/2364/head -048af899d41d7f0d8f9266299cc7c2f04c88adfa refs/pull/2364/merge -c4da830fec5cd95212cbf57a33a091a0e46876fd refs/pull/237/head -3689174a70dc4b44d3c8122dc9774f9601b621c2 refs/pull/237/merge -f3d3dca47fa6637983502af5ac2b8b4e8109d5ac refs/pull/2377/head -cb36afaa85bdc4e864373fa95bffd5c64450bdb3 refs/pull/238/head -a190176a07612f56c372329c7003964c0421a077 refs/pull/238/merge -138e147a7f28eb176f2dda048fa583f120a47523 refs/pull/239/head -a11fb45a696bf1d696fc9ab2c733f8f123aa4cf5 refs/pull/2403/head -7181ca978921d347c0fc00e0c26cf427000ebe97 refs/pull/2403/merge -641521cb4b7d77c0cd3e8d6bb6f281d2e80cdce5 refs/pull/2405/head -2282c8b669d284d334e7c5a0e6de6ec60be3ebed refs/pull/2405/merge -47d2295fe13e5385692fa719d1d5634b85cd9317 refs/pull/2407/head -8f0125b48d23e1d75d9f9493924977e14f6f2cd5 refs/pull/2407/merge -b4384fc383b2d559e3963953d97f46298c5789da refs/pull/2408/head -387f4ea16a42ccca0f06423f24bf6d2ec97171b6 refs/pull/2408/merge -69fab9c796b4a8c51f4654554670ca95015bafb2 refs/pull/2409/head -7db2d929db76d97d9236fb14f787494385efa93f refs/pull/2409/merge -108f21edc15fef8d9df596335dcff28d272387ba refs/pull/2410/head -b1d1cb84a31c6c204411822dd8acd4adaa8d54bd refs/pull/2410/merge -b1f68081d35b58247d0395f57c5347e4fa018436 refs/pull/2411/head -c9db9f3281bb2d658b93e51308b05186adb2835a refs/pull/2411/merge -f19cfc3afd3710c7c5f3070f64ac335b77915980 refs/pull/2412/head -2669db4f00f7bb2bbc8d1c0863d97e1fcf46c436 refs/pull/2412/merge -9e5ea32f2068b75619fc02b8ed759df837629231 refs/pull/2413/head -0aefafd5687be5575d1998032ed909bad24ea918 refs/pull/2413/merge -104a0516042d8667709ab28344c595d1d94fe3d6 refs/pull/2414/head -d2387446ce78d6189b5f182528394bb98227bc96 refs/pull/2414/merge -bc48f9c9079f1f7668d083dfaf4d5137ec68ecef refs/pull/2415/head -f3b3240d40131d464d53bdb82d15730324983ce9 refs/pull/2415/merge -bcbf95790e5da17af9a191377c60fe69bae23d6e refs/pull/2421/head -6ca04600d4c19ca25dfff5fc88b9364626bd1771 refs/pull/2422/head -00f447d6893b233f9286ef1f1266ea70639d6be3 refs/pull/2423/head -ec6cfc69a10390f50241636aeb9c00dc024f2261 refs/pull/2423/merge -04784346505bfeb0646f1ea58eb8c8c35fba8a85 refs/pull/2427/head -a2500a04b89b4b0e9c65682ed382d8bd870c62a7 refs/pull/2429/head -de07d1385fe29a77e91a074dc3cb8839ea568034 refs/pull/2429/merge -a7c8614a98d0fbceee056b8b7981d7cd4cfa4897 refs/pull/243/head -2763a2b8c39b9327cf06c6fac1b03d4632b9b1ef refs/pull/243/merge -aafe04c5a608b97144b927ea5e69429b26a7b041 refs/pull/2430/head -fa739b7b81dc5efe07c6d311a673e8115d147480 refs/pull/2431/head -d6ca709e864ccad12e11aea61ca3950b30a97b45 refs/pull/2432/head -2a10b7feb45ca9922dad06ab106602221136be25 refs/pull/2432/merge -d667a78ecab819e72c0d39b9b0cdfbc5c9cbf9e1 refs/pull/2434/head -dec31709b9ca6dbbe92ea52a72c1ef9a46116f52 refs/pull/2437/head -8d1f064f9f5bf006b2e0cb0129cdb83570b71515 refs/pull/2437/merge -4cb0e9b3bd4233c8fc0e9c3941edb7c0128e96b1 refs/pull/2438/head -1e5b040a2c24d4552300723a302dd3cb1f3cd2b7 refs/pull/2439/head -f902eef89861dabe80680ed3c33dfd7ba2ee15a0 refs/pull/245/head -1cbf0aaa85975325f6bb30222b911dfe7202eb5c refs/pull/245/merge -d234f7eb932db6cc114640ec0db81dff89f20d63 refs/pull/2457/head -730c8fa836641ab2e9f865c1674111a606e5d300 refs/pull/2457/merge -1a3fa2fd3661dd495c40b091dc8e4f41a5ac4ca1 refs/pull/2458/head -0f4ddced6bcfd2c70c8777d10298e0e9c0e1b03e refs/pull/2458/merge -a8cf193617666fb5b50d4e9454c5ffeb51ba4c27 refs/pull/2459/head -2ce64cc617dbda8622e0a8f39572bcd6f5b5f560 refs/pull/2459/merge -061640e94a2e82dc0108f794955b499a3ce5cf42 refs/pull/2460/head -125197c23e33fd2348097095bd946753caf071f3 refs/pull/2460/merge -eec918687d0cdc4660a37d428ae9d0a5e7c52cb2 refs/pull/2461/head -f4e326cd181d91880c709f2d5ee8b6a9f8a9208a refs/pull/2461/merge -acd9a761e2e3de2ae3df50a35ec5c6355fff860a refs/pull/2462/head -5ac02cd534dffd2342ecbe8a4fba72a080b537c3 refs/pull/2462/merge -542979e23fdeb6accbc6d36127eac7435cc75ab5 refs/pull/2463/head -dced948c1d6b40e99ea76a71ee09a191728ea2a9 refs/pull/2463/merge -b22b06ec62b9f6e72739255b789c4e115f24785d refs/pull/2464/head -b3dec75f00b4aa78f16f0e85eac14529cd5e9223 refs/pull/2464/merge -51346cdeede239054562761130a1a7e9a4fccabc refs/pull/2465/head -77ab296e6aa73677b86b2852438a7b349b959c06 refs/pull/2465/merge -fd49240256bb061a84631afb24c2e8f896343320 refs/pull/2466/head -dffeb7855da38d085bf6bc9dabfb170691540ef4 refs/pull/2466/merge -c8d354bd2dc3305215689e61490a9dc7cc74c3a3 refs/pull/2467/head -b100f236cea6cf8455543a44014c0d186d527b92 refs/pull/2467/merge -b7ffe9556a63a6a879bef854034884922ddbdd83 refs/pull/247/head -cc73b586dcd9fcc5bdd73a9cd6f4d9a98dfc9ef1 refs/pull/247/merge -bc36e1096fdbfe57d7bcf6978630385103f03e7a refs/pull/248/head -a8fa8e3e89658c32ed2c121bf54d67609cc712a0 refs/pull/248/merge -a9b5d397d6d586fcf55e8125dc6a23d08d8035a3 refs/pull/2481/head -539308c24b493960af4855b08824548077a34219 refs/pull/2481/merge -250f3c5a20cc8a0fc93a8aa8579c995fdd1b0bd8 refs/pull/2483/head -503d507968986b38d16f7e41ea48e21d5ac60fc6 refs/pull/2483/merge -07b08c068020620a53ac10bc05699c59ee2ba21d refs/pull/2484/head -07b08c068020620a53ac10bc05699c59ee2ba21d refs/pull/2485/head -2ba51f6d40115c7abde0be9e415c15460b2f1ea7 refs/pull/2495/head -28aca1d82510c2f06532292c987d45dacc932c6b refs/pull/250/head -f35880895087a7a07dd2d610b2bc317f8a5ca149 refs/pull/250/merge -4d0321b910c2ee628a5bc817fc4e36ee313f60d5 refs/pull/2504/head -a5939596a2a734e455250f15d38d091cf50e7f0a refs/pull/2504/merge -9c834a6fdafa7a851c0d65fbe288f803d65d85f0 refs/pull/2506/head -12843bae0a63ade62c7f3607a9d427762805b699 refs/pull/2506/merge -c6aaf4caa0884bed0c533287e5cfc7b1079af814 refs/pull/2514/head -b1b4f672bfdd4ab7eb976a6c1bb3a3f326f0f73f refs/pull/2514/merge -0fe240f0267e5b31f1c5f9e50491318f562328d3 refs/pull/2526/head -5c86514354debed4bebc96c3d1a12247b22e9469 refs/pull/2526/merge -f767047b83f87cc280578530dea6ef304811572f refs/pull/2527/head -5b870f432c1dd7bf6c3dab3ea13014b964fa1395 refs/pull/2527/merge -a667a36d06754970bddfc37a69119023680fd2be refs/pull/2528/head -dd4c0821742f549ba6423e8a736b6db5b42f4b68 refs/pull/2528/merge -aa2fea73eded0004e14d863c84503367e6004fdd refs/pull/2529/head -bc4ee07b6c5d7d3e3b0210a4a2b910a94333bb12 refs/pull/2529/merge -4e6f537023a1cca1a2bb093fef05e295387f8879 refs/pull/253/head -5eb1e21f49126014dcb1ff99d2b7e2e13eeaa3d5 refs/pull/253/merge -02724847b86c3fb22dfdd4c02dfb868538b91eac refs/pull/2530/head -7740a4f3d3a1c4ba8ab81e082aa8454dd7037805 refs/pull/2530/merge -dd35d25b3ea6bf005f9ad7f4da12bb376705cfc0 refs/pull/2531/head -c730b13d373991f911cefbc6f7fa4aa7b0c91063 refs/pull/2531/merge -151de08692ad86b99d30b0f3741f3774244a780c refs/pull/2532/head -44a4be1b7c9d61752ff9502e8b0421efcad47ece refs/pull/2532/merge -c092570fdc8ff2ad8ad9063c7f54f6a18b14034d refs/pull/2533/head -a713b8d804bdd7231b9e8256adf435eaf4789b49 refs/pull/2533/merge -29b038ae08ebdf45264d6f54695a8c80b520b99b refs/pull/2534/head -abf16140d6bb42812afca968f6302924f8043790 refs/pull/2534/merge -c9ba539be7cb3b934200274ab27a2a3e2bd94576 refs/pull/2535/head -130032453ee74ef7bdc7c6435b610fe0f0868199 refs/pull/2535/merge -0891cd072821f9a8f1f0e4c49b750eb4fbfa6ca9 refs/pull/2536/head -fadec144d179d368d9a92f224ae866a0d32f65b9 refs/pull/2536/merge -3bea1452daf29c34d6bdc16074a930c2e6adcbfc refs/pull/2537/head -5657cf972b8e77543db17f965846c3ad4bfe0edc refs/pull/2537/merge -95912497cbfd5dab8fde8371d77e717afb1efc99 refs/pull/2538/head -55a5180e6196fe7e1868cb432d761629d25f72cd refs/pull/2538/merge -967c69e098b7f1ff523e80a49d69808c6b792af5 refs/pull/2539/head -28c1ac1563c6452f69f808787670fb92763bacfd refs/pull/2539/merge -4e6f537023a1cca1a2bb093fef05e295387f8879 refs/pull/254/head -2f893b806ad31d54c8afa486a56eb9fae3c289d3 refs/pull/254/merge -7bd83f6b0cf3af64ee2807052927fdb044e313c2 refs/pull/2540/head -78323101b06bfdf00eaceb68d15b49d4a202fc37 refs/pull/2540/merge -0732d10f868ffe141cd84927f4a11f38339ce883 refs/pull/2541/head -2fa16a2eb30d3e84a986322cd710d5ae58b59fdc refs/pull/2541/merge -23916481218eba0132085071c2bf06811a91e08e refs/pull/2542/head -9c52ff54ae244413ad4911c0c7ef46ea27805fa9 refs/pull/2542/merge -e0855e29510f6a24f533fcc0617a76483777ae0f refs/pull/2546/head -ef86fe2fcf2944d6118b19255a5cae3b29c1f95d refs/pull/2546/merge -b288e3fff3bca932075771337fd6125d36feeaa0 refs/pull/255/head -2676be10985f7d63c85428945602e5f8473a44ab refs/pull/255/merge -17939892a127d000076be89a6e0e5baf03f3f704 refs/pull/2552/head -66976c1c36b19ba66bc964ff0c8388519240f7fc refs/pull/2552/merge -2639264ff6c159ac0ffe1084e31df8f970754d09 refs/pull/2554/head -923bcc5448150875d3dfcb3a270a19069f1d3cc9 refs/pull/2554/merge -bf37429093dc411b6bd92f02c53150821e6b372f refs/pull/258/head -91dd3bc7d745aa91e1db017e282b9849f81343b0 refs/pull/258/merge -6af4a07253e71e156ae8cab16fd01d798074ef24 refs/pull/2583/head -62a8a80573c137646c42db93f66261bb077794cb refs/pull/2583/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/259/head -05d2e5e156c4c8fd048a7246d409ee6bcb8d1eb4 refs/pull/259/merge -ec9144901ba86fe5fdb3bbefdf0501e2b3b3b0e5 refs/pull/261/head -8275e0a3b0d3b7f20603fff889a56442c94f44e3 refs/pull/261/merge -2bdd4a0aac1c00e17a4687dcf9a52ae8853d8e5d refs/pull/2613/head -ad17e52475aa6ce5a2d33689ed3768f967689f12 refs/pull/2613/merge -e69e9d094d3667f2a69302db72ed38d40793a364 refs/pull/2618/head -9180225859befc9d91ef78940505e98817da9b5a refs/pull/2618/merge -f384dc8955d4859edd1e28c97bdd413489d9c54f refs/pull/263/head -11a153ac6ff59b7bb4f81a4c162d4ad6a04a905b refs/pull/263/merge -28bcbd9e27a61c1e9bb382070d9f117e0b1ed21d refs/pull/2635/head -69a0a0033c76f2b001a341e03fe0eab5f8520e7f refs/pull/2637/head -eca6ec964b65d743ae35934f26cc9a9a8268f388 refs/pull/2642/head -156b943c8b1411e93d8e3f0066d3fc20decabb11 refs/pull/2642/merge -a98f693780a26b7c74c563c4a38a760763102937 refs/pull/2643/head -a6e4bcddd54417263ec407c55835f97d8f5a5ba2 refs/pull/2643/merge -65dc31312f72c0acfc2bbd37fd412be95ab5d5b8 refs/pull/2644/head -3a767173fc3771b3bbd661f71df5ace88c7702b1 refs/pull/2644/merge -81ab57fd16a8e850fd2855c945b7555a6a305adb refs/pull/2645/head -287a0f3038cf087510ca545dcbb4d3ebcfb855aa refs/pull/2645/merge -3acdf670ec1b043c7f9e443ed744fb310ed19739 refs/pull/2646/head -9988601f8acda972d3f02b52ade9441bdfbf68dc refs/pull/2646/merge -67db2b7cf04a4ccdd00340ab67c67f2ad5449c60 refs/pull/2647/head -90abf3c9e946867f26828e09eb05cff3afa98263 refs/pull/2647/merge -41f36ad92af5c0bd4f70b73cc73834cc16fc65fd refs/pull/2648/head -c7635923b358af1eab65ec8477edc4141ce339cc refs/pull/2648/merge -a1e805fa32e80c65b740130ed052ec5bc86bf6c8 refs/pull/2649/head -111a0ce76de8e9fe8856529a1fa47e0317cad6bc refs/pull/2649/merge -ce33638cbd009161b6f6fda04e14828259944128 refs/pull/265/head -f79240476a349e1f4e93839c1f0b43cc3cdac39c refs/pull/265/merge -2b202fff102bc8c6b93475df2265d9654b71cc8e refs/pull/2650/head -31aa1bc304bcb6a0307ab6728b404cc07973938f refs/pull/2650/merge -44b8b187ff71eea06f191ed38488efe5a149773b refs/pull/2651/head -b14c4525ae786beb82865b5df8e7c31b959069cb refs/pull/2651/merge -73b9feb48dad719f7b2b52ebedabbbf85547c510 refs/pull/2652/head -5690cba5117c8f8c687ec640c467f3c36fab2561 refs/pull/2652/merge -005550cff6d5572d7e4b93540e324fcdb98d10ab refs/pull/2653/head -8099ad14a31e45f1dfa21f7fc2a2e8124e01c0d2 refs/pull/2653/merge -39c0d87ce783f6b1bbfe9161e8a5adb66f4c85d5 refs/pull/266/head -9d720ec972954c7156f256dbcb9768c0d4265192 refs/pull/266/merge -eaebd6c6f7779d4ca124322e4a7ace8583626b38 refs/pull/2661/head -c7ba9a8e6f7c07d0131d8d921bf9deae46359f5a refs/pull/2662/head -c7ba9a8e6f7c07d0131d8d921bf9deae46359f5a refs/pull/2663/head -54fb46bcd99bf4278f5e77ad6c176b86a96a977a refs/pull/2664/head -c7ba9a8e6f7c07d0131d8d921bf9deae46359f5a refs/pull/2665/head -9a7ced822d87443dc27cdedcfee55b396531377e refs/pull/267/head -9ae80932eae6d196f27ccb232141ad515867fba1 refs/pull/267/merge -2193978a80661a564605b353f65a96b21fe5d82d refs/pull/2679/head -21acbc202990805d1073068457761ccbc54baa1c refs/pull/2679/merge -6669afd753fc549bd42f4a5b35bcd7aceaf7d1f7 refs/pull/268/head -79017fee179f963c4f6b4d616ee0f27671c60c7b refs/pull/268/merge -f01b5dd76e64b21052096f9aff08a378adea7b45 refs/pull/2685/head -7297013888d2360cbfea63987e9abdce3582b329 refs/pull/2685/merge -199184b73ad7a0c0e10cdf0257147dc9a5e57aa0 refs/pull/2686/head -42070696bbb59ddc6376fc8403ba12e53c46e165 refs/pull/2686/merge -a1b1eb871fcdf376867b612973d4ce068e3230c4 refs/pull/2696/head -6c27a7a98aff6b921bf1d07620cecd02a95317ca refs/pull/2696/merge -7f9d1b3d0cf5df48d3af191f3b8477a036ff4998 refs/pull/2706/head -89ab8b99cb7cfeffc6fae12ba97f45e6c064bb7b refs/pull/2706/merge -c68247b0b71ea122c45247dc27e64cf175e24ae6 refs/pull/2707/head -19924671e30f90f1b89f206509672eae16d8dbbb refs/pull/2707/merge -2b210a9129084502e224f46810a8ff1612fe3b4e refs/pull/2708/head -a030254d779915b588dcf75f93606a4bf02414a3 refs/pull/2708/merge -a04ce416878387408217f08e4b7f1ec3ce1d374a refs/pull/2709/head -3af2fbf117dc314f525580da5b9f523ab78ac896 refs/pull/2709/merge -4c12f7bdad35a69e3bafec184315119d63deae7b refs/pull/2711/head -1fb9fb617b959bf8bb1249f7d025852860e8316d refs/pull/2711/merge -e0c150863138f63fef7ea427727acaeb2ad9b9f8 refs/pull/2719/head -aeea3f3ab5014d905e81c3cc177a70b417397d6e refs/pull/2719/merge -375e4c27968340c1dd8b1e7f1dc4060537fd2c18 refs/pull/272/head -28f1f3b679164080ff1d0909e7843d78054f8949 refs/pull/272/merge -ad9523db0a6eb69f39fb10d4f966b5c595fbe5d0 refs/pull/2729/head -39d25606fa7e874bd43aa655214d8cd715d73fb0 refs/pull/2729/merge -68cf89f71bb794224d48c86b8e5647e0b2ab30d8 refs/pull/273/head -c4dff23522810dae85e52687fecd19e56134cec8 refs/pull/273/merge -8069126a2f0a2774a111e9f7e81b34aaa080ba53 refs/pull/2730/head -31ce80bead78df459decadc878ee9fc490695ab9 refs/pull/2730/merge -5ce2d23337cb2585cab79862a0452579b35f6d90 refs/pull/2731/head -f4b2b667102cc440c40cc2bd6fe79a38de5258c5 refs/pull/2731/merge -eef7e3fde6fda22ddcf3b5b660b0537765cca0a2 refs/pull/2734/head -3729853dd76d9cb112751820c38bda22965f0cca refs/pull/2734/merge -53bb94cb93891e3cec2a0bdc4ad9e068c326f4f0 refs/pull/274/head -9b1f2bd98426577935121e9ea7d6274ae5603332 refs/pull/274/merge -7801902b54340be1abe919fd8ec75057264973f3 refs/pull/2749/head -48cb1cf0e1be88aa9333dc21367bce3b8f0ede25 refs/pull/275/head -30cb6ba492394569b5f6b6984f5198b260079101 refs/pull/275/merge -d1c7ae82fd51896a60f8a11ebef128ac3e2aa266 refs/pull/2751/head -c2612e58dc614b5e728db55395f188a11d74bd7f refs/pull/2752/head -f355d262520b0266a8a5155848592c73017f6df1 refs/pull/276/head -06abe3f21487f1f86da320773a65852f1782acea refs/pull/276/merge -0c288381faf2f51293b82ac3ee307516f6aaa21c refs/pull/277/head -63c90a49915daf989fa6fa4d6cfe58dfaf720530 refs/pull/277/merge -7118e17ee5555f9bc8cd29e834eb80e73390cc6e refs/pull/278/head -0e4437ea08f6d61b06bed29243da62b572f4b1ef refs/pull/278/merge -ef6c5543d97bffe759e60884d114bf402dc24912 refs/pull/279/head -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/2793/head -9ed0edbe8da626af69851b6d6ff6b1cfd161017d refs/pull/280/head -f1627ddb05b5a1797a82acf5c28a6fa5bd93824d refs/pull/280/merge -265f10128bc9d0f37d3c4804fa6b598224cc992a refs/pull/2812/head -cd132dba960c11c7369815d0d4b8ee6b36740969 refs/pull/2812/merge -e37775d0947026ef2ef8eca3d878ccd4fd652043 refs/pull/2813/head -4a61064b315c562f537982972c5ef579f23a0488 refs/pull/2813/merge -a0e65b9dbda608c69ad7911cee0e2140a1436f1b refs/pull/2816/head -5beaaec3f3a23ad237caaded658f47a3218c8818 refs/pull/2816/merge -142ea70cb529073d72d15ab8be560c7f5a5583f9 refs/pull/2817/head -26061e8a07749287fd5d87e597f2fdeb0ebe105a refs/pull/2817/merge -aee6632b973e15b43b243e82aa498010b30324fb refs/pull/2818/head -db46a3dc201d26fb09e69e7a82797b7d7c2a1db7 refs/pull/2818/merge -22627ac349539d43d2c7115aa9f9c40d9f04ebd9 refs/pull/2819/head -9ecb19fb4735f3be71649713e46ed54d264f2f9d refs/pull/2819/merge -ba58ba0c8281f686da2232b3f461e8342761e436 refs/pull/2820/head -ad3a931c478267c25288e7e252454e8d7212ef8f refs/pull/2820/merge -3118ca204d4687afc8d4efbb9a71372d02ff4960 refs/pull/2821/head -3b1ea0a9f8f0ab939870320b5674102fbd29eced refs/pull/2821/merge -c16dbcda7a1966c0a912c7752f242a305adbe16e refs/pull/2822/head -abc233ef894fdda73dfd4e6c50423f12b8378d20 refs/pull/2822/merge -8f533e97390b57cb1d8a8c0aaa837a0d40d3ca54 refs/pull/2823/head -3caff2b34b70c5ce57966bf50ea8826cd9ab5abe refs/pull/2823/merge -1e933dfaebc5cae1df219b6355e38ebff294480d refs/pull/2824/head -98e0347a567d069eb9f75071dc7dea01473a6787 refs/pull/2824/merge -a6a9015d0128554083077f8fcd33afe2444a3715 refs/pull/2825/head -b4181ee5f5a0fc15d16872472396f350217743c4 refs/pull/2825/merge -3c13e73ec4779f3c01aa54ebfc5236ad1c1e6aa1 refs/pull/2826/head -d20e87b07dd9bf3c258c6da92d38bd97d1dea64a refs/pull/2826/merge -ce1c961addcb499f6457f6cde3677e7be9aa0699 refs/pull/2827/head -653b34e5e5f20e23c416ab11ae8a5241eb888ff0 refs/pull/2827/merge -d792f8bfe3008001955efa23faf589c06145e800 refs/pull/2828/head -6676b8dc6dce3575119fa135ea7987b0120436bd refs/pull/2828/merge -4ce891634f7146a24d440cc52aec7c7fce354f0f refs/pull/2829/head -043691f6ed972516e5e9e07b0e30e27fa6f82cbe refs/pull/2829/merge -8151c281adeb732d1cd6cb9decd78d050a6bd450 refs/pull/2830/head -13a3dd34c2318b063a4998f829fddb2eaa2a4370 refs/pull/2830/merge -356dd281e1177e9ba442469049f08121629c6868 refs/pull/2832/head -28306fc3a4f3b167a62c5ea73a73dea7205906b0 refs/pull/2832/merge -3d32383fc411f7e95619de2fae46242fa1c3217c refs/pull/2833/head -4cb4fe3e55a33a83b93d4877e8021e2a60996e37 refs/pull/2833/merge -b9029022325bdfe6962d276d86a0dfd098f1a115 refs/pull/2834/head -89eaa2f92eb68dea5609ae6fbf839bf6f0e19673 refs/pull/2834/merge -31ea5759b3109f338e779fe2b1145eb808951387 refs/pull/2840/head -a98b3ac37fc1ac285e9ad38218a0dda0f9ff64e2 refs/pull/2840/merge -04665f69dd4c5908d01d1bb398a22e499584af44 refs/pull/2844/head -b69e5bafe4e0c5330322db7bd9c9928757ea3dfc refs/pull/2844/merge -b423ee9dbb885bb68aa43a1ab5a092417c21e311 refs/pull/2846/head -172ae91dcd8916a09673c845230806d5819d31de refs/pull/2846/merge -99d7ec0e8b391922f39d55cbfc5cc8214cbe6121 refs/pull/2854/head -d3e3f3835db023666671aef80d404bf2ac402776 refs/pull/2854/merge -988970df47203cc03fd2e85b724974af81002dfb refs/pull/2868/head -75aadb5018092c0068622f0b42f8a73607c68c84 refs/pull/2868/merge -efef17e4c9361675f11fc8ddf7c7862284bebc1e refs/pull/2877/head -edb485c2bc84981bea2dd7c6bfe1b5c5f425b615 refs/pull/2877/merge -8db93b65a9ff0bac63348b60b1dfc9ca9abf654d refs/pull/2879/head -d4d581a330a34570cd7cc093e546e535c8d67c2b refs/pull/2879/merge -2fc96368b542ae9ef5839c923da378aa9e0b94b4 refs/pull/2880/head -6c13f3ff8e31f99fae59b0f3cd99c762b6944a5e refs/pull/2881/head -e78eec24518389307209fd01a5edd5daa23813b4 refs/pull/2881/merge -a1be6956f34c4e32bb0bd3d6a6b944ed4d224e7d refs/pull/2882/head -201ac36a45f9467dd7f6a927504232e047a0e8f1 refs/pull/2887/head -fbf3a30bbdbb782a7a02fd8f80ba50675eb62043 refs/pull/2887/merge -7f6f9f742d53bc2ff43a17e549d2116b84f1c7bc refs/pull/2888/head -d51ff96b4cd8a816b582bae0b753269b996bf13e refs/pull/2888/merge -5ab54854f1ca628036143cb80e38bf00201f41d4 refs/pull/2889/head -a0dfa70e66f6ebaba4259d1a006b05f35acedabf refs/pull/2889/merge -873111e528c177e69b56ec7d8557ecf3986fa400 refs/pull/2890/head -168fc4f7c5099e329d08bb3eb3f20c22b7975bd1 refs/pull/2890/merge -002a53187328f1f2391cfafa56964b61bec209bf refs/pull/2892/head -6f78cb19b059078b2c735bcbbe531585bfa55ba7 refs/pull/2892/merge -2cf17af33159233638f4e1e33aa4884fd16a8c55 refs/pull/2893/head -f983a53ba1937f2465879503d408c896d99a6f02 refs/pull/2893/merge -63c3673ff1689f50a667772103d2f30ee6259a54 refs/pull/2896/head -b3e74b5f888be80e6b7d5057edb2248bb8f56ee4 refs/pull/2897/head -8a14866804e0de0fb3da3611ce62593804dfb1ba refs/pull/2897/merge -20503999ee95be17a1d082cdd5c99cad78ea5ef5 refs/pull/2898/head -f102b5ec212f500c9caa5b6fed95b5b30754d6a0 refs/pull/2898/merge -915044557b1f2838dc5a21d6583eef029134de3e refs/pull/2899/head -065649f5e3c20eb7a3fb50dc49fe4d47898a679c refs/pull/2899/merge -3f894a2035c6498a06ce4fff5c0e0112d331d1d7 refs/pull/2900/head -d32d029df3bcb8537558a2ecb1832c4beaf29414 refs/pull/2900/merge -c5b462b1b39ec96fda92dea6adc1c2653c5a5141 refs/pull/2901/head -946d4f6a2bce6e350804f8d2975492a877760498 refs/pull/2902/head -3c702a0d58deeb9d1979e3feab124d7736fce893 refs/pull/2902/merge -e01c76f8d6946aa90f425ad7df5d33537190f38a refs/pull/2903/head -4cb9fa2a3c23aef36ce057e0106e2e5a23273f12 refs/pull/2903/merge -ea1d06ecac15eb1a6d3f5e44d9ee5b60c20e3b75 refs/pull/2904/head -5d3c1d3eb1745be40e191e59de8ed2f9ae8c17ce refs/pull/2904/merge -2ac1e43e3104944f2a3f2af11fa54de4e4bc7b9e refs/pull/2905/head -eec7d94d3e940c79b6136698d091515df24704a4 refs/pull/2906/head -78252ddac4ffdfc85d05a6f701d3c084876d4e5e refs/pull/2906/merge -d1b833117c76c4071610c9692abe1f8c358e7384 refs/pull/2907/head -db2f2231ade25cb06cb243e319b916c7b686ed4b refs/pull/2907/merge -f758c834658fce1e43451fce7899683bb8f81400 refs/pull/2908/head -a2e8fcac93fb42b8a0c98838a8c7c0dc4aaae11c refs/pull/2908/merge -c9c7a546cb9846e3b37baafc5aac81686ac37c14 refs/pull/2909/head -82022baeec4e49d870495cf4d08d29ab286a3557 refs/pull/2909/merge -6339b615648cd34279f6ea049ec93b2e1cb90c90 refs/pull/2910/head -cf0dd705e695b3abc69c353817a59a9e5d663207 refs/pull/2910/merge -70ff80de56ecf81025de98911dbb0cf4e889c6c3 refs/pull/2911/head -779bc381a138eea79b81b5cd09520bd252356b75 refs/pull/2911/merge -6fe6d6338e6dd252b27e17cd0fe45d0a7bbef6a8 refs/pull/2912/head -28859ba4a49d19bb02397073bc3dccc24dbb3091 refs/pull/2912/merge -e2fc5e7789d9051f0ea51d06ea6b5351eaa328a5 refs/pull/2913/head -c3a907b5c15fb4e6c2653269159b5bba53d2288a refs/pull/2913/merge -8b3c899a174fc4f12333733a68406d7e6005c32b refs/pull/2914/head -788b635732896316d11b4b6742ea646554b97b71 refs/pull/2914/merge -39de9a6bf9df073ba698beffcaaf6c18e7a89ba1 refs/pull/2915/head -8dd6a1f5e7de57de6ff2b01c1a0011b612d226eb refs/pull/2915/merge -aa19beb140f159e479e82880878f0b97333c9a82 refs/pull/2916/head -079a15fdee87b215087ce8285adc542d8be2730e refs/pull/2916/merge -cecba16ced7b5d59379118da12f067dc26391b54 refs/pull/2917/head -f421fd08532978b396c99b2d6dffc5cb22946589 refs/pull/2917/merge -505b7b6cb9a9cfc1285380c326c81785b05327bb refs/pull/2918/head -27ccc8b8a79c1e5de17348565a74f6c35a6704e5 refs/pull/2918/merge -b0ad90762d6ffa78a5a69024a26bd58f4a03593b refs/pull/2919/head -717fb591e415a3e62fd4583b4adfaa32a2295cab refs/pull/2919/merge -771b7b25228ffc24f16db081a1f2f1060eead1b8 refs/pull/2920/head -637bcb79b66321363e2055667978f66fc973335c refs/pull/2920/merge -8d266a52d25b6489234ffc295fd6827fbad1a48e refs/pull/2921/head -b6dc849909f2629c86c8f30a81393f866fa25600 refs/pull/2921/merge -2ca8ce7a6961c976ee5404fc28a32d3c33735b17 refs/pull/2922/head -423b84a290ddaf73339a0b8a80b8575833fc5060 refs/pull/2922/merge -88f6130b1ec6eb353512df300e287c0739ba01f9 refs/pull/2923/head -b2edb44fc4d08b068c963fbc51751f3342fb7524 refs/pull/2923/merge -bee0aa72a0a4086a46d58c88a0b30e11e11910af refs/pull/2924/head -a24046673f41e290d1e98673dc835130c6c591e2 refs/pull/2924/merge -5c8e9907210baca0124e7432bde22125ecc2f2b0 refs/pull/2925/head -56170c7086725175bd27a4a08eb50066ae37166a refs/pull/2925/merge -360887ac1d4242fafc5723c175d9b62d360acebc refs/pull/2926/head -b7ceb46bd7f6eb9a63ad64a050c2562df6ae59d6 refs/pull/2926/merge -7413698a3f5ca71f04982b20f3e536d9adc4faa5 refs/pull/2927/head -0504cb0744685bc41cc6c9098cb852c0d47a0018 refs/pull/2927/merge -8ad1c1a3aa7bf1f6cc77b0774bea0105ddd10adb refs/pull/2928/head -d0c64e7d90b40a9e699e0565a8615b32b306fdf2 refs/pull/2928/merge -4de9d1f010405911fe62e825d3b31805cb1a4d2d refs/pull/2929/head -3260c6c34ad01436f9b6003bd77d71c853270378 refs/pull/2929/merge -d44d42588f33887c7eb8f4e9c1aa6643ce760180 refs/pull/2930/head -853755d2e18ab4f2bc267cab2a4cbfa6b464a162 refs/pull/2930/merge -d15b21174d81ea32fb089641152b0a06c51241b7 refs/pull/2931/head -3faac96cad723481dd77fe20f1ce0a4e7e3965f8 refs/pull/2931/merge -c029cd25623768c73422634f479f40a749cc443c refs/pull/2932/head -10d0aa46bc5f9fc5255377db8992528666e0906c refs/pull/2932/merge -10b52cbd9f25c25743885956ae6a07f9d640b9a4 refs/pull/2933/head -629fc088211bdfe94178c464e37300c6728b840e refs/pull/2933/merge -fd1f3ad0fd473cf9d2d5e6ca060776f827f19b67 refs/pull/2934/head -cdec4efbf471861fc9be50c2864f8dbc71c8297e refs/pull/2934/merge -3f8d2164ce73478fd896525718c252705226e595 refs/pull/2935/head -092b946ca8228a0a309116b2781aea03d011393a refs/pull/2935/merge -0993ef47e018ec49498196cc1c2d564c12def404 refs/pull/2936/head -a42d7dd6650d8f36e7cba6654809a57739ac4b36 refs/pull/2936/merge -7818e5a7d2d81507b5af9a34164e9b31b4fc39c3 refs/pull/2937/head -43e1dc2f813a93f18f871188d186ad287499c50d refs/pull/2937/merge -8e09df28823e77a24668135332cc6f8d0a40bc09 refs/pull/2938/head -a02141c38bb18eab57f6039a585da886e63803c3 refs/pull/2938/merge -bbdf537ede5c953939e83e191f2423526a63245a refs/pull/2939/head -754b734d6763535241fcc5387bfd95dadbacb66a refs/pull/2939/merge -63121c70beea6552478123d321542aebaba60358 refs/pull/2940/head -bdae4f5257a8b1cba872785a98361385ec77bbb3 refs/pull/2940/merge -187d80697fab12d56ddf96397f45fef57a583efa refs/pull/2941/head -ecf197574fff181455036b7ad110cdab03a7b8bc refs/pull/2941/merge -2bf003002862e54797f53e0e60b6c9d1c647bada refs/pull/2942/head -6a04bb887bfffc2cf19d75869b952554138b56f6 refs/pull/2942/merge -fa1c7193eaead333c7234d7977ca5d9a25c3899d refs/pull/2943/head -e20196eed96eae8abde8dbd42cd60c44faa5da20 refs/pull/2943/merge -e19eea60d43d98e7b1f8f83eeda02cf3aeae778b refs/pull/2944/head -511f7dbc8977af7d9a82c6814d2728b7c62b0294 refs/pull/2945/head -83aa69d858b1cc2aea724ebee0e2979d0d261fff refs/pull/2945/merge -2f1ddd6ea11a9d18bcce5a196e06af3a5bf24cd6 refs/pull/2946/head -023870ad856e80c1ba2db6d1cd78eb84094c48aa refs/pull/2946/merge -da3657f5cbd55acc8c55e282b27c3bf21f523c1b refs/pull/2961/head -7029c1ecc8cd5c12e2b0a2a4f6a6d5adf8d04afd refs/pull/2961/merge -f409654eb4fa4f6ab6df0d5092f68b39e9499618 refs/pull/2962/head -51d2434d17e3cdffda5e5b6fb745f26ce3c883c2 refs/pull/2962/merge -549cf06c5dd38315e0a4fefaea82d817d66ed664 refs/pull/2975/head -757d70266394f1700d081bed537c81ac0cf617a3 refs/pull/2978/head -9e65c4ff22959bbeb54ba51a3eca9e5088efd086 refs/pull/2983/head -d86c81b7a29c06a09227dd705326db0b5865470c refs/pull/2983/merge -ee9e85924e93a6cb662b7d51ca5190a047a57283 refs/pull/2984/head -6a0d8f3be41ed883f441ca0336538369f33d0685 refs/pull/2988/head -b15d424b60d12da2cb48ac2fa112ca83798e1b8e refs/pull/2989/head -14f591b77d98ffa3421c49f2b89d97cdb06a6a7f refs/pull/2999/head -07a87e454de0c2a2cd7701ab41e426de730f538f refs/pull/3/head -cbdbbbe1719be0f619fe6f413e09fef2c9219260 refs/pull/3/merge -e2cc7f3f58edeb387a7eb74f983ec733bede6524 refs/pull/3000/head -4bd2bcce5ee3c76de37c34dc9a6903f8844997fb refs/pull/3005/head -c22f37cb35b87cb60b426e8284caefddaaa90fe8 refs/pull/3009/head -f0df777fcbf804aac04b99a861149bb8b43f721c refs/pull/3009/merge -48a32d55435c04d3f37eb7f32e10fc65fc19a893 refs/pull/3010/head -987245cdde6718183f5b7dd21bbfd2622ec098a8 refs/pull/3010/merge -f3c92e570ddf4786f642a3b34c0b7aa0189dd85f refs/pull/3011/head -89728d22e2172c93b8740b6ba3b5c932f20a15f7 refs/pull/3011/merge -d6f711675771a4ff2c15cedb899a6daed7b1b93f refs/pull/3027/head -8116b5c37a70fe20058b8fb5072e155a70eaef93 refs/pull/3027/merge -7de1cf06516fcb596133ff4d989b4aa948a4493e refs/pull/3028/head -4a14b22c6b2ad8429fbcde7342edbb2d835445f0 refs/pull/3028/merge -57ece623e836f2f8332dc282cf03964eaaa292db refs/pull/3029/head -ef924ffb588523364c436b1dea785874c1ba7bb9 refs/pull/3035/head -5a9199130f9040d0a72169a01a964acff3581922 refs/pull/3035/merge -0045dc1c9d5997c7f031662b5ab74761c972042a refs/pull/3038/head -fab50a50b948ff636a15c81465e99a45ad4ab9f2 refs/pull/3039/head -18e0a448665af4405b152b29fe9dff94e5f69685 refs/pull/3039/merge -2dd029367739d575c792df394aa9cef151ff47e2 refs/pull/3041/head -49aea2475baa73bf6df78b339541a5ba6a14c9d4 refs/pull/3041/merge -b5474b20789d5345bd44789c4f05f8801d0309af refs/pull/3044/head -fb29b53a372ac43ec436a56545ea24b8fec27b50 refs/pull/3044/merge -89afe606ed5ebc261cd79e4a6d88eba44f4584f7 refs/pull/3045/head -d738e1ef97b4b27a8838c347967a05116b2d9dfb refs/pull/3045/merge -119ec27511a5063aa7f0cd332d666250d65efbec refs/pull/3046/head -57da692531c4ed35452e205e0c90c43c83b3b11e refs/pull/3046/merge -f9abe51409957565fc40334bcf2d65eb098848b8 refs/pull/3047/head -5e0e102735e49720c649210c612ab41e7873aa33 refs/pull/3047/merge -1889858156ca81bd997081fb6ea7a4d3e3bed496 refs/pull/3048/head -1e2789b742c11cb1ed5d56118683a075031b0e95 refs/pull/3048/merge -103c3364455d900c92fac8f7e38abaaceee41d63 refs/pull/3049/head -7a17b4ed7c92473c12f419b6e615056f02f3abc9 refs/pull/3049/merge -3f6272dd0f62d9269097636ee3ae076e9431e0a6 refs/pull/3050/head -156751252f029b260593968523955230efabc9cd refs/pull/3050/merge -c9c6b189dd8340b0179e05f9cdc4cf2787a8410a refs/pull/3051/head -30511e730ed3cdbb2976ed82a4f9a0177aec1f1d refs/pull/3051/merge -eea0b4255cd8c7a5a5d34f0d1ab3774282ed4bad refs/pull/3052/head -ccbf8c1ed7728cf81c830ecc85bf348851402b2e refs/pull/3052/merge -0e088d69aa693a82682b0fad61fe96903a83cf18 refs/pull/3053/head -c00fdbaf1fc740269dffac2c0bd64c23d81e1de5 refs/pull/3053/merge -d7218526bafc773e498244a9dfd4c4bcd37eb36f refs/pull/3054/head -6730c95bc770d4f98d344559f48ccf988892e3cb refs/pull/3054/merge -691a5174f3e061ec1ec865656a4dca3c0f7608e8 refs/pull/3058/head -6acb38fbcb5541d50aed2345f7ccfeb00da7e504 refs/pull/3063/head -31912903248cfc1f18042756c9a650db869c0565 refs/pull/3063/merge -6a627d12885d535b138aff570a5e57e644239bc4 refs/pull/3064/head -b1acd708e2129a25f3d95ed8d668e462931de557 refs/pull/3064/merge -94b2e244543dd1e8a3c228b7b39b65d3d1823794 refs/pull/3066/head -28d1680260e35c4b7e725f3ede9e3535801ccb83 refs/pull/3069/head -e7001df1c6209a504c2629de27dea497e840628e refs/pull/3079/head -ba985e8431be8a3a8d30b532bf3c5c5f45918329 refs/pull/3079/merge -9dfb8ee24aee9613ed5050825d9d5d240eab9b54 refs/pull/3086/head -e6ad6ed5054499d6943f793055ca6eec876ecf3f refs/pull/3097/head -f132a3d20acd5aea6f78f0f870a684e714983e52 refs/pull/3098/head -803922191897fbfb5fb19da9ec703851e27bcabf refs/pull/3098/merge -c2d1c738638e461ba888a757d58e2910dd4520d4 refs/pull/3099/head -acfcf3adc496514d10e7b629d30efeabe791c6fa refs/pull/3100/head -45fe01318fd01e0ab7acda296ab327891b4f6539 refs/pull/3100/merge -b3301c635d8be55614584c7ce6b7801de0aafe46 refs/pull/3101/head -c4d5d3a4f0f4d013150b56f108c4965030ed5fc9 refs/pull/3101/merge -3da4229d335cb1632ace08c05baa5bf91e54619e refs/pull/3102/head -9f902d3fa68e158f941c76c921a9cb3ea19b888e refs/pull/3102/merge -03286219213e65f0734cd15800be84f0a49a9261 refs/pull/3104/head -b5a2e37ededb851786eb8a667183e619af342327 refs/pull/3104/merge -69cab6d2c4af82f86dc25f50ffc735196b575c23 refs/pull/3105/head -db8af5e940e2d9c89902e08fb15e15413c77c28c refs/pull/3105/merge -f218069e4cb418f4504428b30adbf623be1d955a refs/pull/3108/head -af085482f8ba8ea43493e66c2f0394768a4adb71 refs/pull/3108/merge -5fef3b7b7d9498cdc4f32734430e15a48ff1f18a refs/pull/3109/head -6650c5ae57c5de204323e64a91141cd534dd133f refs/pull/3109/merge -b1ea7ec30389834ed191df579064601834429515 refs/pull/3113/head -f1f36c6d34d29f6122388d42bd17bde5da1eff83 refs/pull/3114/head -501ef9ad66773a8b8f6f3048c77396788311b4f8 refs/pull/3114/merge -1f7641f33d1586a5a6b709b688915abf97a27470 refs/pull/3120/head -3c642837b790f411e42cf5bf6399cd1ae20612c3 refs/pull/3120/merge -c87a1b888b1efd085d27f7897010326a18fa3567 refs/pull/3121/head -71d1d55365e7b1f578885120132c3f865035511e refs/pull/3121/merge -a69c11cd0fe52b41e7de6b48be0dd593e3c7bf5d refs/pull/3122/head -967761d60d4e91b9e4e8f287efe1f73cd189ae8b refs/pull/3122/merge -382d9b855b95bcdd51adeda19bd357faf3c627fe refs/pull/3123/head -d23b4067d77750e7696edb969def591beeb9a89c refs/pull/3124/head -a3392eb9ba269bd8013e9f3269d4a21b42055d1d refs/pull/3124/merge -1dbfbc5dc5677e297f8660bacb17ac227a108a82 refs/pull/3126/head -20ceaf1ec375d570864b5f0c28f1e5e5fb29856a refs/pull/3126/merge -1f9d7edbe964bb35ec7ab4a789d32ac6751e740d refs/pull/3137/head -c0e5779881f8bc2b44f79d77a24c4b61a3110d68 refs/pull/3137/merge -a3a569e344766a3c24606be881098844cca219a0 refs/pull/3138/head -10700f4f07f03261de65f62467fa85a478e90ed5 refs/pull/3138/merge -5f3d0070db6c8ddda5004df0aaad58dd7068900f refs/pull/3142/head -d0548631bca647bd3a28fe739e126975b1e794d5 refs/pull/3142/merge -4d258c8128d126426a8e16f583959801b7248546 refs/pull/3144/head -06ed5df6418f5eae5ba30d51939901c42c5ee527 refs/pull/3144/merge -96936cd6f82cf9cf4d3fec16b9937a85a2a19e7f refs/pull/3145/head -98ef008fbce8b107818a3bec7f7a5b7aa4b9d975 refs/pull/3145/merge -72ba700451d79c528998938a294416c365517664 refs/pull/3147/head -9d09cfd4a6ee6bfdd0f14b4b1407b0853e1f1ce0 refs/pull/3147/merge -7e2eb5a945d9b0adfddce777b76e208e178a4f63 refs/pull/3148/head -c694cf13810a502d342e9bf04bb1cc317856bfcf refs/pull/3148/merge -bd9c63fe7039b4eaacde689a0692d46dc4b57836 refs/pull/3149/head -1ceebbee4af66acf2fa730fff7ce43df2a059281 refs/pull/3149/merge -09c82085b88ee5dd05da450acb75a3c9fe2a9dc5 refs/pull/3157/head -22c73b65d825fd9ea66f00f23b25638dd891d2d0 refs/pull/3157/merge -61f80f4b3c9b16c22c72e8351ba6ec09ada1b941 refs/pull/3160/head -a50fd06612d90a89e602f776c23fa9f84170f0bd refs/pull/3164/head -4a3ae8ac1b5d16a409bf6936fb3d14610045f314 refs/pull/3164/merge -119613ea90defde1c56cc2ff566a627512610214 refs/pull/3165/head -f9c4cdf9f55a772ddc913cc02e30afb57f652c3a refs/pull/3165/merge -aa6d2686f50ea83885231bb3f647e6dc1ea8f0ac refs/pull/3166/head -210f1032834ca25938425e450fb8f4e4265ce875 refs/pull/3166/merge -77402a7de5ce23b550e8dc6ffafad88739db5d9c refs/pull/3167/head -2a802e2c6f92813fb032a3f73cb8f8a86ee24fa0 refs/pull/3167/merge -7cdec738ae6808e3151ff31498bd035dc2fdd533 refs/pull/3170/head -61ef03fc66a64f737371f6df8d78ec7d45787bc8 refs/pull/3170/merge -f37cddc5566d567bc10b0c1461dc76647d0efec7 refs/pull/3171/head -b6c03569653d069b74fd321cae4d2e1393f4f629 refs/pull/3171/merge -760b9a3ef0fe2a49ffb70d8b817a3c5816d03c61 refs/pull/3187/head -05dcc6b36d5a36dc47c618f80d91ad78eaf7e017 refs/pull/3187/merge -b5d38cd44dcaa5ae391abd28fe744c8be723939f refs/pull/3188/head -fdfa45c4f088dc45dafa52c5b4c2bfa66067ca1c refs/pull/3188/merge -b7fef454c89204fcced6273ea8f48d23c7ca07d4 refs/pull/3190/head -bc231f09e6d7a61a02e3e29dd5889808a49ad1e8 refs/pull/3190/merge -1b139ebf496f92147c06a4032ee6ceb79020d8b8 refs/pull/32/head -e9c9da4149c635473c8c8ab2d5de17c55d1f3712 refs/pull/32/merge -0f698a847e5e33806945607c9f720602e108b311 refs/pull/3209/head -2763b1a526a64e2ebe4835cb5d28f2e9476f4449 refs/pull/3209/merge -78669af6af8e45e3a84d198bdbb03de297ad31ca refs/pull/3213/head -85f54dc3817dfede49409c63d78a187cd9cc9340 refs/pull/3213/merge -3dd1c8e238142e7a550745e69b1d57c50ba9ada9 refs/pull/3214/head -28b3f771c339da46b4eea97632df653138fd2d83 refs/pull/3214/merge -e432e222cb3b36a733afd6adc829f7d6b30e296f refs/pull/3221/head -9d6c8ca3cd069f2fcb24388b154641b12910ab08 refs/pull/3222/head -c692638bacd6f94336cd17fa4b1febe74ff8097f refs/pull/3222/merge -72e5e2622150a1acd6216fac1d9897d6ee995a7b refs/pull/3230/head -fcb6232bae9dfd4de46a5d6dacf628629addca7e refs/pull/3230/merge -5668d2cd837f70e37b06ec8de9e35ddc08626dc2 refs/pull/3231/head -c85d5c61e7a73b8c1d4e4f29150fc312917cba5d refs/pull/3246/head -6b22eba467861a077c52c82b9cc7101faa85b6b2 refs/pull/3246/merge -ec403f5f724e20d30f1591e4b830b8d0c84ed1bd refs/pull/3288/head -eecac9922272df2a30e89c5976222550ee55518b refs/pull/3288/merge -ec403f5f724e20d30f1591e4b830b8d0c84ed1bd refs/pull/3289/head -81e84d7d8b21c1dc02be4bda3d0cb3496b4f90ad refs/pull/3289/merge -8fae2a129566984d3a00b237226d5e11e655ede9 refs/pull/329/head -6188cb6114565f8f86e71f217487e0f199116619 refs/pull/329/merge -dfe6036411df2275484ff0f402b4cbfa4d8689b6 refs/pull/3290/head -bcb51855f349c0ba0cf9dae08b2bbb42254f8140 refs/pull/3290/merge -050245061c13d4329f1ec94eccd141b3a2ad5d27 refs/pull/33/head -45c5fba05260b5efbd60c70863a2cf2018fa6ed9 refs/pull/33/merge -3592936c82312524d2a75931a37e5de94ff30896 refs/pull/330/head -b2176b228a5a1e63273edfc0d14acad42181d90c refs/pull/330/merge -45fd9dd55a4f0a752139e1317884c2ce57e8faf9 refs/pull/3302/head -307c3acf0c2e592cfe8a6057bd4dea72913ece8c refs/pull/3302/merge -b067c0f6eaed83258088eea91bed13afce81966a refs/pull/331/head -d8afa901de136107c50ea7a1dee23356f501c0a1 refs/pull/331/merge -6b96748c605e1e3175bcf92824e6f4e365169390 refs/pull/3323/head -43c56bdf96e4a1ef4dd5cc2c76028ed151f0c1e5 refs/pull/3323/merge -863e4b26afbfd52a0ef5c5b9e67b3aa77459ebb5 refs/pull/3324/head -7efcb5142f4b589e5b6a83c872fa5b08e867975b refs/pull/3324/merge -2b15708b31d37e81eea12137820e6d94308c562f refs/pull/334/head -f47e758320b3bf32c74d39eb96c768e486d0f5f4 refs/pull/334/merge -1cb498fd43ca2401edccdc3aaa13f37b155b6f53 refs/pull/335/head -59899911c0dec57caf7ec4b3f96a66c2889b96d3 refs/pull/335/merge -3d0267250e9b083b6587714c3305072d81e72aeb refs/pull/3353/head -9a721676ead3bbab02664360bea76f4dd823aea3 refs/pull/3353/merge -af4a2408f8833714e40a769e24372184c2fd4ae2 refs/pull/3355/head -70652612b151bf2e01288988fe3611784d49f3bf refs/pull/3355/merge -9098382e17699bcc38538f2690e3ed815a1c9eeb refs/pull/3359/head -0716d6fd9d5f86720714d5ce00c930a7200f6847 refs/pull/3360/head -19b141f41a17e9fa204e7a0aa0259c06724cb930 refs/pull/3361/head -a1d79def7dd277e7d8ee6efc9d9ec4674afd387f refs/pull/3361/merge -6dbb6bcc3a49466e98dbef1272319eb4a896962f refs/pull/3362/head -faea0efe8942e86d8c4e7526eda9ff89fed47284 refs/pull/3362/merge -3404fbdec3d1bcea6ba7401cbb0740136194d6b3 refs/pull/3363/head -6fd7d062b54d086cab228b3990f58cf30ffd958b refs/pull/3363/merge -69349e77e48a722a946417210610c85af95290f1 refs/pull/3364/head -fe2578adfdc93d260e398ffbc0ec6a000ca29227 refs/pull/3364/merge -1e6a941928299c53f6943c8299b90bbee342ef51 refs/pull/3365/head -63e436d9919d853a340819566c7f9d7f3f91713a refs/pull/3365/merge -4cb59cee2110e1dce628ff4c803074b0803970fe refs/pull/3366/head -98b7230ad260eb30d7c8585b865279b3070fc37a refs/pull/3366/merge -53994e248028c0b0b12a392d62f4fb7c4bb9a164 refs/pull/3368/head -0ca844db3046a40738491a3e733626e9582c24a7 refs/pull/3368/merge -0fdc3b447a0e2c59116f93d0c1d530f92af17cba refs/pull/337/head -ceed8d41ee031ae55c34d3bab9721fd94445c5e4 refs/pull/337/merge -5cea753af51791d590c030a08353df50e7abd7dc refs/pull/3373/head -cfa681ce6b5af15fd486bc3a3348d7f92223e8f4 refs/pull/3373/merge -2d6b781853ddc0f8e3c3ae74f6f385b746739e1a refs/pull/3375/head -6d7aa4191a447617c380618d7c40c66692f48b53 refs/pull/3377/head -7fd1a60b01f91b314f59955a4e4d4e80d8edf11d refs/pull/3378/head -1e32d3546d55a89f48c9ec7709db1aaf73c03c6f refs/pull/338/head -a3e17ff70829660cce66990107fc8b9eb52e464c refs/pull/338/merge -a5659080016c76218de7faca5f766d575a3bd9ca refs/pull/3381/head -be773487eac975d6ec08afd039be0c992ab5c87e refs/pull/3381/merge -d9178ff938c45bac142ade2f813e9afa68d1d4c9 refs/pull/3382/head -7e30cb97079d77e5ec4103f96a634cf5c49cb1ad refs/pull/3382/merge -2805a81c3a1e846a543188003e4f871785c86b00 refs/pull/3383/head -13561af419146ad27bb3f87eb38acf836f0ee3c4 refs/pull/3383/merge -27569ada06d4a85c6a628980cecf5ed4f609ae55 refs/pull/3384/head -1b52db7de8e03c28d440978765382308e80f2825 refs/pull/3384/merge -a66c44781c9eb12f4cd6c410120d23ce7f3f89f2 refs/pull/3385/head -b3a47bd7e712c6e58cf032bc1925924e054e2589 refs/pull/3385/merge -8ceb0347af9629dec47735b214e9b2c755b1c02d refs/pull/3388/head -2aa1bade15ffe9a2ee6ead05390e39bd29e23fdf refs/pull/3388/merge -4a64e4ee8f26416e001367120588f09bb155bb2c refs/pull/3393/head -a8d9707cddf85b9dda5c0f6195fe5f2c3e25a36a refs/pull/3393/merge -5460fc94f8ec78092225d90bf19bef24c5fe52c5 refs/pull/3394/head -9d3aaa4d6329bb39ea296a7192404c76102072cf refs/pull/3394/merge -466b43dba94438a264452fea015a95c0217fb74f refs/pull/34/head -ae609fced9895f13b6bd78b78e6c25b970df2a0e refs/pull/34/merge -8f9ae3a5a8ffef4aa619e424a527285aadb64e68 refs/pull/3401/head -a648142bf838ea1163132de4d31c284097845921 refs/pull/3401/merge -b56e7cbf1d406bf1c167049963f0701a92f3780f refs/pull/3402/head -651df4494a622c651ee0b777e937644c1c955392 refs/pull/3402/merge -ca11ca95e20e4982eac2ac36055257d0c4605446 refs/pull/3406/head -a84a4bd53299950411c692d9059a0f930b62729f refs/pull/3406/merge -178248854a4fa40df29bb0b678ecd24161413e83 refs/pull/3408/head -4c7b18ee1a138d89266c2ac1e8f584b7fd497fd7 refs/pull/3408/merge -df07155edb098dc29338da2407f850467024a67a refs/pull/341/head -1bfe62d99f89ba1d314ef00759999bd9c920833f refs/pull/341/merge -f4ae678ee7cc519bf742537d709fbdfadde079db refs/pull/3417/head -dd39f77bccefcec6ce360befbbf8d3c198bc0441 refs/pull/3417/merge -c7996417d22caa1c7fecb59c2b79bbc2236ee57d refs/pull/3418/head -3381c218158621c08cefeb620927b645e34b0fa0 refs/pull/3418/merge -f6ab213ffa9828117605acc74d4d9dd96de37361 refs/pull/3429/head -735a01da47bb37fa7e45b69b5ba1abc9b55f28f4 refs/pull/3429/merge -d9b3cb2fc11aa33dd81f0c4f5ecb2254634bc738 refs/pull/3430/head -73631145dec8fe7e8952037c9f566cfc6cbd6d0c refs/pull/3430/merge -ab64d18e570d0ab823db7270027f18c3309450eb refs/pull/3432/head -2635d559ad577d6bf65b6546f941bd7c2ee69fcc refs/pull/3432/merge -310de264d35bd204565c574aaa42b4f41f543dfd refs/pull/3443/head -0412b0b72ebf049ecbadce6c1666a279e20824cf refs/pull/3445/head -b707cf2c88866230d33533b60afea28db0b66875 refs/pull/3445/merge -faf10adf202c4ff62627e47cad032eaf4fb3405e refs/pull/3448/head -b6e08042f8ee209866d555793b174fecf32ce55e refs/pull/3448/merge -4e5353d68c8e145397cf931c7b445093af17c886 refs/pull/3449/head -0232896dbaa45d9023075dec2341f6c1f2f29caa refs/pull/3449/merge -90f73abe0e6af304a888bcd26d8598629164d5e6 refs/pull/3451/head -b1c61a5b7d992995eefb0264af9c0e3e93e775eb refs/pull/3451/merge -0bff2fd5910d7630586bc84107f4510f87320821 refs/pull/3453/head -167798bc59cf390feec89456ded39e25f79b3dd5 refs/pull/3453/merge -b4acc7a0cf2d7b80f59c681500d1164bca40ee07 refs/pull/3454/head -b4acc7a0cf2d7b80f59c681500d1164bca40ee07 refs/pull/3455/head -24f6dc713f37d06f4af4b360519b13b666a75eef refs/pull/3455/merge -bdd5adf39647e39ca16b169e2648e254daf4aa32 refs/pull/3457/head -4b250a198e24633d8b33e16ac0ede9b3259249a3 refs/pull/3457/merge -3830c4ddcde831488cec4ab4ca65aeb8270057a8 refs/pull/3458/head -bfa6e1aee22c1a12058bf1f13bfda236825b5c89 refs/pull/3458/merge -bef5a462415940582169d47aa02aa741984d645b refs/pull/3459/head -3d97bb575f031110a208da6b83d2df3855430be0 refs/pull/3459/merge -4bff7212256bf127c8ca1bfc1bf278643351d6d6 refs/pull/3461/head -71f70239d17aec28d31495f128e16572ed44ec6e refs/pull/3461/merge -13da339e45cc1ee63c18a5148324e2caef7a5041 refs/pull/3491/head -c4e51da5fd36fd9defffa0b3aee90d1da56c4fae refs/pull/3491/merge -16314637425b67afacb59e2a8559591f59ee8ebb refs/pull/3494/head -aa568a3aed9b62cbc97078d56661900e0ba5e733 refs/pull/3498/head -e03d27a0bacf72cf3f4d50c031721c14898a2616 refs/pull/3498/merge -21afe5b72bf6e60afa5d936998beb89c454bd41e refs/pull/3499/head -c4773f1725f4e0e4d3334804eb130a1a0f3b5ef7 refs/pull/35/head -c87996ad5cf705cd374deb18e901105dda084d34 refs/pull/35/merge -2bb2d41448176aa85ed1c9656cf0c8aed50f7275 refs/pull/350/head -6143cd38c8969a5cfea961afeb7dcc2fafc0fa39 refs/pull/3505/head -6512f4907676765bf12dbe6a2fdb1c5fd3a08f06 refs/pull/3505/merge -7b3b37c64a0b542aeaca89d825b111da855fbcb3 refs/pull/3506/head -1e3ac611c6804ddac564f1ee363abf3f4858952f refs/pull/3506/merge -2ffa59aee0d968174c4b278dd4bd5045fe5e3718 refs/pull/3507/head -ed1814a37b57cb76fd035b5529abaa0460be0627 refs/pull/3507/merge -e3dae25fd894a94b58bd9034e2f45ae3b28ecbd3 refs/pull/3508/head -04d07ba446a7f75b9f1a177978c778f5d9d0b0c0 refs/pull/3508/merge -de7ccec8d4f99cc8f13fe5999e1881167cda2aa1 refs/pull/3509/head -b1e57e004855e914a7c985a678637d96a59fcf55 refs/pull/3509/merge -05d1e9a0ef86f12d178417a8163c19156bff52d0 refs/pull/351/head -d158defb5e6939044e60f6a43ffde02502b1193b refs/pull/351/merge -96a572e89cf5cc89bac8e88533aeb504c9840fd5 refs/pull/3510/head -d2677648be6b5e71811dde7c255d8ed6cc382799 refs/pull/3510/merge -7fdb0b2044401e4f5227200fbbf97490038b90e3 refs/pull/3511/head -a402ed84aeffa7c1d9b6793324b0a89679d5297c refs/pull/3511/merge -d2ab5aa839e42fa7967a573b706fa6e0c2d2e172 refs/pull/3512/head -e68f764d9faa3cf10e52aa109a87650538345da4 refs/pull/3512/merge -a4b069a87481fc0ed4768033c72a1a88896a3648 refs/pull/3513/head -f3f7d3f4308134f0b77f50ecef341cf0a531c04b refs/pull/3513/merge -c9fb8faef26e6339c3eb6b6468cc821f13b3603d refs/pull/3514/head -eca59352e141d2aba0e2d04a069197f099573b09 refs/pull/3514/merge -9921554f3b3c749ff3eca38a12e50cc5c672b58d refs/pull/3515/head -651acdd9dbb2b526dc6df121466dae33ab60e95a refs/pull/352/head -fe47773609a5d3c6575f25db4a6fc1063ec54451 refs/pull/352/merge -adea00dac3118028ebf59e397a642eb9f2841dc4 refs/pull/3526/head -039f070fbe7965bb46aeb418fb7e919fa6fa6ccb refs/pull/3527/head -15616cee106db6a52cb7a1d37a25c1572454e18b refs/pull/3527/merge -4eda7d38a617811dc60a8dd3c7f9d2e3952d8b2a refs/pull/353/head -ca07d0a5b3c252476763b1c7829f92fe63d59516 refs/pull/353/merge -4c48267c8ce6c0c5685333df0d742069b050e6de refs/pull/3531/head -f8a771b6f7dccf031e49652c0dabb7190dd6d702 refs/pull/3531/merge -1644196afc9e825ced7c38011affd6784e6bc1bb refs/pull/3533/head -d8e207cb9e8d313e54336f0c02fa6d40db673702 refs/pull/3533/merge -865568d46b0b7aaf7aac1ea2f49993cb3e89b9b4 refs/pull/3534/head -5453c44d311754946efdf2e99dd1d4bd988a92be refs/pull/3534/merge -dd29c4b0dea7c126b61c36b5cc0d41efe05e4843 refs/pull/3535/head -5c75544247a19fccce3ae6b483772f8b482abe64 refs/pull/3535/merge -21e97210cc41768124fec96fa6727b31c2bcfa78 refs/pull/3536/head -5a84c08834df342409655ad6e46825e7b0730fcd refs/pull/3536/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/354/head -74dcd39959229c37d6f4403d2e76c90a454e2dcd refs/pull/354/merge -b7d8a5c1cd68f110c319acd03b268e0805102c19 refs/pull/3541/head -a68127e97b91edc61d668771dd64c27e397dcc7c refs/pull/3541/merge -7aed04326e974787d0024297922d5a17c8090e20 refs/pull/3542/head -37802b027cf117fc8f1872b36cacbe4dfe636113 refs/pull/3542/merge -b5df9a9b0d2f0419442223e34132657f53403e72 refs/pull/3543/head -815427ac08f35d4f6c52d804fa038f0cc35ba8c6 refs/pull/3543/merge -4608f66c3be2a612b62213d3c7a86bef99288dc5 refs/pull/3544/head -8cfbe882bfb0f03f21b7e17d12c3ee4afbfe66d6 refs/pull/3544/merge -0d0162bc05c7a8b77396652b8e73f16aa245ccab refs/pull/3545/head -79a534a2f06db1f856f6e22f3471d04ffce4ec93 refs/pull/3545/merge -794ce694b5106e990bb3c5e4a7a0454fc4d7756b refs/pull/3546/head -4d8f91adc9d9dabf9a01d3be4683eaf279320fd7 refs/pull/3546/merge -8a6babf0592338f0f170520ddeca0a25c6efe20a refs/pull/3547/head -c5067637e5a108dd0b1ea16ed0264588a3392222 refs/pull/3547/merge -6362dd6c063c24e156c2cec743b1004dd8ca00a6 refs/pull/355/head -df11d7ed231645ecf0770a6ab609338d17001b98 refs/pull/355/merge -ec247c7cc60c1bc163fcb4b183886e0014ec0056 refs/pull/3554/head -bef7095aa292ba341f8485fb4ceccb3689f11040 refs/pull/3558/head -03d3d59fb541efb03424f6930c496b0604a75267 refs/pull/3558/merge -f581cacff781b57f85c89ea320ccb031a6102c81 refs/pull/3559/head -26f022abed79506854b1de0929e16d08249efc41 refs/pull/3559/merge -47314fd1b97c96feb14379948452ebe449c6b189 refs/pull/3563/head -86fde1129be35c050857a955430742b8baa3f718 refs/pull/3563/merge -1be27c0c4daa9829624635d7abc027db7c7bab34 refs/pull/3565/head -2e85f8c7f498cd9d4d1f0acb53178af0d04923c4 refs/pull/3565/merge -55e10b1b507c4236373a4f10c25de803ddde148a refs/pull/3566/head -f1f5a4c557a5c91f67eee16d103c406f789afdf0 refs/pull/3566/merge -e59844db3e3aa19811ac2a3654ee8d2b13d9b9a5 refs/pull/3568/head -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/357/head -cbcb78d9e7e3e20f9148f04cce83980a6eec56ad refs/pull/357/merge -96f6efbf7ddbcdba1f12adc0897f254bf0cfcea6 refs/pull/3570/head -142329f870257fce96e7cc4b28f382acc002ed12 refs/pull/3570/merge -9293b94098017a63ca64ed0c224a5d22a17d09ce refs/pull/3571/head -379e5788665a7eafc4b2a8db8bec6672a4ff8e7c refs/pull/3571/merge -52691da47420e71631b6e31f1ac2b0433a57cab4 refs/pull/358/head -55a3a000ac86c620a44c85a693bc2095f15800cc refs/pull/358/merge -8d149e98b81afae1a7d77930915b2ccd90723c4c refs/pull/3580/head -4035c072c38f4fe27945f1997d1631b4f96d0165 refs/pull/3580/merge -c5fb82b06c383933cb0325812feced9f909f616e refs/pull/3581/head -48c53ad87dfb4f47ca705adba396ac38839efcbd refs/pull/3581/merge -ad45db7283e333d278b066fd469ab40e1d2c7e85 refs/pull/3582/head -760971512aa39b82567ecd9e7277bb99ace5de4c refs/pull/3582/merge -6760c7bf442c2ef83d3a9bfb8fa88068a29b971f refs/pull/3584/head -c544921eeb8768038a7d54c411acc4a99cb4da9d refs/pull/3586/head -7af95c30a7b2d0c73bc473d4b9fb452ca2ab1213 refs/pull/3586/merge -2f7aa079fdcf2eb0033e89005d30b748662dc3c5 refs/pull/3587/head -d8cfd0e83ca588a198a6f6efea3ffc0ef961c50a refs/pull/3587/merge -e47d073a77c165a4d156e8d03defd50277fcd0ae refs/pull/3588/head -6305072d91965cf60ae6934571a94d88911decaa refs/pull/3588/merge -be52cec0a517e6a1eb75a753762ef6c68b38cfda refs/pull/3589/head -bfd286dc0f5bc28cb3ad3835d012942db7c8796d refs/pull/3589/merge -9ab69e86498e163380cf0f3942f3b9759bb670d6 refs/pull/359/head -0ca76759b618c007c8e60b3b21afd59d2f67cc37 refs/pull/359/merge -812859f03ac43c2f91e0df22171628533beb2a5e refs/pull/3590/head -0b2f276e198294c1f3546168d4126c132a22f17e refs/pull/3590/merge -0d3598eff7c1da3b6b1d2f43b61af9bbe47bf929 refs/pull/3591/head -a28c356f5a02877606791928953de5e2dea348d7 refs/pull/3591/merge -eec031834aa19a720c99bf05642ba7f7e07de91d refs/pull/3592/head -d86fc851bd48dc9db3e27dc38c24bb4856d776ab refs/pull/3592/merge -47b982b39ef9ad8a3f13268fb3733f1b9e85755d refs/pull/3593/head -4ded565626078e5e5b96ea26face228fb5c4a6d1 refs/pull/3593/merge -59be22813ce0042aea36ddd9570def6a0c7dd68e refs/pull/3594/head -1898424f225aa62811e4b6912d4614b3bf671fed refs/pull/3594/merge -df3a2388741850818f60ed796bed4fadc53daa52 refs/pull/3595/head -89867d958438075cbc450d545bd335f61db81e38 refs/pull/3595/merge -6f31f9e1f577fc2ce4cae3723c9f9c725bbd8dcb refs/pull/3596/head -e7f91bf1a712d47dedefc8e258653699365684cb refs/pull/3596/merge -c5314a62f1961adac1c94189c701f79429e7bf43 refs/pull/3597/head -da7aef4f0e398078a4badf14fe80e52d4e64072f refs/pull/3597/merge -b991c3eea38cba52225572534637f2685e38ac4c refs/pull/3598/head -a09d9fade6f50b6659f9d1fbe66316afe134b8b8 refs/pull/3598/merge -2b6cdfc700eb8090bafbdb398c972af22186e293 refs/pull/36/head -dc0dce15b460eba0666f732b227032af6016d741 refs/pull/36/merge -dfbc888aa383b242e4607e7c7b51deb3bd704785 refs/pull/3603/head -4bf4e9c006083c108fad19742f5cec2be20eb448 refs/pull/3603/merge -004d784171bd1468a53116f4f70402c7db203847 refs/pull/3604/head -beb0a66342295d6d35b7d93f95dd44bdb9d2d30c refs/pull/3605/head -de7451a952d24733d8479687c156a3b8d4a0e3e9 refs/pull/3610/head -8148fe999ce3ba2db6a87006867d338d021fcca1 refs/pull/3612/head -4d7cd2bb63bc4200f3771e0709fb6473e63a4a12 refs/pull/3612/merge -dcbc8c7c8fb7d07ed6ef196c853067f3ce9a2a56 refs/pull/3613/head -abffbb4c4b2206657bf553c88d091d7789ba1a13 refs/pull/3613/merge -5e5e9006984876893305e0730a996f256ed3c4c5 refs/pull/3615/head -621a7a4867d0e1115fdba4c1e743de61ee552c4e refs/pull/3616/head -c6a0553a4ec7c369eea2c7e8840c4818d7c26e3d refs/pull/3616/merge -621a7a4867d0e1115fdba4c1e743de61ee552c4e refs/pull/3618/head -7d5ee1534e9adc2008d97c21bb2c5e89b2cc20e8 refs/pull/3618/merge -4490ae811b401f9c55b95fbbd3ecb41978283579 refs/pull/3619/head -074d0267c7cf84350c892a684244ada37bc73835 refs/pull/3619/merge -072594dba867b13d6c9e07fe35b1bd32e7975a5c refs/pull/362/head -3cd663d4e6b6ebafd1331123bb8f6d884d6479cf refs/pull/362/merge -c58378b9d52f4bf1547b7ea73ff3624bf1ac89ed refs/pull/3622/head -48c742e7d7ec71a66bf188ecd6e1f9d479c73314 refs/pull/3622/merge -1502f28570bc412564036d02c1b997ccee298e1e refs/pull/3624/head -8ea43d822ad7e403650e206fd16a3dc3845d46bd refs/pull/3624/merge -fb8db55107d9091faddc2dcb8e76a787c6e9eb1d refs/pull/3626/head -361489af1b634581769853ee63f907f8ad190847 refs/pull/3626/merge -5021a48bd8d974d00fecc361735739906b8c92c7 refs/pull/3627/head -8b61bb13fb1ab7ad2f37ec373699531bc84d26e7 refs/pull/3627/merge -5901fa976851bdcae80e5341de4d70acbb3fd6c4 refs/pull/3628/head -40b91c99fb9953a06785cac7dc46415dec67df6d refs/pull/3628/merge -ab19a70f2d7b614761a82aaf34e925b5b8190f32 refs/pull/363/head -fd160c23b4f658472469d72412a084dd32330e89 refs/pull/363/merge -fdd923fd77c0476b6717cfe1ddaf909740f12a0e refs/pull/3637/head -b2773912dd8d382e8e5327f417e86a12d302ab8a refs/pull/3637/merge -c796a6d05a178e83a10a94822ec4451de07e3422 refs/pull/3638/head -eade1c1cd992e135c5b4278f9082c852ab34cde9 refs/pull/3638/merge -91ac23590c39cb2014a1e9d8926f3f43512b83f7 refs/pull/3639/head -57ae6ee716bb94d92ad1ccb6245a32b51d431471 refs/pull/3640/head -e3f29db621d6684ae5fc58db13bdb9c7919d82e0 refs/pull/3645/head -e5a6ce1247554818dc2be98afcb57e31b6a9672d refs/pull/3645/merge -33f633f74203c70c645f821132acb489dee0483d refs/pull/3646/head -eaf76f722e08e0e2d38f417ec3b0a3b19550cf3f refs/pull/3647/head -3ab5b449bca1d2d447111b497a152982d55cf896 refs/pull/3651/head -783f3f123f7d1e1f1e39029efd8ed537e58e8d01 refs/pull/3651/merge -b4db2af3444aa6619d07d3d1f31f851d32541ab9 refs/pull/3654/head -a006dc4435e385306d4d7e2ed1b55981a95f8af0 refs/pull/3655/head -906f4ef86e3a6b43101727eafc016d2542d92c21 refs/pull/3655/merge -11cddaadd1d3663b155b00c6e51b8a5bea050bd5 refs/pull/3657/head -4b7199ba48e10a3c8e104be9f5015403976074bc refs/pull/366/head -a510f9757cc9fd3f580c7280beb55b56dad3dc23 refs/pull/366/merge -04025d1fef92a567c1bdb3728986591c92b1897a refs/pull/3664/head -840c3fc58c5f40912c11d0a9eb6e4374810c8897 refs/pull/3664/merge -93a20abbd9aeac4f4a66c0fcb255ef41f40aa74c refs/pull/3667/head -89e474acc14648a964c2fce7ba1567bc9aea4146 refs/pull/3667/merge -cbf8e5db4737d5d4833245db37dd38387e2fef95 refs/pull/3670/head -39d57f920bfe800016bc92b7b95c8ce4770a713a refs/pull/3670/merge -adb0b7983a1a830dbfc5970d49de67d275ac62ab refs/pull/3672/head -d52548d99618b4433efb4c4bd30824479c13cbf2 refs/pull/3672/merge -aba971bc4cbba5a4039832a522b964c8c38f2e34 refs/pull/3676/head -7084a255ba3b53297473b1d65af4d536bd4bbeb9 refs/pull/3676/merge -b5ee8269a551cdd284ee2b41aa77545ada32e293 refs/pull/3684/head -1eb51762e2e6d035f3aace2863207867de37670d refs/pull/3684/merge -e4f2f00dc90c224f91d9051f369e62603f99928b refs/pull/3685/head -a422a5ecb295f5efd4c3c017d3589b2234950675 refs/pull/3692/head -073a9c4fa318f850b282f6132c13764de5d6e9f7 refs/pull/3693/head -2b3e6e2d4c4293c9354741699d04c4a6badd6354 refs/pull/3693/merge -be5723e15ee0f7af1812612a1471acb437500ed0 refs/pull/37/head -b32cbe067ffce655add36a6d4037581ae86605e3 refs/pull/37/merge -f64f68a7f46f1656b13579a84ed66105c4240ddb refs/pull/371/head -08d2ce7cba1a6201df05df62a64d28f5e24a2bff refs/pull/371/merge -c5f1e0e180367991f12e69796ed371e5ab323e02 refs/pull/372/head -6590051ed8a7019f2d78bcb49bc9e8e9ff983083 refs/pull/372/merge -defe129fea1a201cc486c1788bb42eeca5c5d1e0 refs/pull/374/head -f7dde4891e355276b36b8db09316b095f31530f6 refs/pull/375/head -f61addda549d80eb9dbee9df59c3c78cee6e734b refs/pull/376/head -08ec32948486416985b477dd6e67fc336dfee639 refs/pull/377/head -8ccd48cf2f51f6d06bb8417b0a7f34246bc834c8 refs/pull/378/head -6cd464a84691bb91431ec6ca81569e0ace07a4a2 refs/pull/379/head -e70af9be2b9ecc353a713bd3623ca6ec85d13d21 refs/pull/379/merge -43c9c0b513564341018296186dd46aeea7069b5e refs/pull/38/head -fa400c449b19d0d25e4a67fe1fb0fb76ea21815d refs/pull/38/merge -94776ca0e5a8c70834eeb421ab0d2a031fff0340 refs/pull/380/head -dc92e5b054155666b8e7b7cd322a458da7c515e1 refs/pull/380/merge -e36dbd08c667c2caef816634d2b2dc9397f3b9d8 refs/pull/381/head -009ae1e390ab26de961b3e3878a3bbef57a0e023 refs/pull/383/head -bf84f10e5ef40d76febefcf113d42e9b07637bdc refs/pull/383/merge -c3bf305c230919347db0ae9de1bf848cf0d42014 refs/pull/3839/head -5350f988700b5f70f008e130da7040700380b325 refs/pull/3839/merge -4bcce02d6de456697f9632ec3e6b067c99017091 refs/pull/3840/head -c1d5ff631c8abaa1df48dfd814cf2aa2750c4d29 refs/pull/3840/merge -3f12b2c5c85e7dd7d68e01f7298336a1e7a75127 refs/pull/3841/head -817699bd2f4c483aed5a392a20092dfab0048d9e refs/pull/3841/merge -7bb9fc2c2d9f77df312568e280e077374b991186 refs/pull/3843/head -68f84094f0eff786fd4bf102e3aa33080e11c353 refs/pull/3843/merge -fb71b62ef78d573a43a8dc1eacf7fb6f62cae71a refs/pull/3848/head -f99b37ad12fc11412bdb8e2791e278a8c1152df5 refs/pull/385/head -3103076ad5a544c97a5b5346670f3f8e97b3f8fc refs/pull/385/merge -ad3aee271e04d711cbe82fd378eff9d65634aea1 refs/pull/3851/head -e1dbd172d93c1d1c363fb8a967a5338172c92653 refs/pull/3856/head -eaca213a79ffb74e70691d69be38538177886d4a refs/pull/3856/merge -b00ee916a5778de27879d39e72c3540c75197500 refs/pull/3857/head -8ec401321c1dfb640b1891e2ac1e0d8c6683af6e refs/pull/3857/merge -d90df32f6a61895634a1df5f4b54210abc18da2c refs/pull/3871/head -3c71229d3249069142bcd11f17a75b8027b35ec4 refs/pull/3871/merge -7c229775ee58a605bdb5260c7b5d8346a8551b97 refs/pull/3872/head -5db730df061bee2d8978e676510e6eb4aff70f65 refs/pull/3872/merge -30152d681e36d1ec11051e6ee160f4953d9abd32 refs/pull/3873/head -d710f1e9470310ad61231d730914c111da70b4db refs/pull/3873/merge -ab4c44d7898402c1516baed61d9cd441c50b62f0 refs/pull/3880/head -501acca320bdeb39f842c08c06028c7021824274 refs/pull/3880/merge -dc189d2a4fc3a2711d2cc2b6015e1bad5f80cff6 refs/pull/3881/head -1a03383a3d89eb88d4a7f2f48b617617ca4444ab refs/pull/3882/head -161346fbe6b76e5e5cd781e5bee3169975d4cfbe refs/pull/3882/merge -78aa70c7bd3853fa31beec9dee6d637b1cfc47cb refs/pull/3883/head -042a780bda28a675eea91b226e8dc5729329b3c6 refs/pull/3883/merge -76dd09bf080161665336997e1e74936e498ba1b8 refs/pull/3885/head -f26d69cfc94829cf8c787383267409ecac0999f0 refs/pull/3885/merge -0ff55c77b49463a3a30646731e9f23e576848083 refs/pull/3887/head -9bc1162747dbf649fe7a2e387bc66c02d891aa13 refs/pull/3887/merge -fee75486aca26aa0c8ab1ba3da68b39a78666731 refs/pull/389/head -8299bf0e2fd23ca77a90802587da3f58d7704f82 refs/pull/389/merge -27f2455ec4b850abb7e4aadc431d651d51fcd814 refs/pull/3891/head -13c938e787f99677899c511aace52344682202a9 refs/pull/3891/merge -cbcb8a2a571675cd5b0a1213b2ffec4d2d413041 refs/pull/3892/head -478b482e615dffd80634d1f809076f54b120e7f0 refs/pull/3892/merge -2668b4cd7de34fb50a275718d8f9a6a80667f886 refs/pull/39/head -6159cfd8ee80f31ab90ba348377224bc513dd8cb refs/pull/39/merge -b1684b69529fc842f38acbf5bf2027dd0acc402f refs/pull/390/head -3c2e528ab86bff8e7affb68cc7c35b2cf77a604b refs/pull/390/merge -5694da674836d902ce503e0b9e2e47517455d9e6 refs/pull/3905/head -f9cd672edde8decfba655a743473027b64f6bc67 refs/pull/3915/head -4b6bab1a225e070ef5847a69fe90c015f8d7c2ae refs/pull/3915/merge -74ac49a7f6a57af113ac020afa0db51adc54eea2 refs/pull/3929/head -504667f7acb2c59c63b9a3ff07d25f220269e2cf refs/pull/3929/merge -8f25ec391197430fa2e330393e0e0936fa7811e3 refs/pull/393/head -35b8d9079883ea775e4557e90297c503f5a713d7 refs/pull/393/merge -39655c77f47e514f6921fffc5283830f96a260f3 refs/pull/3935/head -aa2f682530fd39af66ad77bff37c720daab1a0d3 refs/pull/3935/merge -f12fec1bd62aaf54f44437132c3fcbc5ceaa7c07 refs/pull/3938/head -6da4280adbe441db34a19cedf56dbd222e5e16f2 refs/pull/3938/merge -6f907e5eaa0a2b302cc16367a91f1747a74d2149 refs/pull/3939/head -08a37d55084e382a72f702384ea589d165aa41e6 refs/pull/3939/merge -a24662e3857b259f7a5d9e84fffed189a6a5215d refs/pull/394/head -d15235a35fb2db0a4f8abb23e02e1bc7cb63b622 refs/pull/394/merge -c7a7e6f69162e9ba2a63606a5c659d438e4f8de7 refs/pull/3940/head -7f4e82c038013e3457505991c9b75a2ce56624db refs/pull/3944/head -4ad8bade3c6dbdd63f8276c1a7cfb7f815756f14 refs/pull/3944/merge -af87bc5e7e892edef3550b9429e09e642842aab0 refs/pull/3945/head -f68e215d0cef274a37a8877c656f2454d7b184c4 refs/pull/3946/head -fdd3372246641ea3074d471a49ee1d94a6c4401a refs/pull/3950/head -557b5be5ea9cf6b3532f910c0d0c6cef8d25e82e refs/pull/3950/merge -abba76bbd51a31da3eb3cac035e7044f42566d1e refs/pull/3951/head -4963a39ec56656e65e535935edfac3d74c02bec6 refs/pull/3951/merge -b545d642e3b2fc5ee42dc0146860db405833338e refs/pull/3955/head -3d7d91cd1625a6d674ff1cc14efa7a3eab0221b3 refs/pull/3958/head -adda6fe7ab45c8153094ad621613f755329a0bbe refs/pull/3958/merge -3b7dc11a4935fdca589d5b2702f9b5f4a2611aff refs/pull/3960/head -a985f1445fe72dcfb0b0587ba68e50e1e3f7fd2f refs/pull/3960/merge -1abaf872cc926a33fca1560a8373b1380f60ab0c refs/pull/3966/head -9005e77f8d66cdd01e839a3072b9abc0d455c6f5 refs/pull/3966/merge -2ddf7577f3165a75b22f98a86dad2859c0d773b3 refs/pull/3967/head -688d582d99a7a0c50380d1893748e77fab073f84 refs/pull/3967/merge -ffbf5d0151787023bb78700eb1bc6f168906fb5f refs/pull/3968/head -4f965e56abef337d7ab4d3618fadfa3d0519512a refs/pull/3968/merge -7b018e59194f3f12bf4e40e22515095268ff1e20 refs/pull/3969/head -978c524d045e8c1e9b6fe59cca1e4883ea874aaa refs/pull/3969/merge -7c6d80680f7d5e79bb7370d4c57c8ffd87d7b4e3 refs/pull/3973/head -c858268cd271a67454250a4e9b513a721a68c7b9 refs/pull/3973/merge -6488a9afe618f61ca624e94b1f0c8e09bb45412c refs/pull/3974/head -39206c30c12657dc86f2bdf623ad422f9dc6172e refs/pull/3975/head -780663689ebe178685cee77037332fec51e3017d refs/pull/3975/merge -5439a3aecdb9daa8d2a8077b78b098332c8a764d refs/pull/3977/head -dd3a149e063915d0f8ca82ac507eb9030f4dcfb5 refs/pull/3978/head -2d6cf744fe13792d256696952b85eec7a7953248 refs/pull/3978/merge -6d910c1b5152cfdc9e5c47b7758506f24730049b refs/pull/398/head -92c7e514425b153fe29e936848fc04d4c147d2fd refs/pull/398/merge -570d4f1678485d17147590f9eed626909366c680 refs/pull/3980/head -495350fd21a5947e8d6aa15db0d474ff1e453634 refs/pull/3981/head -33a62924a83e565f7a5e936529a32d0b05853e5f refs/pull/3981/merge -7df39ab2334190b235c01121c9080e29a69a34a1 refs/pull/3982/head -13569f83019565fb6aa0633fe7e8e944e94bb13c refs/pull/3982/merge -ff19be20a88106a27bf28f99eb77eb51b39402ee refs/pull/3985/head -b2a36d46b7de24112456a749509e0f8f2d7cfadc refs/pull/3985/merge -901bd2891773cb15e92954b99019034181b6f4fc refs/pull/3986/head -cad22f660953562db294e1b0f624b022dbfc0d06 refs/pull/3986/merge -b1e5ed9c83cf0f0b36be24235033e187bfb72096 refs/pull/399/head -7e4702045ffee711c784b0b3a7fec8797bdd58d3 refs/pull/399/merge -347b66a39468990ebc67552b739604f002fe16ca refs/pull/3990/head -8ee6830d99c260f3aac3d21ae32ac145fd613003 refs/pull/3991/head -41c4d72f07696f19f15160c40a3b10d6a1dd6ce3 refs/pull/3991/merge -2c6e031f55b2f2e96611b2e1f72f927b3b57cdba refs/pull/3995/head -688a8d3515efbae269d2dd2aaaffbd3a58d82961 refs/pull/3995/merge -05e7028f8055cbac99ec37f5ece4261e53fcccf1 refs/pull/3997/head -08fd2a22d112764cb93186debe57226ced450767 refs/pull/3997/merge -4276544e6453f0ef8b1169f5b3d0855b76964234 refs/pull/3998/head -ec79dbab23b9ae172a42bebb6dec35b68ce1e05b refs/pull/4/head -bdddcafbc27e483298563ce0214c0b6261c6d8f7 refs/pull/4/merge -d81cf266203c7e810e0aa6c419b002413e3d3651 refs/pull/40/head -092d50757e7fd09bfed4dc5e4b7ddda9aaa62a38 refs/pull/40/merge -74709442f76ade2b644dbc496f4977d07a59e680 refs/pull/4001/head -7a3109d0817c7d45b0dd9d39b2be9a22620f3bd1 refs/pull/4001/merge -f86c8bdb3552561df9591f7b42486199d6e52291 refs/pull/4002/head -1ca8f2694fc4a97a9fa364dd8f36304ecba8d344 refs/pull/4002/merge -724ed8399e554085670541f89de67c6647364f25 refs/pull/4003/head -b45ea9158c740ff24610ae1629f82485fde17497 refs/pull/4003/merge -e79055c0b7b6940fc9a011eb3457ce60b2269150 refs/pull/4005/head -f0e24d9b4ce276bd6386aac14fec15027ab81f8a refs/pull/4005/merge -01a32d0fd39910155c8114d6a21137c4210e057a refs/pull/4006/head -c104e28c9c710198caa6eabaa7482a58d2c6ee5a refs/pull/4006/merge -ebdecf5e65b2e7e972cb38b66d4fc7274e630dd0 refs/pull/4014/head -b92395dfe91d24b92dbbe180fa31d45dbe160fb0 refs/pull/4014/merge -1e60052f7032c07c326c8450ac0579ac5e96db51 refs/pull/4015/head -1627ce692959c44fdbac7386a9959a80c0ae5a66 refs/pull/4015/merge -2a9e268ab51a1ad230bead7500c21ec15a4622e5 refs/pull/4016/head -5a599497fd55a4959b51ffbcbbab1488bde1a33e refs/pull/4016/merge -24dc06f8cdbbb8f966568a642035aea69b05921a refs/pull/4017/head -ce8ec1852654f71b5332fcda8d1f0d2b3bd07dc0 refs/pull/4017/merge -90ed973763a9de73194f3bb2faa75485d54ea0e8 refs/pull/4018/head -ebd32eb628efbc11d9e028d2ac4929226d422c3f refs/pull/4018/merge -bce3d8f6beb04db210dc282b7c27d8ba1b1ca232 refs/pull/4019/head -8f582d149215bb87a728066c1e65622e85205158 refs/pull/4019/merge -90c173926ff432734dd343038b318d877586446c refs/pull/4020/head -12523e966f585f7daa0102fe1e40feb2b3ff43bb refs/pull/4020/merge -575aea28123a2ee190d95b092c5731866c14c599 refs/pull/4021/head -c9167c8f87cf6c0320eda28054094396597cba9b refs/pull/4021/merge -ef8724776402e3033e9fd25d3837e0941eb5a206 refs/pull/4022/head -27fd39046ff952c1c95c6a238e85f7e87cba3a7f refs/pull/4022/merge -402a0e15db6801c51ad56f092031a6df4fe8a2b0 refs/pull/4023/head -bd6f271880336df7ffdc522370f0b3ba3ea5c65c refs/pull/4023/merge -d440aca42f2cb973c4d8fb8516475f27c9ab578a refs/pull/4026/head -f1a2614916d2e160e105ac322f6594435afbe3f5 refs/pull/4027/head -fc10924590d02b06df729bb49dd5e396882b3180 refs/pull/4027/merge -274bcc356f1a57a5adf97b952c5a62bfe6e6c680 refs/pull/4028/head -28f2129ad97993786dc03ad74642c3aefa289895 refs/pull/4028/merge -fb2203be1dc38571459b5d734eec7d03e4c949fd refs/pull/4029/head -8aab7e1c02d08d9cad778ef97620a4d3e9112556 refs/pull/4029/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/403/head -3eeb1f163c9a00fb19e9cb57b9e5e87c97beaaf5 refs/pull/403/merge -6b62b92ce6b697e30542164b065ca3273b95f6e7 refs/pull/4030/head -832cb6e4acda7df4621515dca43a0117a91f6641 refs/pull/4030/merge -466b315f3f48c1065d0e1719f593d9de67648788 refs/pull/4031/head -5e01d50930ec5f12569f0785155e140322386bda refs/pull/4031/merge -facd8bb819d89837c4f57b46b1e4316becf4a304 refs/pull/4032/head -77741f6afd3395f41600756dd30eedcc61b000fb refs/pull/4032/merge -9961f99776f42c956fc4d86c49bb2106fed88b2c refs/pull/4033/head -d672c3ea2c2fb800b9f9a13b23365cb6858d0efd refs/pull/4033/merge -665ef0ea38493fa545e0b83f5262b351a3434298 refs/pull/4034/head -07f22d3d1b4d5610ccd353b8c11e5a7434d55172 refs/pull/4034/merge -4ded74380729ccebb30a52156fbf360f575833aa refs/pull/4035/head -fae3c5cf3520ebbb6ed56fbb1e4db8b8c02bd9ab refs/pull/4035/merge -a4422349c2e7e4924f1424c38fc3f11f0555b204 refs/pull/4036/head -9889829c9391468a7cc6cfdc4be06c52e9888ead refs/pull/4036/merge -17cec4c47728c0339bf0480140057452f0558b98 refs/pull/4038/head -311f24e5dca628a92a2c1a66fd4677e52ebeef49 refs/pull/4038/merge -d885cbe0264774a23dd4e811ef52049d2256b97e refs/pull/4041/head -d52b4a75fbf65d80fb6fbbb80f46805e197e4826 refs/pull/4041/merge -06b136103d71047be89d5d3866abea67d1dcd5a2 refs/pull/4042/head -c633d5ab10ff686f19ee34b90c22a06c396b0a5a refs/pull/4044/head -0adb8541eb877886def1e6ba6fe511829c383585 refs/pull/4044/merge -e2d3191dfd8e28952e7cf374ab8e3498f6e47f06 refs/pull/4045/head -7569a5570395d5440a3152348b81fbb2418cdf33 refs/pull/4047/head -2a87315a1d28b0890d85d533268aa9def7a3d8b6 refs/pull/4047/merge -77dbcbe79db9f4ae13555d2b1708f2ebc180d412 refs/pull/4048/head -1c6ff7169d8beb6a67a0cb188412991ff8ef09e4 refs/pull/4048/merge -d8b06570a59627e9146af332e3284f3ca29e359e refs/pull/4061/head -ba932acf711c3238534a746a617e9c72d9bf1165 refs/pull/4061/merge -315540cc38119a5bfc54434a971aed2c3cc90b8d refs/pull/4062/head -4b9eae893b8df724b21e823b10eaec64d0eafee4 refs/pull/4063/head -a99ba52c5d4345ca33893bf2ddb2c47bd0da4112 refs/pull/4063/merge -6201f0757349ff534e847ea81d8b4e1914bbe45b refs/pull/4064/head -b9245b20759c5c27fefcfbc150a7b5cc6bb24f9e refs/pull/4070/head -e9b80238692ec92681c6acef1426ede5ce257289 refs/pull/4070/merge -9c2e61caa2130736bda7c525b1fdec0ee03bfa7d refs/pull/4071/head -c5b53230d5d200330efed1e3ed21b16cda8aff92 refs/pull/4071/merge -4f92191b9cf7194cfd4834175e3e20546a75baee refs/pull/4073/head -c70f051bb359603740db888d76dec64993325f79 refs/pull/4077/head -636af19214fd0b81a3354056469c352f98b783ee refs/pull/4077/merge -e94769e539bc5edafc0277a1ce78a3ae554d5115 refs/pull/4078/head -d3d8e830528089f4a38e0eaeaa47b850fc7e6e11 refs/pull/4078/merge -147cb72798f153cbb4fdccfa4c8581ee94990c1f refs/pull/4079/head -0ee4260166a342b321ce218e35f445ddafe7af64 refs/pull/4082/head -7c77b48ebfb8f17b76683f5c880408b1542d0b11 refs/pull/4083/head -99240ac121a2338636adbe9a3da25c0fc0704fcf refs/pull/4083/merge -aaae0177ddbabc953f3d05966cedc78fcc48868b refs/pull/4084/head -8aa75ba30ff55a1d7534ae2dc5db4c01ed15f504 refs/pull/4084/merge -a14a0be8bb01fc81fbd84b7088491a6ee37cc569 refs/pull/4086/head -1b347c1c8bdd5641564d01698b3796a4279460c1 refs/pull/4086/merge -4ca52eb79abe5208243b86063d8fdf72f58f2c54 refs/pull/4089/head -de2dd744ff32a5480ae8b56a109300804726498b refs/pull/4091/head -6a9be7b47fb7521c2a9f6c0b5ba36cd249f1cb25 refs/pull/4091/merge -d5f53d97dd72ff44b984b85eca04a1f5c0ebd957 refs/pull/4092/head -ca1f91ad90045c8cc6a1926bf9d71e03e391bffe refs/pull/4092/merge -22cfa31c020c0d28c9c94cf9e046e32101f14656 refs/pull/4095/head -e2fc4a6c4f405b0d6b9c15147b4a9d6075613929 refs/pull/4095/merge -22ca711c5f0e8861dd0f34a3e0facb615db08493 refs/pull/4100/head -b84de1df113a0f83ea67cfd22c90dc96739f582f refs/pull/4100/merge -b7f59d18cf8028be50b97e2e516fe3896c4e8553 refs/pull/4102/head -632ca81240ca6037ff5c0f90d6b76fbc79650e8b refs/pull/4102/merge -eeb4f967e1c5caf13bf6089c9366d6c845408063 refs/pull/4103/head -fcf474885d840dcdf73b76e218181b53084854b2 refs/pull/4104/head -01227ecc1b2dad28dd6a73df41631b749ca34cad refs/pull/4104/merge -811f64e7fff70dad331fab6db53960ebb3117a2f refs/pull/4109/head -cbd8f4e10ca98873cbd4556d1d5ae1b1a087ca8b refs/pull/4110/head -1c449364eef83b1ae2f846d005e04b81fd8f884a refs/pull/4110/merge -2a412aa897f71bb49bcfe3b52fc0848b0ea2a382 refs/pull/4111/head -9c01425a3fc246325b4e9b86b2a27e5cdb59ba80 refs/pull/4114/head -86a4a0c21e9f6626cecd0fabf22be131f8137f42 refs/pull/4114/merge -65996fe52073e8bbe043153aa661d30299953540 refs/pull/4115/head -1d5cdbe6ab7ee7ffb7ff5603fc4db95548a87f54 refs/pull/4115/merge -902311b23d3849064fe0f2945aac98d93bdee1f9 refs/pull/4116/head -14ec311d6de1388f3223a92e455b8186eed466f5 refs/pull/4116/merge -73c07951661daa292b4f7c9d5b6e33d8d8bd2f70 refs/pull/4118/head -0cf0f2132ea0cc315d16923f2b21196b6579ba3a refs/pull/4118/merge -7d51fc2c647096c9630823e1363d622ab81ab1a2 refs/pull/4122/head -7f010743a0d732cb47d838186d804670a8ed8876 refs/pull/4122/merge -1fb12615275e59208214925b04568fb8e7cfde34 refs/pull/4124/head -50d86182ef011636777ec6e2d6badb6f67a6fe32 refs/pull/4125/head -8b39ffbf4d622edb1fdaa147c9dea18c8166e8bd refs/pull/4127/head -44c60d3f057639b4ec73189c415052f91503b62a refs/pull/4127/merge -af9e0d1458afcc8983637f418401faa5999f18b1 refs/pull/4129/head -cac262ee6aae4b8fb1087138b0c4a5f792c217fe refs/pull/4129/merge -09d39341fdff7d955366ce90d453fe62e82b9c03 refs/pull/4130/head -3f42d646af44fba2f19bc111d25bf7a263cb7bc7 refs/pull/4131/head -867b1345c5c5a46b987ce91246cd8f0f08af7f25 refs/pull/4131/merge -da5c387cfbb6da064c270ca9e10b5dfd867a9b33 refs/pull/4132/head -8f9cb710d24e354a11cca86988bd987abcb9fef3 refs/pull/4135/head -aaa530eef944ec6b6ed8ae8366ee5f83795b8a41 refs/pull/4135/merge -76f25ecf251008126b2c6b3e7ed20c7f1be198df refs/pull/4136/head -3c8a9763795f9860da949606b2e6595a8f02da5f refs/pull/4137/head -4de6eca7559bfea900b7284d4a877386cd4b26a8 refs/pull/4137/merge -2b6dc14b5b11492b0bfc74a69015a02f5b788882 refs/pull/4139/head -521c3276bedabbe6b522b351c6eb6bf4fe0cc0fc refs/pull/4139/merge -ad917e9cc467d2180b92208bfab45089d96a0265 refs/pull/4143/head -a429173393242d4b9d15978ca928a0deb1744a4c refs/pull/4144/head -10ba7363a844d45669bd3081336d38eb585882f1 refs/pull/4148/head -1a786a0712dc6aef6de077cac4c6de9274b6b03d refs/pull/4148/merge -bbce0d556ca02b3d149c8b9c530471b8c6f1c709 refs/pull/4149/head -cd40152968758ae099601e6afe8b6ff51b814b1c refs/pull/4151/head -9f3d2ab0505acc8435fca6d388bcf81504967d20 refs/pull/4152/head -9576347af803a64650eb51f0eb2ed6dde95eee05 refs/pull/4153/head -b6b7a728aa267887a1cfba2e8cc62ab1e8a6177e refs/pull/4153/merge -ae15d894629e87580574e98c5d0be856289ddf8c refs/pull/4154/head -feba031a9867bb7425b62532d59f1aa52b01cb9e refs/pull/4154/merge -d25977703758d197f8c3631bdc55edb4d1028088 refs/pull/4155/head -aff7b8f08103f596aaa99c9b99a58bb6689e7918 refs/pull/4155/merge -108a5e8633a60d583bba5e99231a3dd8f78af5a0 refs/pull/4156/head -448c38cb1e2e526328bcb9f24ddf988baf72db06 refs/pull/4156/merge -23442661f59415197e5c531b80cea621c40b6ab0 refs/pull/4157/head -4ac30125d41cd77a78d11c0eec60f3b83aae31fa refs/pull/4157/merge -7775be1bf0182a89a29dfdc1a076b36ad4021a13 refs/pull/4158/head -ffda1216b1b5fed2b3e77f6190c68db5ac1400fe refs/pull/4158/merge -fd708cec2a289acc43ed853bf9c89f72138bab53 refs/pull/4159/head -1cc9eb6555bfade83c540f252eec02bf944048af refs/pull/4159/merge -be6a16fce26ea3978ba467a15367601e0edac325 refs/pull/4163/head -a8c83925d4f1bcf010b90306c5f913624215d621 refs/pull/4163/merge -07f10ae61940981d05eb23514fe0985e1737fbaf refs/pull/4164/head -161b4343ef0d10a662ded76e27458a5ddae29eb4 refs/pull/4164/merge -088b595dda03dafae4e21b5f9ea8cc489f9ecf3a refs/pull/4165/head -7ed6ebc321eded014afba12f8dbbbcc3575ed27f refs/pull/4166/head -61db289ce88f80ec6cc47dae3926e2c704925a45 refs/pull/4166/merge -2b6cd4c11db9d7c54c502a37aeba27976f404b1e refs/pull/4170/head -db186db2fe95e188048a3d8f8593951367afdb94 refs/pull/4170/merge -ac6a74ee2242eb89e9f9d115505a0bc57650efee refs/pull/4171/head -5ffda76e02f1c8719d64c245cda891656dc786c7 refs/pull/4171/merge -df60514d3a16aa487e570d857af7365bd5d7078d refs/pull/4172/head -e7bb6d756c5fa67b820f9524649cf234b079ec1a refs/pull/4172/merge -6077fa835ff16cf52fc392a2b3f5d853fe224747 refs/pull/4173/head -18b7607a6a5c9bb421419337ec1f194ac44455c2 refs/pull/4176/head -5b48dcdfe97903af0c70b134848a7b3894563add refs/pull/4176/merge -2c8df7676f59ffc2c24541dc8f48f8ea6b1c2c7c refs/pull/4177/head -d0120fd4aa51bd3a58a325b148ad9cab79153351 refs/pull/4181/head -098b2327d9b8f217c76dddc05e6822a64e275f5c refs/pull/4181/merge -c3f51b631fc3168e49c7d44965b9c957c919d68e refs/pull/4183/head -0748f7a2a2f5e6092d6fc275a5c2a8b088221c0a refs/pull/4183/merge -64cdef033ed6282c76f64530868aadf46305311f refs/pull/4184/head -a98cddced36d9e4eac8ff2717b0797d140ce141c refs/pull/4184/merge -08bf07071899e17404ec05bbd39895e695570b8a refs/pull/4185/head -2acc54dc6763eb7e5a85763ef29093c61237a48b refs/pull/4185/merge -e32f9a2bfbcac783da3a9247bbfc0d7649411748 refs/pull/4188/head -ebc105036b30712eace815650856c25978ad734a refs/pull/4188/merge -fbe10e6146420b31984f554c982a191d6f2530ff refs/pull/4194/head -9d7438a72c495443379f5ca7420aaffa7c478675 refs/pull/4194/merge -1bad8e3e508ef1a8263e8c1ca1a41b3e9c015d8c refs/pull/4195/head -fa593a12cfc3641223944e24533ba63e4849a9df refs/pull/4195/merge -ce33f0bf7f510f6ef139477cfae25361f3f508b6 refs/pull/4200/head -98ca18e865a3bf3ec542fd5e2785ebfbee8abd45 refs/pull/4200/merge -0387287a87efa9fda0d912e6944e9f1f8217db04 refs/pull/4201/head -64692491812031a2d3a64fddc328fe44621aee73 refs/pull/4201/merge -70091922fb204ce034a8daef6987f48044ac4ebe refs/pull/4202/head -02c5640bc26877651ad2796294e28aa464e02031 refs/pull/4202/merge -941673865496d3d95f21b86b8acd427576b6456a refs/pull/4204/head -51d7ddf03497e2bf83be30526fa2f8adae20e65d refs/pull/4204/merge -57a32cd0205518516b154d629b5052298d3c7151 refs/pull/4205/head -b76efd3122e87e8f5289fb02b53a424b4473442a refs/pull/4205/merge -f9b4268f01c59373c0133629b533250640298519 refs/pull/4206/head -a2261e28986610db7a0f6c7e188dea6c39a908d9 refs/pull/4206/merge -870a24993b63907e0fb58768a826ec234d175270 refs/pull/4207/head -f4154950f259a4e808107df1014dbaa8883a050e refs/pull/4207/merge -9eceea16291fef515e0384b4959bc5eecf291a4e refs/pull/4208/head -cf3cc5c211d287b8d1ec64b31a487eff225ca915 refs/pull/4208/merge -c8604ac5b3210e33d8c7197212a413cb56d02f56 refs/pull/4210/head -b5728d7f4cc3494b98eb974d632bfb9340e7090f refs/pull/4211/head -b8d1109439456b72d5538838df31d9b5b67b8ded refs/pull/4211/merge -f552352e3bdad2ecc0ed4a6fad39610b14361c70 refs/pull/4213/head -474f2ab09d5ac9f6a206f81531a65a17d6b27f29 refs/pull/4213/merge -b2f5476d742ac5299011e1d371a4e551c50e9e7f refs/pull/4214/head -d2c336f3e419be997f4487c55e258f6faaf2ae63 refs/pull/4214/merge -5230123dede5206d2636a6e7d9f0eb011e3a32cb refs/pull/4215/head -b1a03a51a0ec6203d9b8a6fad1f43e10480c9c29 refs/pull/4215/merge -f35a62359c90118d5225e79e10339ad24cf81e39 refs/pull/4216/head -f0c5251fa021bf5f0b160b9501f55b9e2592bb04 refs/pull/4216/merge -252402afbc3d888a1c248e634cd5aabf8b75f15e refs/pull/4217/head -20b0a85d2f3ca160d7ed6c0bc438287ed2f9391a refs/pull/4217/merge -d7da20f4809396358e1c06a5bd4e29c16ac1592e refs/pull/4218/head -2f5b0a3130a336ad9597d83d518917ec1e1d3a3c refs/pull/4218/merge -9c3a855af6d35ab9953410990881eaa8fd4db2da refs/pull/4219/head -a73144d83535eece20a1c182a2b81df244bc2cbb refs/pull/4219/merge -e990f8a5cbf86c7776c6ecf36f9f03326716f7db refs/pull/4220/head -c71e21149624316a7e3205db02dc9a86798ac17a refs/pull/4220/merge -ec1b9c27f74722c3c1c3966dd5f40cfb040ca3ea refs/pull/4221/head -21dcfe76dc37e55d964c4a37a8375620844f4480 refs/pull/4222/head -8b077b3e344430243d7e0442de45f7b5992153d5 refs/pull/4222/merge -3bc7e9f832b8384ce50f61046bea74513ea8b2fd refs/pull/4225/head -63257bc7d11745fd1dd42156002179381f26fc64 refs/pull/4226/head -c40409e2cc2be0815c23f65d37a597fc1a80ca7b refs/pull/4227/head -2cdea3af421858955a0a57f6326b614a20e2178c refs/pull/4227/merge -1414d76cadbdb3d9629eb7d0ac4218057ab8ea32 refs/pull/4228/head -c757ded94676ad87112ae39b0cf569ce8edbb96e refs/pull/4229/head -1f213e9a53b2a8ddbe0b4235bd22ffcd0190e7e7 refs/pull/4229/merge -9a18a45b7df9ebfb0f536d12fb558f78107874eb refs/pull/4230/head -031c203404d58c58132987d12e15d2181d0be5ef refs/pull/4231/head -6be1e54733ab57d1255ad607a5e8b27cb0c4e822 refs/pull/4232/head -80c95943f6f07ea2ea8d993427f7c4a452c890a7 refs/pull/4233/head -5d34b5124b8445d6c6cb5591b5714b87d8f56b63 refs/pull/4234/head -7390951f92f36d045cc209c0fb9a5ad4ab33e0fc refs/pull/4235/head -55b4a25c193308883ef42bb14c2b36dce0cb5568 refs/pull/4235/merge -e3107de62e2150146460be31fb2d4f0cdf795474 refs/pull/4236/head -39c993cbedcf076c1e39eb617450af27c006a4c6 refs/pull/4236/merge -15204d0d22057200ba7ddf328f1ffaa251f6a84b refs/pull/4237/head -dd87280384995eafad2ac31c327c83fc1ffb9663 refs/pull/4241/head -0761c3bdd5358c9c4f9e878d0a2ab9c9c2c0ff23 refs/pull/4241/merge -1e7f37406d8c9f491c9a651891c271c0c5a2ef1e refs/pull/4242/head -559227aaa11bbfbbbe33a8817f5ca26b9236b0aa refs/pull/4243/head -28be175dece595c2c409d34eba6e8f57500133ec refs/pull/4243/merge -d72dc960bd40f826c1982e1e8e5eafe156d4452e refs/pull/4244/head -b7abbec55c64cae29d75ae1dfd87f2031da64998 refs/pull/4245/head -247e29713ad8472e721922f5be1aebd53f123266 refs/pull/4245/merge -f2c574deaf9c5bc8235d32da802ec51f96a65f15 refs/pull/4246/head -65b27eafdbd47fc149cce97dc53fd716dc317db2 refs/pull/4246/merge -ce92da2816ccde8c6d2262457828dbb1aa274571 refs/pull/4247/head -abd4c6ffc535f4cb0abee99d954ec82cdb4ebcc6 refs/pull/4247/merge -6a472a1b487d2f5cf279597afb7f82b70c1c7966 refs/pull/4248/head -065b00c577499bda4f0ddd58863f906945b558ce refs/pull/4248/merge -13866da9339e5486393ecd22600250726c53c4e1 refs/pull/4249/head -4f77ba7a36b98c3dabe6011ce33718ac19d297a3 refs/pull/4249/merge -6a0ffa306e51c74c141c89762e94894182e1eb4f refs/pull/425/head -e8791cad979f2d878affe3dbe30dd6a95d9c4b72 refs/pull/425/merge -3dca42610e21a0c6d623fa2b9683a73a0b475cee refs/pull/4253/head -ee1d2334c53f4457457e446f0a19a07c471ec372 refs/pull/4253/merge -1a12e363b91ffac74ead56f931265e80077cb96c refs/pull/4255/head -2c59d8f96366d4bdf44914e3650a0df71e2b8a0a refs/pull/4255/merge -11436f09a83049af8d481a7c7d59857eb8467e96 refs/pull/4256/head -11436f09a83049af8d481a7c7d59857eb8467e96 refs/pull/4257/head -e5ade9f9aae5736c2b27ee13c28032be55364666 refs/pull/4257/merge -cfadd0004b7aee750b9237d1127d03abe556587e refs/pull/4259/head -a43d2590f8b8d4e3428ab24aca7fca6f662e95b4 refs/pull/4259/merge -63dd293b70d4fd0983d32bfa06af66b16a4a3735 refs/pull/4260/head -8b099fe46c87302d8c35a8f3279415b1083136b5 refs/pull/4260/merge -ebc95bc9beaa04ca6b529c31f8c0ce96fe201ff3 refs/pull/4264/head -629c900a9ff488fe0974e69d9834285c3ddcea1a refs/pull/4264/merge -b8fbd0bc64f319f53ec5e278f0d817467430c5ef refs/pull/4265/head -699452795463ed834d00730feceb6ab42ae3283d refs/pull/4265/merge -65750ef1c085e5deb2a6501c76ece4fec602d8dc refs/pull/4266/head -59a1d5a5b0370af0d1296ff833e2aa63139618c9 refs/pull/4266/merge -2a5da8e552a95f9c4fd1ae43d1b1531520ccc925 refs/pull/4267/head -73db31e3f48f49de59024f182a67792730e9ccba refs/pull/4267/merge -f73a818b51c2c7797d6ffb251d5813ce9d4a6003 refs/pull/4268/head -ad85b4d037a9b1cef837e937654cc407d30f48fe refs/pull/4268/merge -a2523562d5b39896a1a228964fd699f6eea9ffb3 refs/pull/4269/head -b66fb0b7e90d27d1cc7d7de4a5a4668e36982c87 refs/pull/4269/merge -55281b40a134f25bd64e560f26730cd5a0be2977 refs/pull/4271/head -44b993e3489270587951149d3eb7079c39960631 refs/pull/4271/merge -79d7b94a8e5dc1c313efe07799fcc5676d24da5f refs/pull/4272/head -df9d543787d2a85785daf7f31bff3e24d53ae9cf refs/pull/4272/merge -4e9f61e9a0737e2eeb38c8fc52ca6df40afd9091 refs/pull/4275/head -1a7059312072c91917df755df95b939ae96c9731 refs/pull/4275/merge -fb5226dfbbba1c05cd46411b91f3a0857f701743 refs/pull/4277/head -7057a9fc47cf4ffccc22514f046ba9bb7bde7152 refs/pull/4277/merge -91f94b7945dff05a4d5a05f679611eddef0c6a4c refs/pull/4278/head -3928f871128b9c1c8a8e701b8203f40d2f7ddeb1 refs/pull/4278/merge -c21b570556a7c975ad4c285b218ae3c71d09a0f3 refs/pull/4279/head -667c70c2f32eb9ae919b51d51548adf78e89a8b7 refs/pull/4283/head -d5b2cb8a4755ea20d29acf55bca2824a72b54f48 refs/pull/4283/merge -45b823c939c87bc62a2ebf81f6a5a1c744ffd8c4 refs/pull/4287/head -ec2089b0eff002726199c050f1166a04cdede34e refs/pull/4288/head -dbe6d14dd819fee92da86c0ed95445999bb956e1 refs/pull/4288/merge -44f6c9a3907d3894e67b7e6ea1363b93a2adaa23 refs/pull/429/head -3fcfc204970aba4d94b2194d053f28bf7bad7adc refs/pull/429/merge -c071bb9bc42c3d1f571584c2e2bed8a33c3bad6a refs/pull/4291/head -1155e8c26ed3416c14969ca5ccedb10e6b8ff284 refs/pull/4291/merge -952e3698c7bb4f54ed4542896f4dc436bdfac855 refs/pull/4295/head -1cfe95547dbe62025a21146e5faac320c830f072 refs/pull/4296/head -49c194130640d2e4265d12bc4043ba7e8c2da459 refs/pull/4297/head -49e7a70520087372ee8a5c83be184734340c8dcb refs/pull/4297/merge -8a749a35083567214704729537902f7aff33d476 refs/pull/4298/head -2f4a7cffa940bf1475684f8af08b49a060a73313 refs/pull/4298/merge -70746bed36dd314a7a64edf50af06ccb69f83a19 refs/pull/430/head -008a498d27ac7f0b5e00873e3965020c6b48bfe2 refs/pull/430/merge -8677066402e1bb657afba554d6acc6df6af2df54 refs/pull/4304/head -161c7789a91c155aa1fe198c7519efccc0aa09af refs/pull/4305/head -0f76c8d406c1618f251e2b4e590c8e938b53f81a refs/pull/4306/head -eb84ada77f9f7dc9ff58139d2820332770e7ff23 refs/pull/4306/merge -69898867e3f7a4ec25454d3a6db8a7fd1049895f refs/pull/4307/head -8a2ae6d32d1718aa795b822e7e7cfba1b5fec05e refs/pull/4308/head -48c25eddf2fc0832d8478e5028822dcc44365958 refs/pull/4309/head -ed05c9c6f43c01c622a290dfe1a3360c3899354a refs/pull/4309/merge -e90ea2602c5c606b446df23f4bc9475eed9193d2 refs/pull/4310/head -2d1f5693bb655fceb303e6f5cabe6283785f06da refs/pull/4311/head -d47e4ddd0d77fd942d5fcf9492ab0e8951c18ab9 refs/pull/4311/merge -8b8b148199b49f7ed8d0ab2785898a2a2deb952d refs/pull/4313/head -9cef911cfb7853206990ed65e6e7b370436bf34d refs/pull/4314/head -7cbfff5eeb7491f3cbe9a25f95458d54de1b188c refs/pull/4314/merge -643a2128b1081307cbf8368a60cd4b7b4ccd6d5d refs/pull/4316/head -d51c5489eea78e80134627c76c4e20ff4a546f05 refs/pull/4316/merge -91f693d2e848db1a493c855dfafe20ccac972d0a refs/pull/4317/head -620333976ee4348995bd9616bdf4d8b7156959ce refs/pull/4317/merge -d9245a9311fc67cf5ddd620ddfd2e99acc80404c refs/pull/4318/head -1951560c04441bcbb7242109a3c3d63a1d068d26 refs/pull/4320/head -7403a191b6121346fbb3764881da3ef7e98ae14c refs/pull/4321/head -84ddfaaab76e5ac54c5f23b7d3407e433672f2e6 refs/pull/4321/merge -cd19df4b33cfcf2be3b0e2534eefb09533e69d76 refs/pull/4322/head -e19dcff6ae2741df937a4aa4eeff90481e915f53 refs/pull/4322/merge -35ec6bf8f4f052c0d4f4a041ec8acbaf49854edb refs/pull/4323/head -650d9278e6c142ca89ccaf424ac1c5edffc18928 refs/pull/4323/merge -a667ab19807d16db85f5345c3d6f49cec278d05e refs/pull/4324/head -a8c91806918d1b16c9c5b2f0f0a07732bafb9b58 refs/pull/4324/merge -afd389c4b07d2ea6aca8bd486efd8c4731560533 refs/pull/4325/head -53d3621c01163b4933f2b624847840f8497e9bfe refs/pull/4325/merge -c4f22c91ce70612cf3ea2ea5ed36a0bf271eb62d refs/pull/4327/head -290d7ee71247b2720651169717a452422ff2ae2a refs/pull/4332/head -0a4a683638145a4f4ed81bb1994b51e7efc26b3b refs/pull/4332/merge -3915a1d90b8128a15bf1479bd411c0e1f8abde38 refs/pull/4333/head -a9df21a672e1561a6e56bf485bb8740ebdb88590 refs/pull/4335/head -911517c6e97514ea9de5492c66bf77a79a073cdd refs/pull/4336/head -3f50b060d6d0fd3193fda3da609256813bfedb41 refs/pull/4337/head -0b7241679092daa45b650238911d9e7297ea8200 refs/pull/4337/merge -bf860925ebf06b6dc5c9b398929097126b621b0a refs/pull/4338/head -7ff3e3b4575247da759841583198d8390eec3508 refs/pull/4338/merge -06ee54156e87c936390bd262b5937e4a9f95ba6f refs/pull/4340/head -174ddf5d0deb696dc5d9a6b7c54964c772036769 refs/pull/4341/head -62a8a303343b5474554f74af12fdbf3d92c1ed87 refs/pull/4341/merge -e6592e620284f1a01dbb689fc18faf6e05691670 refs/pull/4342/head -97cd3c43795ecbd7f138883f4219c30f1871168e refs/pull/4342/merge -72f557eefebb242f24a364fabcf44d69c73cffff refs/pull/4343/head -2a3a3f26f41b501d903dcc635ae1e6349b104cfa refs/pull/4343/merge -ed89ee4adfa0a45edccc0fd426e04a3a85727f3b refs/pull/4344/head -101339c7ad15ecaf0b1235b58127f5a271d0bd20 refs/pull/4344/merge -0771ec69d716283e0e5b38de3e0b3e8da9065ef1 refs/pull/4345/head -024ee713974804ca501f223a988c27864b906433 refs/pull/4345/merge -84177151837944e1f5a8db0cca272a7934d7fb98 refs/pull/4347/head -84177151837944e1f5a8db0cca272a7934d7fb98 refs/pull/4348/head -3e75ad051b1c02d5330b1fdb51a54fa20aabfcd3 refs/pull/4348/merge -1dc6891d071c8e60da081921f40e0693fd318878 refs/pull/4349/head -e5c9aa3bedec48fc376683424a594d9f26c5cfba refs/pull/4349/merge -bf7597487d71fedd8f81c499ee45e3e752c3dda3 refs/pull/4350/head -a19b02bb617a2fa07c42774a1241eb3417ffc013 refs/pull/4350/merge -f95dedca91d0b3b072169e0b7b6c49ebc75debc7 refs/pull/4351/head -aceed27fde6610ce93dde2e092008b03d40a6a98 refs/pull/4351/merge -4675b0bffb036e2dbda56033ffb13dd8acbec82e refs/pull/4352/head -cb85e9d64e6c9f60b187db70ccf9297b1f619e96 refs/pull/4353/head -360f4b4f8d4d5514cf2a788937c49e031c03f640 refs/pull/4353/merge -a8c78eb00d74d531dd3ad0b80ea41f1f3193c661 refs/pull/4354/head -60326fa45702876ad230e2fee87e82572503cac9 refs/pull/4356/head -6740b8e6d7266f5bf52095577f89772c63da5050 refs/pull/4356/merge -719eaac34e972fe1dd85ac964f23442deea78359 refs/pull/4358/head -360a8d20188b3d3e36888d24caee68b2c8d9457a refs/pull/4358/merge -46fe6e5c80ae8d49c88e20871e3a62c772ae78fe refs/pull/4359/head -9b2185fd5f302003924c9875861b57fb4fc28817 refs/pull/4359/merge -0fee4a8b82b65135dbcbb656555d072929d5d873 refs/pull/4364/head -e7c1199ed55ed746f6079ffd620cc858f2c1eff6 refs/pull/4366/head -ce7510fbb9f6713a199517a041861bbd20a9bf62 refs/pull/4366/merge -fde9bddb3d4f226e8d127bed347d06094d113d8c refs/pull/4367/head -76a8666eeb8bc120db1cf2bd893670ff24bf41c5 refs/pull/4368/head -92f068b316b5e8685d5b4ca2040235aa3018c662 refs/pull/4368/merge -ed5a45e8cbb1b0283bc82f9fb23568cc3ca2a430 refs/pull/4369/head -d345b4658ea7d2f0f0e224ebdde20934d2720737 refs/pull/4369/merge -79e63bb2da260fee6d23f27db25359dc82525961 refs/pull/437/head -0ffd84cc9da62117e161e9da929b7145aae4382c refs/pull/437/merge -ad22168f0de3ae9731330f6da23f844171535207 refs/pull/4370/head -81afd58c715f26b7d751595c71898ce92972243f refs/pull/4371/head -023d330ffa5b9d69c1ab6e848ec720d492d86f75 refs/pull/4371/merge -35c49d32c8c0bc2410beaf008ffb0cf9b718c9a6 refs/pull/4373/head -7cd7406e503698a0ba6a05208ef4cd056cc24a11 refs/pull/4375/head -1ee5bb42c8303226a54577f41510d605be548d15 refs/pull/4375/merge -72a9204edc5e480d151e640bfc4a33dc883f81d8 refs/pull/438/head -a2dd5e49bb1fc4df63e1d60119bb6a6f65ec53af refs/pull/438/merge -75b1d25e302288441f0fb4ddd5aed45106009b0f refs/pull/4382/head -73f225f8713174ff95f3a77538544798ae7a2272 refs/pull/4382/merge -a2af97f7292e8abdbe1880d7da52390c4e8856d4 refs/pull/4384/head -4f84d73d2371eb4077ec54dcc99d5f55af052328 refs/pull/4384/merge -9104d44b911f6bf3ebd1fbaf2df0b9a5f3a86d83 refs/pull/4385/head -8e7a96a73bc7ad92535be97cb067ad586fcd5060 refs/pull/4385/merge -24fd8d3caab1842b34ebe674f4f33eaaf5b94aa8 refs/pull/4386/head -eaf3d67ebc9cfe16d1f384fcf102fadd4390feb2 refs/pull/4386/merge -3aafd64491f2df3bb407e06682be9cc4e1cd33ca refs/pull/4387/head -f9b69ba3470eb23d233d70fdab88e17610b40fc0 refs/pull/4387/merge -77d98653bfd1a56cb8f67b12d5687abea2b98c1b refs/pull/4388/head -d7fdcbe7c2527ef1265bd5f288bff6608fc9ee10 refs/pull/4388/merge -982cb25ce13c7226279234bdaf3565134066c1a4 refs/pull/4389/head -2b7c48e73f040cb8f677841d6f596be9673ece15 refs/pull/4390/head -5e97bfbf0c53f66aeb3dee5d6cce51e1bc2c42c0 refs/pull/4390/merge -16c2de9e22debe9dff542a87682ee4abae46c596 refs/pull/4391/head -8ae398b724546a1c61da6f50532024555297b0ba refs/pull/4391/merge -7413ef3c809c14a355ca397d5ef7844120bdf491 refs/pull/4393/head -4da514a398d2c4d01b89d73e43b652fdead07d31 refs/pull/4393/merge -d78916faa58d7695e2e27d4bb116aff1b46cf727 refs/pull/4406/head -58e5f757b86b7bb6ed94a1b911ebb08b7285b23a refs/pull/4406/merge -df3d4051cc5bae1fe4c626f85938013bf956fe93 refs/pull/4407/head -75f11f39b20d6edab0417d3ece514e2673e8a148 refs/pull/4407/merge -8b54f0898f9499d572253b77a6b1f7b0cb2042cd refs/pull/4408/head -2da34fa3522a596617edd58c49a503c47079ea91 refs/pull/4408/merge -e5a7d1526b08fe9c0636d841c62a381093ec644a refs/pull/4409/head -092e2ebaac0b6ba63a13db11168716ee627f2c28 refs/pull/4409/merge -31a4ee94c60b5bec6bd610aba36848bc980b926b refs/pull/4410/head -ebced078cfe8cbde007e167f6988bb8847ac11f2 refs/pull/4410/merge -a51a033f8e87977e2e07f074a7d85c855f3ac00c refs/pull/4411/head -1201085672c4ca0d327f1257c7db3a577c5c0b1a refs/pull/4411/merge -85a9f5e5cc8a87ebe19af60cb0569e341ad08da6 refs/pull/4412/head -f353bd3516616ed4d6c2297ffab63ec20096014f refs/pull/4412/merge -4d021718fe0aa3b4dce413d7bdfda15da2c27853 refs/pull/4413/head -ee6213352441766d0b370f7073ba731946e72ef0 refs/pull/4414/head -de32016bf579767c0f566f63ebf37025501090e6 refs/pull/4415/head -d5be7fa451876bb25474fb9573867ff271f886c4 refs/pull/4415/merge -b91330281f69ae26152a9f531f9046ad44147046 refs/pull/4416/head -ec2143844c7e5c1b109b16fdeaaf3d68775e327c refs/pull/4416/merge -c2b8d98fd38354ab3c68221978df7b58c909cbf2 refs/pull/4417/head -56414c14b86fd992eafe154293016192426150ee refs/pull/4420/head -ca7013160c5ed401c20c9df8287367bf27bf5fd4 refs/pull/4420/merge -9377a35d5de024292fe08c18fd5582806f5e0596 refs/pull/4424/head -54659c174531996d6022aacc008f2463899bd40a refs/pull/4424/merge -e2984fd582e437a169a82c10e0f9d4fb4b8533cf refs/pull/4425/head -0883b54abd3fb55f58501c29b78d61c5be979a13 refs/pull/4425/merge -bc10edb98b20a5aab7a563aae8d276c5b39322a1 refs/pull/4426/head -2eb96dcf6fcec34bc612fe66d82546ad542563c5 refs/pull/4426/merge -0bdf353e3c7be9f8c403f3b926147071eb562e11 refs/pull/4427/head -c7ba4a7d2e2d3022ed2e4760f9ac84828b782146 refs/pull/4427/merge -bf5a86c30dd7bf2289100488d0fbe4fcfbfabecb refs/pull/4428/head -0de28bf06029db69fd7324bfdb54e1ce51879430 refs/pull/4428/merge -ce6f184de0d8bf8828b5a246a22a6fac34ddd0b3 refs/pull/4429/head -d6809e64f2012162f3a89124d3a722b6179f67ad refs/pull/4429/merge -29ffcfa6e97d48d6737c3fe445dcd45828faedf7 refs/pull/4431/head -c44bcdc5eb132245f085f328ec8fcdfcd4f51146 refs/pull/4433/head -562f17e4c28ec0df85aae86d7576b2313a6b3d43 refs/pull/4434/head -c7799cf618bf26b7de4eeec49fcb84366f0b427a refs/pull/4435/head -6743e2ecec7b991cc794bd0b5dfe5e7b7294ee03 refs/pull/4436/head -a6da7aec84aab85e6ae77216ffefd2109b7a9ed3 refs/pull/4437/head -3234cea64d8e915296e5ac0c2acd8e90aeea1751 refs/pull/4438/head -63eb9ae97aef668287a0c125b071d8d82baa6d7c refs/pull/4438/merge -7fcd602e4ba4adf149f262d7cfe3019c54852463 refs/pull/4440/head -da3655e100f4854299d724efb21bafee9e7a2be0 refs/pull/4440/merge -f2bde3555088d0093fd49c4a07896ae78b940e95 refs/pull/4442/head -018213d3479d93b31a4eedb9db0da80575bcce86 refs/pull/4442/merge -bbc96a8ea4d50fe852d486fbf76494da25904749 refs/pull/4443/head -66eb1228a97fd4d963698178ca47f1c6319177b1 refs/pull/4443/merge -5ab81afa28d6c9bda895bca1c95a924dea848a07 refs/pull/445/head -c80d08373015bf61e79e4ac660b2815e8a205a38 refs/pull/445/merge -a1e7c60fd66b5d4d3cf75bb3fa631d4e79fadf5a refs/pull/4450/head -a6061077e1bed48ec8907ba57bee08e5a19243b5 refs/pull/4450/merge -a09f11e98be7e30a4c8e4923f3fbea5ebc4cee80 refs/pull/4451/head -447f9fdfd0413c3500a8abd21de128bb5da957f9 refs/pull/4452/head -8e4a5741881b9328c764dc1e51e41dd109d7df09 refs/pull/4452/merge -faff0b187346b140ccd9d0ba5d90685568ad2755 refs/pull/4453/head -41e6c4bf18a0f928b07e91e9b1e634f6ea76da33 refs/pull/4454/head -fe41641c50b18bed6385ff5aa0a3d502c3cc7556 refs/pull/4454/merge -e885798e9629b05264b88d8fd9dd7f75ded5824b refs/pull/4455/head -b75448ed69a62408501d769e0a539de621ebbee2 refs/pull/4455/merge -ece34b031b8bc8c825e4d1d96cff7f460689cf53 refs/pull/4456/head -38c89eb298815863a612a61f8dc3bee05f917aff refs/pull/446/head -5ee5100921886ccc5691d4d2c85be050dfb184d5 refs/pull/4463/head -745a828f5a0b1c81d398c47364f86313caf9bbd9 refs/pull/4463/merge -4a74f1fe8c9ff0172633b2c4d5e6872b3b66d4fb refs/pull/4464/head -ef7c505e11475c683b8ce7da50ea8503b12d3a19 refs/pull/4464/merge -16775de5c749f6b87bbc5bf423cdcfa411c5a697 refs/pull/4465/head -3c48794df2ff2697460b8d76e49c54a577612390 refs/pull/4465/merge -d1b8dedae0ee4aa43e96beedf2f4299e8c6c893d refs/pull/4466/head -90cbcdc6a486572ebfa56b11612c372d59beab62 refs/pull/4466/merge -b37f8439f307fe0d6c05ea8c1c13101aedc151d3 refs/pull/4467/head -0b859b72d61e4b574a260f9ca80d7b82dd80e8d3 refs/pull/4467/merge -08d2618a729829a5f028e2735034baaaee5fdfd6 refs/pull/4468/head -adf2be4b44cb3bc60864e0ab074f1a200d2af126 refs/pull/4469/head -9104607234bcdbf9c0b49849183e8f2cacc376bf refs/pull/447/head -00163a719e0c8643a1ded01d5f0c45f91de94a45 refs/pull/447/merge -c27d29303320b98ac2da08eef3be8360718e7d8b refs/pull/4470/head -49ebffc4fa18fcb45d52a089e717c9b9b36105cc refs/pull/4471/head -7442ddb38714c973aff513bcaea5f8347cdced38 refs/pull/4471/merge -45640b6b18feff1321b280abdc22b6e41346228e refs/pull/4472/head -a23e13b98c80264227852ab03a2f22a0184eb7c4 refs/pull/4473/head -3169cbc09b96bb0b7bce32a11d589994887007ae refs/pull/4474/head -934783e6fedc7a84389fe4e12fee3c7f7ae0afcc refs/pull/4474/merge -19bb24eabc2edaad825190f991d948d0f400afd1 refs/pull/4475/head -36b2b7206ef5be3136aa77fa218a1d4ba42e7e8d refs/pull/4476/head -36b2b7206ef5be3136aa77fa218a1d4ba42e7e8d refs/pull/4477/head -dac1ae5a9b4a10aa2998e348c9723790a233e4f1 refs/pull/4477/merge -5c80944eec53e89bbc06797eaee92fafa4f5b37f refs/pull/4478/head -4e7dbf2788939b7e24067401507607cbe4ca4277 refs/pull/4478/merge -9c6c90d2969205265e90fe401d573a328b7215bf refs/pull/4479/head -94d6bd7203ba1bced2da998043f7ce08a3af1c1f refs/pull/4480/head -2ad2827fb0f55b3f5e927dcaa11ea55dd910b49f refs/pull/4480/merge -9012f303269523ba0de09c470e55245170220f11 refs/pull/4487/head -fbcbadb380de24c32bfab9c202eb4910b8e070e2 refs/pull/4487/merge -f4f020780d8a85747ad9466e60b993a573a142d8 refs/pull/449/head -8b9755a300ddcf21e65009769265cfb8c3f35215 refs/pull/449/merge -57639d75d9bafca24295951d3eb12f15ab146563 refs/pull/450/head -665453d922591c1eaa0c4386d752e43f9d43bd06 refs/pull/450/merge -42a700ac15b167bc657565584207ed532fc9ef99 refs/pull/4512/head -5a968b4590b1d53c37a9e77d19a34205b1515b6f refs/pull/4512/merge -312def33117067863f0478803726642f7b9c6587 refs/pull/4513/head -4daba732b0ff0b5bfa6e2ac0f8e7f4c8ccca1b35 refs/pull/4513/merge -1af904b9a1b22151d4371fb9d48b2d5eb4de5312 refs/pull/4514/head -8035a2e9f1b29cdaf16ea73dd9a898f1351430c0 refs/pull/4514/merge -f893ce0a0a3605a09cea75fcc94b0f2c013bf88c refs/pull/4515/head -05b774474206c281dd0daf31c99b278984692090 refs/pull/4516/head -6800083d31df05ae7ef1f5e3323eda3dc2dcc27c refs/pull/4516/merge -3d1214aa09894deacd4cbcf24cbf5321d0b59d6a refs/pull/4517/head -3b02420993067a39b85fa43e163ee8ba12b30570 refs/pull/4518/head -e6ac6cb1de23d350e371d9e272e17a9f595480a5 refs/pull/4518/merge -8f5e00054e4f7f55edcf53ffbebd73933f76e407 refs/pull/4519/head -becc4a28c46ca41e4767b5eb38a6f5e4308104d8 refs/pull/452/head -1002359664337d2c32ba1f8f7a04de9f94b025fa refs/pull/452/merge -e9d11ea39384a51533e5f1d96eff7fcb64123513 refs/pull/4522/head -1c05d44a79d84a14eadaa2422976d6afbfc9b41c refs/pull/4522/merge -eb0ac2b3bc01d3b9af7c49e8672960d0f7619ece refs/pull/4523/head -e40fd11ab5aebb819b16f97371711616d891c453 refs/pull/4523/merge -ae21d9f1b261ecd1073d0083614c78c7099f885c refs/pull/4524/head -de1211af2658816d33da094cd5b0b0ef6e3eb948 refs/pull/4524/merge -ec77a4bfc2e91eb1f91b24ba149ba893ecffa31c refs/pull/4525/head -ce8cbb6044174a8f1d455a2d6c2d40274dd6683d refs/pull/4525/merge -b7c906da4acaf9b6ac7bacf3452dee7fb534f70c refs/pull/4526/head -641b12505d876dd4b68a4049c11ecdd2ea9e4a51 refs/pull/4526/merge -836f8cc6c294fca090e4d12ac6ce74fb4e7eaca0 refs/pull/4527/head -a316bfd5c012fc9318d5494bfcddfea02ddef4c1 refs/pull/4527/merge -935a23a5539788c7a0e188610cacf46e5e636119 refs/pull/453/head -0a3d70cc0458006b8a50e922993f1487157117e1 refs/pull/453/merge -2695497de6b9a2ec4e9ce94e33f4abc5f4e71a68 refs/pull/4532/head -dc90991a1904db84f16b229980d04c40e383594d refs/pull/4532/merge -bc976630a8f11be3fb1b3a20688c854030bbc282 refs/pull/4533/head -3e9c16e605f1342fded951e3d17a04ae51d7943d refs/pull/4533/merge -ec4e718a6decacf8c999e7200b14a43d82906415 refs/pull/4535/head -7385ba59a7993cbc00bc3f0499c239644cf2c164 refs/pull/4535/merge -fde9bddb3d4f226e8d127bed347d06094d113d8c refs/pull/4536/head -5f37b3d5faa7c8cabeef440ffd9d3b3b1899c960 refs/pull/4537/head -9e2bd4013cf10598f85afcba09ac0b8e7f6804b5 refs/pull/4537/merge -b3776924d2808e2d4c4c81310467386024e2e4dc refs/pull/4538/head -c34da78ffdf4f3ad3353bbaae28ef00b132b74b4 refs/pull/4538/merge -605a6a4229e4e0fbe3f420f2023c7316a2bec2d7 refs/pull/454/head -b2ef6e42ba44a6b048f21d4821ac00d0aac1b2ec refs/pull/454/merge -d8d464e56bcdbda289dfef1531f13a1e0de5eb68 refs/pull/4541/head -c94e39fb756ee4e04abae5940b7a9a4f5c24089b refs/pull/4541/merge -50b36fdc521a08c073f76de46a3c59d91189a7c0 refs/pull/4542/head -986aa9c5fd3db1057242ed631c70d45d07cff0db refs/pull/4542/merge -44b9bfe8eff311debb79e095e83ac85953761181 refs/pull/4544/head -c75d4b4d1cf9691994ba739da9c1e882c91a5671 refs/pull/4544/merge -19b69eab5f2c0e57ff8f737eb80dc0bd1973f60e refs/pull/4546/head -6a2d6e2c6da42c8253f10ae952ba540256e4da7a refs/pull/4546/merge -f98474272fa472cab783d4859269fed15ae0849d refs/pull/4548/head -58f683f67291f959973b07be6c3946495a0391ff refs/pull/4548/merge -e89dac965827a1a361191e1fc53f832fc5c0de74 refs/pull/455/head -d7771eb79ed8761c812ae562cf78a83da57da875 refs/pull/455/merge -a6155e975c5aa59cad6a30f102e7bab15e9f0543 refs/pull/4550/head -ee21b3d0b93d7ef39135008a725692cfc1388bd8 refs/pull/4550/merge -1c7377536eb3a72bb940b6ffe9e5bcbadc2a4587 refs/pull/4551/head -4e3fe1053618a072ce276e31e43f71687f5bd974 refs/pull/4551/merge -280a600c24abd027dd1ca3e7610435bd023eae8f refs/pull/4552/head -db02b8c832019818a1d7d58a0aa55ebaf974d256 refs/pull/4552/merge -94bd361823d173e50a52da70eb628e04a4984462 refs/pull/4553/head -334ee6d8c7f7b12db4a67ef57dd03e3416c2bcc2 refs/pull/4553/merge -e65c500f2dd0a3c7250ca6a63c0b114caa9b403b refs/pull/4554/head -697c32fb14da0e2bd87e63731cd141da75f2ea7e refs/pull/4554/merge -ddef08f3662f7e8a5bcc2b07f38cf3b160a53de4 refs/pull/4555/head -db31f5627e1933ffd9f38f71197628f4bf5de512 refs/pull/4556/head -8d985df4e5c6c79b24c0e6ec227a6246021092c4 refs/pull/4557/head -4911b2ee603043e7d162d2ec71636e44d37d7d5f refs/pull/4557/merge -497f17f923560dafc179433eacbf3e302d579591 refs/pull/4558/head -eece974dca795169f0c453cdd5c6bed8a95e7780 refs/pull/4558/merge -6bb2e04e4849df047fefbc5a18b0b2f424071d56 refs/pull/4559/head -53f1521c0eff282853bbf38b93c946bd555ef5cb refs/pull/4559/merge -16de674d5e818941f8087b3ffa2003c705fc6201 refs/pull/456/head -11fffee733c7eb9b50c33433d8b6c9ed88a4b062 refs/pull/457/head -0947eba15d7973ebff6effedd9700dcbd17db2cc refs/pull/457/merge -5a44beff332700c674ecd680286b7ca8b91f21e6 refs/pull/4572/head -dccd145efb37f197e9387be996ebd20fa7485fa5 refs/pull/4572/merge -bbeda1b0d7ca78ccffd91fa5bee6b7d1670eb86d refs/pull/4574/head -d98d3570961163c048aa1025c1a0574b99f63602 refs/pull/4574/merge -05a6833062fe945a69a9cba1aa552aaf9840e648 refs/pull/4579/head -9c730456ffa57aaf16e39614c44c657db3b6143b refs/pull/4579/merge -1a0cc8c42f3cc732d310ccf0372957cc59ee9cb5 refs/pull/458/head -2417bf241d268908de5798c1eca380f903a83be2 refs/pull/458/merge -cfefdb8f8a01e332211185737e4e31b8cb3f7633 refs/pull/459/head -0706fa7435d87f40b5fb55ed6443ca224ea29fc4 refs/pull/46/head -ac1799cda1df2fcf429bf1757b2ba14b914e4acd refs/pull/46/merge -83dd6383b05e8ccc8ffa116b4b1f81852edde9c0 refs/pull/460/head -081f6f147bf8bdde48b5cbabb05518121a4bbad3 refs/pull/460/merge -df2b95edf8ef2718d05d5a191dff1837e1deae1e refs/pull/4600/head -6d8ff3f3c60a6da1c7e20fb582562ffd2fae96c5 refs/pull/4600/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/461/head -e08260ddc8fa6ad1c9410cdf3fbc2f00b6406010 refs/pull/4616/head -da8056618395ec626e81b4a1012998dbff203137 refs/pull/4616/merge -794af6ec30887ca391e403abcb73bf1b30d318db refs/pull/462/head -5c603e64e895a8fa13aae36c7abd8459c385a07b refs/pull/462/merge -76d5f176eb8e59c429ad165640fa7ee1bdb5207d refs/pull/464/head -5da5069d10474e7059d23d1967a603163795c6db refs/pull/464/merge -39404c6e6dec4d611b328aa7111bd98b5b0f7ad8 refs/pull/4643/head -2a6131cdd1e1afaae20756f26c76aa82c568ff4d refs/pull/4643/merge -097e0c91d729426f2917e5565d84c3d88da7a186 refs/pull/465/head -2593c103bab8df2f29526ec8caa10bfcc5d97019 refs/pull/465/merge -25ebdf9b2f761470a6a371eb9163b336986337c3 refs/pull/4652/head -8513d6ab5336db284c646711ebc0df717d05dbc1 refs/pull/466/head -a28587c2642f9284892d306cd0f102a985f16608 refs/pull/466/merge -14321036d2b9f88d85961aa711d7e56517f6d9e6 refs/pull/467/head -bf787e7cf4ba9a42178da354a82a49322c1d2105 refs/pull/467/merge -69a78b03ec5fea768137cb15a4df17cd97de63bd refs/pull/468/head -b22fbe7f2c5a11d7e95f8e977ea4896b8436db09 refs/pull/468/merge -7a04583cfa968350e99d914e7e39e33842d99ea2 refs/pull/469/head -a7cbf680a895fb4462de2add73ac3f3de86a4053 refs/pull/469/merge -4280fe80c71370e4f65e24f70e2782fad030ff10 refs/pull/4690/head -b0d9e8090fe643a639b2a0f01e576b5528241539 refs/pull/4690/merge -9ff9bbf91ba7323b45067c69063e4f23127a2e71 refs/pull/470/head -f9bcb55ec3b2f3398bc9cd1d32d5341fcf4e4aa0 refs/pull/470/merge -74d54625220c776ae2cf143add78bb03ce1db4ac refs/pull/471/head -dfdc940db6f94679a43d1125c82d661bc19272a1 refs/pull/471/merge -09d65a641561af500fe5dab92a2a6173524af880 refs/pull/472/head -0c8866603b45dfb1b195df7aded5128b976509a4 refs/pull/472/merge -9379050a834e15fd0cc53b989cb65d97a3cb16b7 refs/pull/4729/head -cc0b3656ef8c15ed9c06edc19d7d54638e2cfa4a refs/pull/473/head -6a5536a65f5548ef5f05777179cfe025ff85d042 refs/pull/473/merge -fb7db15bfc3ec3a9b634a0a6300e2a6f0db0c88d refs/pull/4731/head -261dd9818380c2d39c63a6527600dc44740d616f refs/pull/4731/merge -3f9d46affaa039861a2db7a5a022e7391396b7a1 refs/pull/4734/head -c2a84406733089a4076c19a66de151ca245ebd4e refs/pull/474/head -d784f61454547292e3a71d82723914da0a7beeb0 refs/pull/475/head -b1cdda5c07144b386436973adae40eb719960cb5 refs/pull/475/merge -5e9c95eb3109b0414b0413be3621205daebcd9cf refs/pull/476/head -5d4d297960a11b15f733c35888524efeddd75ad2 refs/pull/476/merge -1feb0ee39495e6c644a53bc7e1bf54a7a851ddf2 refs/pull/477/head -0ce938668da716d92e06157c8ea26938e60f1158 refs/pull/477/merge -ee4e759039002a8993e969d556ffa10219055788 refs/pull/478/head -1ac1758f7851ad6d16f980797987945287eba885 refs/pull/479/head -f95020b5b83e1706cda0732f6b907fa4a5485eb8 refs/pull/479/merge -4a2edf07cf17281deab6f0f05608bd01d5f6f4eb refs/pull/48/head -4401e9f66b6e67919e5afaf0f2f72848475587db refs/pull/48/merge -da93fb1c45cd7d179883fab301ab1a44b340ab80 refs/pull/480/head -dd9a1b9d7479b57b6896a1d8160291a5331ad4c9 refs/pull/480/merge -ba32e8eb49b39819478531e7260a72df6f3849f6 refs/pull/481/head -d48f63432c50289f90c8d51f7259d038debaf53b refs/pull/481/merge -7787093f877aeeadad391a8a86366bdfdf78fb3f refs/pull/482/head -1e78a46d2e6a21488fd734f7e13063696e49d735 refs/pull/482/merge -ea0b02d1a1aacb08feb4b5e4da8b13ebbbad9cb9 refs/pull/483/head -a233c4f4a4461e2d02f5317f95bc24ff3fd9c64e refs/pull/483/merge -ee1e0e4bd591f70ba0d89322e08936af3d4356e5 refs/pull/484/head -543441bef09d7cdf11c43030a40f8a71b921b43b refs/pull/484/merge -ea9e2a0b44f3524439f9e1584a7c210ec11e9c72 refs/pull/4846/head -b57def0add4637075c5ebb7f85ae1d87d9e1fc52 refs/pull/4846/merge -1e41968d40bcb12b208842f270010f6737847809 refs/pull/485/head -69629cdcf80930c5fa4344799d7b4ac8609c6151 refs/pull/485/merge -85098c11fd6738f0b8a246de073ae88fe9133afd refs/pull/486/head -a8afa6d96720e53ba1be62096f8fe5f1191c7d3a refs/pull/486/merge -c346b1b2d4778a8524c7de7c67d83ec1f7bf1dea refs/pull/487/head -bd49d3fa9152e06774eccca213e7b98c81f1a52f refs/pull/487/merge -1d2605e424656e105510194dcd6b76fbce059cae refs/pull/488/head -4b730dba6fd80f56b9d78d4a6d52e89f417aa6bd refs/pull/488/merge -db6f5fada1c1ce5defaf1e074020f05d4f9e9706 refs/pull/489/head -9f508149068c32acbf1d8848885efe980a2bb3bc refs/pull/491/head -d3deaea6c2cd542a2bc8bc235595ff6fedfc37ca refs/pull/491/merge -37c9521af907c5ee44708c1557af25e2cc6fbdc5 refs/pull/4929/head -7b6bbf9fa795432c736ceecc41a82b8b22d864fc refs/pull/4929/merge -a9b46302b25a30ad2976c55b890f6f4c1a49339a refs/pull/493/head -c462ab47cf3fb53e6b542cebf5dbd13337f386b5 refs/pull/493/merge -ac5192408bb82b53edbe53920335d8f1df302a87 refs/pull/494/head -289b46a095363252593a872bc68b59710a43e430 refs/pull/495/head -1afc8d71d68deeac4cefba3d3e86048551779696 refs/pull/495/merge -7794f1dbfee00985fdb53450f79a5b929eae946a refs/pull/497/head -6565e0756074b5fac6da14aab2455df21b00714b refs/pull/497/merge -685d39860e6fa5462803d0ef29ac167c16c323b5 refs/pull/5/head -ef4c930d5a1e09a5f97963560d1201773f66cee2 refs/pull/5/merge -60d60eab93807c68d9156cee3638b562efdf6495 refs/pull/5022/head -c2151af3cfa3a1041d9e61f83255dfa475871afd refs/pull/5022/merge -b3cbd5bbd7e81436d2eee04537ea2b4c0cad4cdf refs/pull/504/head -d8c727a7dca7794412c8208bf72c1468b45255f8 refs/pull/504/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/507/head -004b16b7dc7655934aedb489bd6670e55392d848 refs/pull/507/merge -0730dd7d2a8cfaaab01dc8e43ae8e475698999e3 refs/pull/5087/head -ecf2385010797dc97f6acb974038943057adda11 refs/pull/5087/merge -68d3e6dd00a1261bc7a540f0cc4d4286e9e55e80 refs/pull/509/head -bcaa665f399a32e77cfb567c5f3b02c2daa62441 refs/pull/509/merge -ba67e6d6a5a60f4135b3460f9b9d3b4b52398ade refs/pull/5098/head -214e74dd8c70e768cde3e0a996b8e5fc4eaca1d6 refs/pull/5098/merge -c5f9ac24920db44394d01ae0234eccc743810ddb refs/pull/5119/head -c13f8d0366d19a7cba1a8fe64d5037773fa1f317 refs/pull/512/head -05bc2e5235ac6b1d7f77d453bf43bc7450b8561f refs/pull/512/merge -9949b5ed4ab977f82b62315f099eb83aad807837 refs/pull/513/head -7e2bb774971574adb107c1b6c84be8e9f4fc5a99 refs/pull/513/merge -fe35a290c6a3c836dcda41bc4303961a066591cb refs/pull/5168/head -c074657a6e199e8b9d5327ea147fba7ac69c80e7 refs/pull/5168/merge -181d603549ceb2a3432c32cf73cad32db369d1f3 refs/pull/518/head -daa5ed8ab211ef18c79bd111f30a525a2aae359d refs/pull/518/merge -27029feeccb28454588626b6799f255f3cab1f23 refs/pull/528/head -e78c5b41053da11e79914d2a615a3400bd36babe refs/pull/5281/head -2109b69e9018e2316e45f3915fb64ff544f00a2d refs/pull/5281/merge -6fc5eda203139b3ab731d360ea02c44cf0779563 refs/pull/5285/head -2e1df1f400d72d767a9a0f96ac62c571507104b1 refs/pull/5285/merge -e83004b65bf59f59ac458923eff9e47d67b98dd2 refs/pull/529/head -8448504ba8009729e48db53cb3514337c24e812c refs/pull/530/head -fa6742fa3b7b1cc3d8a34550bf52d8cc33536d11 refs/pull/530/merge -9961c02280db5fc88d3d1644f0d2055e54257ef2 refs/pull/531/head -a5312534a9b6acf3b7ecde994491de74c62e26a8 refs/pull/532/head -8ed84c3e284884c142f5e467f98747459ce3f4bd refs/pull/532/merge -bf4fcfdc2bd6813aa49fa504e541000504fc2680 refs/pull/534/head -505ae63bd40f7c3f2da000e4a42c5a3e80342195 refs/pull/534/merge -433ef3498c37a9c4052374dfb34a50bb0c97889a refs/pull/535/head -8edb03319d842b97765a96530e290aeef5316dcd refs/pull/535/merge -806d81e3ef3829d165c878aca74ebacddea7e0bf refs/pull/538/head -565f11f5bb4815246ceb85b6d6a3fee072aed28a refs/pull/538/merge -08fddf2d76031f94d89e717ddf964167003b2e38 refs/pull/539/head -1ce2538ba40824472d821a76dc449fdcd3a204e8 refs/pull/539/merge -dd6423bc92aed7243f7849a4112d20750a48c6cb refs/pull/540/head -53c2884ada6d3f2ba561f55848dcb220f6a4a453 refs/pull/540/merge -90d34df9131b25f375d135e14677d15c208dd9e9 refs/pull/541/head -743d7f201f47d1c95cb085a72798d01d48011a55 refs/pull/541/merge -cedf67051e49fb094ed9aad754033f227211376c refs/pull/542/head -cb0d34d9b524b820ae774e6a120b58508badff2c refs/pull/542/merge -e025de27c224e71e038a139d5d680158cd9aad0d refs/pull/543/head -69f2e39e64427bffd7d510525d533bc4bb3650a7 refs/pull/543/merge -90fd0245a629125e243d844be4ef82ec25f8a68d refs/pull/544/head -d52949dfc39a84c2933e6f8a30dbb3432d958dff refs/pull/544/merge -c9923903ae3ec2a0de22dd9207731307c11175b1 refs/pull/545/head -4d20d3517bb679a73fa704e5acd8efb4bbfaf9ae refs/pull/545/merge -c74f0e1630d52d5fa5bab7e785deee32fceec67c refs/pull/546/head -f23dcb475b357e3035f900e5ce5e3157a6598608 refs/pull/546/merge -afa4835048823b9f2ec568631c8037e3c396d06a refs/pull/547/head -7286cde50fb9ca57410d518fd96c8270e59a9885 refs/pull/547/merge -a569542b6d5db1ea5523dd9ceca581135623aad0 refs/pull/548/head -c38b2edd9c00006bd2b3380d72f09d50ab9efeb3 refs/pull/548/merge -a61ebe8b9935fbaddb05d06f0ccb2ec7e2915c3b refs/pull/5489/head -b9e5bb9491ffa8e2eb847565edb0a25b7659c930 refs/pull/5489/merge -0a1bd8df2264532b60eec87e828b1de878c5bb20 refs/pull/5504/head -adda1b5c9b4b3d1f07bf5451df2032e4eedd4e7a refs/pull/5504/merge -596c10248b9bf1532d4217db332e7408921128f7 refs/pull/5515/head -a6779cc42cf69609497b9cb0104d12330d5b8508 refs/pull/5515/merge -d936410892db2455f0e1501f5486309f530961e0 refs/pull/5516/head -2b6e0369d78e636f1428845f90f1ef164da44963 refs/pull/5516/merge -1e6e804b2c464b33f8a3808d7b6eb70710b13908 refs/pull/5519/head -892a2b6de6f392262e0c1087d31ca00edb39ced4 refs/pull/5519/merge -6d3b3a136d992f48f817fcc1efe7717203ffa9ee refs/pull/5523/head -1a833999a976832c844e6f1fdd3c77f9076b3052 refs/pull/5523/merge -840d1d5ac0fa21811526d460f06fb085c9352d7e refs/pull/5529/head -728bdde5f0bd38467f5234043883fc430334782c refs/pull/5529/merge -101cbe74f3a81712907a6e43c709c732a9b65f78 refs/pull/5532/head -66229d98df8a8aea4a2ea2c29a7a00ceac88fd46 refs/pull/5532/merge -cf159b7e364a3ea4e3e99f2cd3cbfb5ec7f5d9fd refs/pull/5538/head -798b5279509b40273ced13299b46544727c3f403 refs/pull/5538/merge -83a684b648d822fcfbe770fd98489b3c6a64872c refs/pull/5542/head -13a61fd047b4e0ed66ff5c94eea0e40f9eaf3de9 refs/pull/5542/merge -b84645fbf548213721a853fe44b5f68eb9826194 refs/pull/5585/head -15ee8bdd91149499bf79760969edd74c4f631eca refs/pull/5585/merge -27ea846759ceef2b15598d5be147a7558cfabf3f refs/pull/5588/head -f989174e14f4b184c9c1bf53551221799bc03e67 refs/pull/5588/merge -dd03e81180458828e416094be7025a2911ae8868 refs/pull/5591/head -36197efb35d2ece94ec75239437e525944adda59 refs/pull/5591/merge -7b534776f26f353e563cb336df11cefb4a81e7b4 refs/pull/5595/head -c8e0bd91016ca63ba24740753afc19d67cf879fb refs/pull/5595/merge -c7a59487e480bc13e93e62249a48f00453ef9a93 refs/pull/56/head -d5a67d46cfe62751593d253ef497d94b2247513c refs/pull/56/merge -325629b96fb08d2c9d7d4b602171336f8b1f7819 refs/pull/5603/head -d406ad7742cdec1ed858107c965600c6203982d3 refs/pull/5603/merge -b3e6f124d6d5136a0c2256e4b3525c272ebb284f refs/pull/564/head -20b06e6b5a732a5773c6705836fec9419f8f7c02 refs/pull/564/merge -e70ec6753d9f54c11695188a52f4a8b94106b490 refs/pull/567/head -99af10c10be7d500b5660fe8e2af47feb1ed94ea refs/pull/5671/head -62e3bbcb75c813cbb50dea79e28d18201cfa29a6 refs/pull/5671/merge -03a811d21dbcc23226ac98134e6aa8db16f13b81 refs/pull/5672/head -2e5dae0ca210b706a56c7972e4a196f811b36831 refs/pull/5672/merge -5a1a2d9624412018fff634701d1148e89060efae refs/pull/568/head -caf1e580ae348ad02708fe79fba933af26ca9398 refs/pull/5684/head -6e5845ea688b670adfbbe01f8b5ed360403fda5d refs/pull/5684/merge -10f76e5be0021beb8b10ade8096cb8b3428725f0 refs/pull/5687/head -975bfec1aa2ddfc166a22a5843e5d60fc07e982c refs/pull/5687/merge -f99bf45a7a1ba84198ac32e4a3b4489c64be890b refs/pull/569/head -35f2f1b3259683e228a822a3862a939c76801461 refs/pull/57/head -cfb8260e705a41fa1b3c1c5262a7388e0f1a1972 refs/pull/57/merge -20ecaf42c20b6d3fb23ffc4499666627cdb9288a refs/pull/570/head -c7eff28bebe4e8f7b21ea797813360e65ae12b0c refs/pull/571/head -91b98cb45366a489b850db05ca754c6f5f543a21 refs/pull/571/merge -066501b022d63aac6563d64d356298949dd86f93 refs/pull/572/head -660f4faeea50eb60a918374f0ba69cafbd958f42 refs/pull/572/merge -fe71bb94ac034c23c081740553ee809d2e982a38 refs/pull/573/head -d841e3814800f5269eaedd19df2457d34f80b569 refs/pull/573/merge -d169942df7bae45d40d88860c4e17df74e9b087a refs/pull/574/head -f1dc3bf82a6bd50f8de3e28bdf129d063229d711 refs/pull/5743/head -bbcb09141e46f5a71edd2ea589c1bd1a52dacfe2 refs/pull/5745/head -653cfc0b6c64c9554a237b882dab2872d1ebd55a refs/pull/5745/merge -23ef8725c262fc9392a891bae422ed723b4aa38d refs/pull/5748/head -9e5391a39c253c4aa2ca1ffaa1c8d3beec44094b refs/pull/575/head -600b4a65dcd2115bf70ec8ff446f4b0fa58cd683 refs/pull/575/merge -06bd27c7cf4ac74b78058e5ef3ccacb44211ac5f refs/pull/5750/head -9984211c282ead56aa7c27d299d0001e92dc540d refs/pull/5758/head -0e16d01a0ddcb1413a4b7349406f0f567d7473d6 refs/pull/5758/merge -a4992463ffb78182a04fa1bc93b7fa03ef16f3f8 refs/pull/576/head -f466035652551fc7feebdf15d437d43840a28e81 refs/pull/576/merge -88174f2512176f6fd11778479f3c7d948afc4e53 refs/pull/577/head -faa20a0125d8c0d2a294d129c4a10ae3da15c7b3 refs/pull/577/merge -443ed4344f928282d9d69486d9223828fd26afdf refs/pull/5781/head -8f0ccf2224ccdb8d34511105adc3a61baff81f15 refs/pull/5781/merge -78a193ba34ca30131704917ea787639f152792e5 refs/pull/5794/head -4bcdfd64f622a89acf6e211ab3546d19204b31b2 refs/pull/5794/merge -efe9e29e571936a3e3ce7807389a2426f5bc2207 refs/pull/5798/head -42a12c54c8067470970e97b3f770a7212be971d2 refs/pull/5799/head -bda462ebc2109767250728e2c4d0db6b419ce3b5 refs/pull/5799/merge -ab1c2a91d835d5d18432b488bf74d167c3c9e4e8 refs/pull/58/head -2191d553c9c302c90d7bdea6597465309262e2a8 refs/pull/58/merge -f7a04b30c8e06abb7f49952f689fdb812d3ee088 refs/pull/584/head -5e06bade76b6bd56419eb79606527908167e8027 refs/pull/5842/head -e1fd5d5a5f25271946eb77d79bc0bb4e6f3abbca refs/pull/5842/merge -f7a04b30c8e06abb7f49952f689fdb812d3ee088 refs/pull/585/head -f7a04b30c8e06abb7f49952f689fdb812d3ee088 refs/pull/586/head -554d8648d34e86d79d6ee8cb9ed80e3f8b27c5d9 refs/pull/5887/head -3b0ea9b13ae54b3ac5eb487f94da1c518bcb3ca8 refs/pull/5887/merge -a7a74fe3b7ba38235e754dc715289ee4c7fc501a refs/pull/589/head -e9984e1bdc5cd890913a68fe3f3b037c8e47d7e8 refs/pull/589/merge -141c55472cddd60bbd2a2d7456fe85aadfea5357 refs/pull/5890/head -9dd856c64d1f8906690385b1a3d6d6023e810027 refs/pull/5890/merge -db7226d91cef5e137d9d3ce3f1ba59dde47d9458 refs/pull/59/head -8f7882308b8747275bc241630e9e5dce1c63adc0 refs/pull/59/merge -4b2c34ac2ea11d02d6945aa0c8b4130cc679753f refs/pull/5900/head -cb73b6119d78a4b9f256e9ded15b1051da56a5d0 refs/pull/5900/merge -b5f9a4b10f091782440df17b012b57b29ca49a1c refs/pull/5906/head -18d277b94bf3f7e60a96d47d59254a3c0297cb24 refs/pull/5906/merge -c18e679c49379ce719f50563daa6650f871c3274 refs/pull/5936/head -40e65059bcd472d655920ebd729d654dad395b11 refs/pull/5936/merge -fdcf31ba492bc98086e0ed15ff4c4a80a2c38362 refs/pull/5944/head -7efc6dbcb7a4cb877e546882f5fd8e33c4668c55 refs/pull/5944/merge -128a96b3a9461580cb5811ea32f1226dbadc38ad refs/pull/597/head -9bcd59be49c28eafe179b93e29815850b5402c08 refs/pull/597/merge -57e0b21ea3f571edd9c65790e4f902879d1d1de0 refs/pull/598/head -762941318ee16e59dabbacb1b4049eec22f0d303 refs/pull/6/head -ca63dc8d9a40887bda7b670c5ce947b84e600de7 refs/pull/6/merge -2a63f5500c5ba287dad2f627f01b2c9c52eb2f61 refs/pull/60/head -3dc2d9859374370289e7cbe27e38efb414e1c1ec refs/pull/60/merge -9625b688f02946cd60d938bcc75c080b77dd51c7 refs/pull/600/head -616022a3865cec0c15ede35816f455db414668d0 refs/pull/6001/head -8fdc47b662fdd68266615e77381ec8db41afde2e refs/pull/602/head -ec251aa0a8ab7fb130906b570c740a0aa7f13025 refs/pull/602/merge -88c0004e41b2cd6f87b2ea208242f61910b56be9 refs/pull/603/head -3539f22bd231689eb3cb35804be6480589ac0c5d refs/pull/603/merge -f6d7fff3c95ca82d294bebed4eec6d00385caa22 refs/pull/6034/head -4dbe525749f5bc4d795117812c29c39464513324 refs/pull/6034/merge -e7166ed462eaf7cf2142afa0c852877ccd1e9031 refs/pull/6037/head -a2367ab0544f527b3aa712ad2274b0703418a395 refs/pull/6037/merge -a46c634fb11e345dffefe94c0e63c77cbd801c4b refs/pull/6038/head -a46c634fb11e345dffefe94c0e63c77cbd801c4b refs/pull/6039/head -1ad0600f33de5986623bb4272233e6e7095c936e refs/pull/6041/head -a47a007d16010283f1b3aecdc4495032d76a9f6b refs/pull/6042/head -ac3bc3a92050962346a5aff097c56dd3b96ce848 refs/pull/6042/merge -64cf8505fa2e807f3e81b6a158b2bf66012f35af refs/pull/6049/head -044d688022888f25825bce3548cae8698b1fb52a refs/pull/6049/merge -962f3d39a8b0910d6830e61729b77efa32626ae5 refs/pull/6056/head -e52f725f16785f0c9aee33c7184c6d4beb73ffe6 refs/pull/6056/merge -fbf471fde413c058e79432cebce0ec7d4d1e0ec2 refs/pull/6069/head -1325fde3209e2b2f1c463f797be68bec6415cb51 refs/pull/6069/merge -5f2561424f92ca76ab71a79c1be742628108a890 refs/pull/607/head -8cadbeadc1ccf097dcf5e5c3850eda7b4a1b8b52 refs/pull/607/merge -a0dcb796dbda31a2068da7c23202155bb1e58f4f refs/pull/6072/head -876abb92320c6c141bb6955dac3a396d395291cd refs/pull/6072/merge -84660748f18cb8a9238bafbc4da10e1a35533042 refs/pull/6076/head -56d6c30733f25de8528641af680ba7557c4cd29b refs/pull/6076/merge -880a058ea427271e82bfab200df27929f613568d refs/pull/6085/head -a0e49ef9cda08d0743345898aa08c5a37318b06a refs/pull/6085/merge -2b3fd59cffb63670e430c4c813f642093ca568ef refs/pull/6091/head -2b6dacf921bd8d935654655333195c9d23ddc368 refs/pull/6091/merge -7e54f652c33aef5ebad24334381fa00b83fad1b0 refs/pull/6094/head -0468e037d3f7160ef8304f00167b4c73eb674436 refs/pull/6094/merge -1164d6418543662aeb9dfc474c9ae4a44f80ab32 refs/pull/6098/head -d61cae65bd412837b997f3e325086575626ce879 refs/pull/6098/merge -1d7687996b09d344de89aee04ae8566f3a6a941c refs/pull/61/head -0edabf81c0f643accf6c1095a308d10ed6b47e15 refs/pull/61/merge -1f9181819bebbb63531744dda0ae4010ffd86226 refs/pull/6130/head -e3b0b6b58fb4c9f552b2e3b75ca0419cba151f47 refs/pull/6130/merge -34a8eb6edda7f81056e04c24613165023aded5c0 refs/pull/6138/head -768733ef8570ecf8ba3fbc10ad4a2fb0319822b3 refs/pull/6142/head -19fecf969e137b0bdd82f101bd96f93479553a2b refs/pull/6142/merge -7793897e5ba1c0219fb7cd1dbbc96c3e90015090 refs/pull/6147/head -19f7a6fc5fb63fb21c9b963f0f086d6461209195 refs/pull/6147/merge -fb6879e9e29ebefc7fcf7fe9339723ee129fd927 refs/pull/619/head -e8c7706c5a76331f0684cb8f6030793dda06524f refs/pull/619/merge -b75c559d771122cb1e4cae2d36b4c6b16d63de2e refs/pull/62/head -8e638d1957261a0f5e9f3cc5f8e9bb95267b166b refs/pull/62/merge -bac12c52f9fecf32147b59909f019a191192e5c6 refs/pull/623/head -0215436293bc41b6b512c85816a6135feb10bfde refs/pull/623/merge -8984f4d3df6cb26d7665eae1128d5799fca1e695 refs/pull/6249/head -2441ef17c4e5b11b9a09fbd96a01f5746d19df97 refs/pull/6249/merge -ad78ced01fdc85496fa507a5e7384ad3a8094d74 refs/pull/6253/head -9565438d1bc491be8c3c1541c7de79e2f4813fc6 refs/pull/6253/merge -a17e92bcade0b19adf6e9301b609e60c76126afa refs/pull/6255/head -995ccf0e63f7b622eefd09ccbfb66bcb6b27e7dc refs/pull/6255/merge -133d1e02906e6bd13d6af62765bc8db606481333 refs/pull/6259/head -ea99c01fa562bddebbfd0471e87ac9e24fb91221 refs/pull/6259/merge -26d52cbc941c4a8284d8a8a0da83fc30f0136a79 refs/pull/6280/head -699e75de21131b39b60db29da582f05eaf438c54 refs/pull/6280/merge -a8740e758d451018139a3589b7329838bfe07bcf refs/pull/63/head -a651cfbd604e8a3f306d8293d7bd933348f42e38 refs/pull/63/merge -ba615b1d4c8099aa414e1443112403f8e58c3e84 refs/pull/631/head -791e56e82bd1d1686d681a559d525718f7666910 refs/pull/631/merge -b1cce6651bfd9eae6d1f7f78ecd1d30750aba9b3 refs/pull/6313/head -eed1c515ac669b07e795dbf775cf60d0472e2d6e refs/pull/6313/merge -013da868e78931c9b727ab7c6ef1e54759e2ed38 refs/pull/6316/head -9f2efc617110917fbf620baf442fe4ae878b3e16 refs/pull/6316/merge -7df12369179a5f39c2cab27cdb0207caeb6294a1 refs/pull/6333/head -160019f0e06d9948b15124afc883a14103afc1b0 refs/pull/6333/merge -e3ab9bb2b4ae724df217d89c9fd55bc464e4c335 refs/pull/6334/head -a1060e1df4c7615629ae7f9e9e29ec337ddc1cf2 refs/pull/6334/merge -d51404465f8c3ba7d6f03106e1ea6de625ecb9af refs/pull/6340/head -4dbb440a5caa62826d839ee470563a34361265ed refs/pull/6340/merge -52dc9328288168dc5c3f854924fe001976d9d29c refs/pull/6344/head -4527c37d6ae6d17107418654b1abcc8252ad1c07 refs/pull/6345/head -516625ec6c76ac8531062c9b4f4e9b1294952b00 refs/pull/6346/head -1c11c5b0d72642ac06532eebcdf0e1f6238534d9 refs/pull/6346/merge -e25b2b9d81603edac7d6d58cddecf3cb030eadac refs/pull/6350/head -f7cada441726750bdea73c59ca669226e7a6b54e refs/pull/6350/merge -a28c7a4780734acf1b7feaf6b365a7586a15ce51 refs/pull/6360/head -3bc1468b176e6622ba9451b37a933c864d0dfd66 refs/pull/639/head -661af8f3fa7a33926662c02a5252a12bd644336b refs/pull/6425/head -75a5b5973e343f52b71d55b873d66fd2cc8aca7e refs/pull/6425/merge -0b006c7cbc289b593c2b0582bd8f28bfa896748f refs/pull/645/head -be19aace45bf825fcacb4b8d5b8783ca97c092da refs/pull/6460/head -097c7f173e0252cd46c21c8bff6ecc08e1b9917d refs/pull/6460/merge -8ecb7149a65a1cb7f16971a6b98f8ba98c59e642 refs/pull/6466/head -607d0ed3036193db63a788205378dae43740e434 refs/pull/6466/merge -64bb3c63cc9ab3a80e33445cdf2b994b9a70975a refs/pull/6467/head -9c2944eb46252694dad135c756b5c13c95c92a50 refs/pull/6467/merge -d050c171157f2873f5471c6ed3859954cc51904d refs/pull/6468/head -d050c171157f2873f5471c6ed3859954cc51904d refs/pull/6469/head -98d7930faf7d914f88d147a5c071559c2bb58f77 refs/pull/6469/merge -4fc4c0c1fa756f1da1f670dd9e26f0f4655d61ae refs/pull/6473/head -31d60e7fce8b3d5d95c130aae8f5573ab2140161 refs/pull/6473/merge -512d25aa8bc11b00d5a0354aee50f291737b7fad refs/pull/6474/head -d524115c930425c3107200d8ec1bc837399babdf refs/pull/6474/merge -64b12b8e7b50329e48dc290b625ac63131805476 refs/pull/6491/head -764d08f699170df4a99a82e7825d29833b4c38ee refs/pull/6491/merge -3e67fe8a14428a650844c8f31f330e4028716555 refs/pull/65/head -08b24304ec639782cd4fad16f0d02ab3d6f44471 refs/pull/65/merge -65400509bd8c59419491f5c1a901b5359986b74d refs/pull/6514/head -aef01a893c881eccf9669f81e65b602a1749a943 refs/pull/6514/merge -6a7989ec50fc6802f29ed7bf889b462970a24071 refs/pull/6545/head -088e9994f00b602d3cbaae19ca93cf3a93db24d4 refs/pull/6545/merge -5f9eef078870bbd4e1dae5a9cbfa9edeaf47fbae refs/pull/6551/head -3a4218545f5767a63ce10bb744c60b793e6fd295 refs/pull/6551/merge -9ae3aba49a7ee81b6b7a6e1abecc17ea6bc46b07 refs/pull/66/head -20917a823501e5978d8ab689cfc7ce91d713569b refs/pull/66/merge -493ecd20e8279e83b6da409fc454e7081e9325cc refs/pull/6604/head -c8e506e676772241e3d1cf34cb9d5cc261bd512b refs/pull/6604/merge -fda96ad16e8379301cff694a715460046378df0a refs/pull/6612/head -57a54e18a912869095275fbf70af9e87cd598c89 refs/pull/6612/merge -98f4e303850ec8a5ad7134ae38767fcbb7455c1e refs/pull/6613/head -54bb83bc500229053665ef550e42d0ec4358be72 refs/pull/6613/merge -263628809619e3a15ebd53ad6bbfa9ec2eb28ce2 refs/pull/6616/head -6f1c77eaf765af1f794bd52c6d19220398517fdc refs/pull/6616/merge -ad91d4bab2c076d105521c7dec1b2d0ead421da7 refs/pull/6617/head -4c6126619e88fd41d939d4690cf54d5c355a4124 refs/pull/6617/merge -f9aeac42455c4097d18d2d5b7c07e1617427c3ab refs/pull/6622/head -3a957a023fa72254b791331b97595545585f48ff refs/pull/6622/merge -d08494ff89eff734856d11c58e5438e97b5d4617 refs/pull/6631/head -7ffd7396259f50c9246c515f3d84b06823e21da5 refs/pull/6631/merge -8b118fe76bc0f29edb339306df8369b7e99befff refs/pull/6634/head -a48e737e05edf3e7380f30b343e935e4c4826621 refs/pull/6634/merge -d2e09b4d7dc99daf1c24a887d9ded36697dba1a0 refs/pull/6636/head -6f57bae4df987af86ecfb565b42d2d6ee9a2b906 refs/pull/6644/head -ba354b57dabe0707c1c486b89065f1b5801b051c refs/pull/6644/merge -af9d15495865f3d9dbf0b56fc78d0a7e615dda37 refs/pull/6651/head -f589c823ca4b56cdde959232416600688411af7b refs/pull/6678/head -c399b5568600b652c440f95663d75e62eeb24c4d refs/pull/6678/merge -43f6ac90ec832eedfdc65d61856a28951d937a3d refs/pull/6679/head -89dd09ea84521024b571548795ed47d5b2a2d978 refs/pull/6679/merge -202e0ed6304401a442ff54e7f8b004af5cce8219 refs/pull/6684/head -b5f212fa68193650ab8687cbbbd7b938143a098e refs/pull/6684/merge -6177476acbce8a6c0b39ffa837b32d34d99656d9 refs/pull/6685/head -8648f91d86b879b56991f001f7b08c9540cc6103 refs/pull/6685/merge -ffadd2372b902538ff8d127fef9f6f5e7bc982f5 refs/pull/6686/head -aa7c1d678383f46b881db71c6aecb53f24fd6407 refs/pull/6687/head -70ec772177adb916735fc7bab1e2debe5debcf16 refs/pull/6687/merge -96dd0736b69a6f7a503276742549e1971171109e refs/pull/6694/head -a69818fa2dc7b0bba5ff34645ba839def28293d2 refs/pull/6694/merge -36403cbf8448ac3f8f10c90b6697c8ba381992b5 refs/pull/67/head -317b38739ce9fd6b8f30d0a4086af12d1fe65bcd refs/pull/67/merge -82512ad90f90b1ef00c291e3da6c2854b5212c43 refs/pull/6704/head -796d40f9c146ff96cabcf2d2d503f9e0e088667e refs/pull/6704/merge -1dfe0eb6dc6b00b95c5bc80019657ee9c05fe596 refs/pull/6789/head -7187b4956a2d7f5d3d650eaafd03df1ccbe8ef14 refs/pull/6789/merge -7917b7c4a175dc4170df7f5d913baa598896b2fb refs/pull/6797/head -cac6ab38cf50c994db3e408b596d788792c7f3e7 refs/pull/6797/merge -fc2ec3cdb26ecac36f7c9d15a17a620189035198 refs/pull/68/head -efd8bb349ed60270a3ab973c6991028affa05cc3 refs/pull/68/merge -a5ba5fa513893ee947032e54b4cfa4d4b36f42c8 refs/pull/6804/head -2a46a20c7346d916911e4b2683123535bab94111 refs/pull/6804/merge -a690dc18a1ae70a50076ec1cb8caa003a1408f22 refs/pull/6808/head -628b3127ffae803c8cbd39d7c609a8c41ac0e6b0 refs/pull/6808/merge -19a6e569b32eeae60f773161bc4f1cf2392be8c3 refs/pull/6819/head -ab39087513a6a3d13902fe59405c399074f416e4 refs/pull/6820/head -46ddb9696b6c22b725f58cbb31b89cb808c12ce6 refs/pull/6820/merge -d89684b2457d1d61f00b6cdc870fd46f9e4a567d refs/pull/6839/head -81cf7d5d8ca9086be27c06183644129f37cc9ca1 refs/pull/6839/merge -d89684b2457d1d61f00b6cdc870fd46f9e4a567d refs/pull/6841/head -dc0a90624a5a9b3109e77b6335eabf4866515be1 refs/pull/6841/merge -99fa2052bcd0fb7c4a5e9008278b9f0fcf3e191d refs/pull/6843/head -24f3aba06492c4ae145f38efd62a5b4866a47663 refs/pull/6843/merge -e6064cd2a30b0758eb4106de55b836373f43a80a refs/pull/6845/head -f811673550c59cfbac6faa3048517626bdd0f922 refs/pull/6845/merge -618655648fde6ac9a7db6e1a1a977a4ed853dc77 refs/pull/6848/head -58e9ee1efc2ba93eac8fdd0173c7c3fb6e2476ff refs/pull/6848/merge -f218553e61e79eeda19d661c7d83ddc542fae341 refs/pull/6849/head -25f30957cc77c506fd762a87ee4f401967138b53 refs/pull/6849/merge -ffa797c68f1eb40ac38f779d30c480b179090949 refs/pull/6852/head -9e988f7341e70607a9461d38145009c2ee6de66e refs/pull/6852/merge -cc4d9433c90312a1f95c90d9a74611a76203c031 refs/pull/6853/head -2900d1e3368c20884e920b2c14b6610db442e8bd refs/pull/6853/merge -2e3a389f198f71551b64fe4e7c84c5e54047a19e refs/pull/6854/head -2b4ff32df76272a025dea6526fed9dbe4abffdc3 refs/pull/6854/merge -adc910f1943c916d26d1492fcc0561c4348751ca refs/pull/6863/head -139734678c853a2fd79f721bf424bb1c4c545652 refs/pull/6863/merge -e3e4b601c04e97cdcf75746af78759835c8fdd44 refs/pull/6869/head -1418df6e8aef383b9eabec9a91e85b7dd5ee9628 refs/pull/6869/merge -b28d6cd656419185957425e180e3a2ca8827547a refs/pull/6872/head -dd70357c8a57ac2265c25cd196a5d5460b7c9436 refs/pull/6872/merge -b53ba36695bd399319e3de5dfe585fb4ca473266 refs/pull/6873/head -117c6a00ab953807ff4c32119e43a7b6ddd90fcd refs/pull/6873/merge -b68d09b9e2a57c817c94848e0f53acae104adb64 refs/pull/6879/head -f584edbea32a885ce85b7c22ac37f797ae3a0389 refs/pull/6879/merge -f76fadea4652f5a59ade3b7b088fc88b7c388966 refs/pull/6880/head -60b22d272b34067944eb06514829fad917b95dfb refs/pull/6880/merge -152605650624ca63e9e38ef5972440fa3cd22e80 refs/pull/6881/head -adda40bdec42f88ffab839d3b46ef295076631ed refs/pull/6881/merge -c57e6e74db28324aba625677c2f3b11b60cd2944 refs/pull/6912/head -eb5d67a732e4f2f5d5518674998b39ab968ab0a1 refs/pull/6912/merge -b91b6c414badfda66c2bde6d1d27dc78ea7e5fc2 refs/pull/6918/head -be0d7c038109f00eb59284eee220408704969d2e refs/pull/6918/merge -1a23acd2471050f84c67d2f54d41bdb9fa224643 refs/pull/6921/head -e885fc0cff3cdc4d1ffdb61344375deb6ad97648 refs/pull/6921/merge -ace6a1e89ddf2af985c1af2afe8dad2676c01bc0 refs/pull/6931/head -20d02dabca3766148265ab1a1748ba6f98243aa9 refs/pull/6931/merge -279fab3c5a88b9dee8be02231fe1d492707b7cd8 refs/pull/6934/head -30034dae4c58abfa6b34266729f660af8929ccaa refs/pull/6934/merge -a6c6a563fd8a4eac065491de5a2d773d7bfd1995 refs/pull/6963/head -c3f29f3659d2dfcfdf4360c73ef8f88336e75b04 refs/pull/6963/merge -007e2947724da7866bec42322a4c1f4bd63b95ee refs/pull/6964/head -3549e134c1c932e80de8e8338ce93538af0900ea refs/pull/6964/merge -0df18eba13e5319ff54cd47dfd1dada3cca7d2ac refs/pull/70/head -a33032360d4c615d99c0af52b056702c9132fda0 refs/pull/70/merge -8cdd65e19fd1c81dde8bb427c482802bfcdd6068 refs/pull/7022/head -83bb3a1a069c74b3fd2c18bc4dd3f9e16fe9c8e4 refs/pull/7024/head -7ff42383029717dca4fcf54cb035b69cfc2d7dec refs/pull/7025/head -485bc821b64800902c7b02e0c455e7e60ed8e853 refs/pull/7026/head -0d5938675d3e6253ba03215113ac7536b34d3b5c refs/pull/7026/merge -4be4ed9e024a3699fc35698956496dfed40668bd refs/pull/7027/head -8d9c3d5047c014dfe0efaed386648aecb62d3a79 refs/pull/7027/merge -1ecb2d2af0603182e3bbd4852120f63852c706a8 refs/pull/7028/head -6c27109fa2b2ab622a9ced401d2753848f3bebe5 refs/pull/7028/merge -3f1a756484bc574dd4921463dc44ffe24755f3b0 refs/pull/7030/head -929e7210bc2a7ebedb83e4c591b6fb7fd4f78894 refs/pull/7030/merge -58c665c1d6bec6c89dfa0d5a86c2bc80bedd4029 refs/pull/7031/head -6c8ff4ffb5a9ae9d3d66c00e1b0111997df9a738 refs/pull/7031/merge -a639d1bb9d121730b3c9ca1c4efcd6cef9fe8f0d refs/pull/7033/head -29ceaeaf35d0d69afd2650b5c58d6ecc2a551196 refs/pull/7033/merge -e3e8bfa37f59736336f17f36b3d327db3ae627e9 refs/pull/7034/head -4ed34989ba13906d7d3b3bad0a289054df94eee2 refs/pull/7035/head -d854b79747e3cbf7c431b3098b86d254a8bcf660 refs/pull/7035/merge -40f695003fa5b62581a1ec1465df91913f23f4a3 refs/pull/7039/head -4dfabe22eae7c381decb63ec628810997c7aff62 refs/pull/7039/merge -5a054874b16d926952238c396766a44e9ad99e2b refs/pull/7043/head -a872ad021e5fb266b9a44735f007ea79417754ab refs/pull/7043/merge -a77f9f2cc416a74a56f9eb4a8d3e790c193f0100 refs/pull/7068/head -45d5bd10d59a9c3e2c0f987987189cd916821129 refs/pull/7068/merge -3b482e4e6b0aa034b26a62ba2b8ad16aa36e39e3 refs/pull/7070/head -923bad68b896f4bcca8a138a86427a142f326fc2 refs/pull/7070/merge -e853e43ab99704a21a2c7fe1f1e5ea894ccfca8e refs/pull/7078/head -2f056880d6304cffbef22678005acbaabb18a542 refs/pull/7078/merge -0c48d50fd3dcea2975f7d37802a0cc836db5119d refs/pull/7080/head -d780a2f819f9433030fcd39837b213932bb89aef refs/pull/7085/head -3822fcb45a40a3714575357afe9ef90fdf9292c4 refs/pull/7085/merge -949618420aff0ab295392ee4ee30fdf77099df88 refs/pull/7087/head -11c26e5981cc9c8b151d450c217e470483d05a35 refs/pull/7087/merge -1b43fc683e0b89ae754be31f4e681c44390e425d refs/pull/7091/head -03cc20d135b6d42d35425dc6a27dfbb701760830 refs/pull/7091/merge -d20ec96558d7aaeb66d300a47f768ded23fa352f refs/pull/71/head -6e80ca70ab6b31785a2cb71222f0c0f3202e6913 refs/pull/71/merge -10a312c8c51fdf02a6f7ec4f653e0f498350932b refs/pull/7103/head -5b8d2ab6e240ac3caa28b66de848350ece9a822a refs/pull/7103/merge -d4bc88bc9094b2f8995e731c8339f9fe58f248e1 refs/pull/7105/head -402fa104f8054f770316af25d59194ecb095cf09 refs/pull/7105/merge -9185d4315099a1d4169529e2ca15675c987536d9 refs/pull/7106/head -f9c567583b9c711d0026b87a11871178dd7b2475 refs/pull/7106/merge -919fbb773bdba4797ea76839b4cc51c0dbebc0d3 refs/pull/7107/head -8cc039a217e9d5f9893ea4df1ddca4a32bef5ccd refs/pull/7107/merge -9434ccf6a3f4eda293a5dac134da377c3d6ca18e refs/pull/7112/head -6638fccb86b48e8aede23a56d593ab49596aa372 refs/pull/7112/merge -8b2e08626d96cdb7b28044416a97622e778937dc refs/pull/7118/head -3fcd3123ca46dda7a446671e289edcb574eb8b89 refs/pull/7119/head -1e78298d35afd5181db7b32302131678d3589aee refs/pull/7119/merge -d6a673f62ff34e9be8d71ddbd86891a8842403e5 refs/pull/7120/head -3fa88cebe2333930d72105dc673ad49ff05316cc refs/pull/7120/merge -4265b76f53c14f6d42e34d4d3213c92736f481c6 refs/pull/7121/head -ce1758f3935f7e3272d557ba36b89576161ae812 refs/pull/7121/merge -d311bf6abb49174aa1738744baea7401603bf8d8 refs/pull/7123/head -01896c751e3bcec742ae1ec6e1146658e6db6163 refs/pull/7123/merge -3d27d028ffe8ed9e834b81f0ac42573668f5e318 refs/pull/7124/head -a6cb8eb60f3ef6406e5b5e47e1f80b017ebe547a refs/pull/7124/merge -5ee0d36fbfa610b07a7c8c655b1fe8b2440aaaca refs/pull/7126/head -94fcd2c55be60839f81bd43938f3dbec9dfc3c1f refs/pull/7126/merge -8e19bf36a4eb4843a17cac300dc9e9556e96b298 refs/pull/7127/head -eba1a089df54e5c608845cf9ec906fed35469a5b refs/pull/7127/merge -2a101932bbbf1046ee28b1d0bf2e825db2d483f1 refs/pull/7128/head -81769a728565f590cd565418ee741581b32ec56c refs/pull/7128/merge -a06120b093011164e797aef71520d1c632af3416 refs/pull/7132/head -ce5861f3a6b9f44271232fade5644e1af72da8b4 refs/pull/7133/head -33b7a34a9e237e6093fb563a403b31d47263a545 refs/pull/7133/merge -c3dc9a6e7dcb88d7385b3fbd3f2b9f19f7084484 refs/pull/7135/head -aa8519d69b95474b85240080c204a0962c5d9891 refs/pull/7135/merge -28855c5726f73613109408c1ae54c627fe036fac refs/pull/7139/head -5dc385c794c683011660bcd0fdc1d572aeb955d1 refs/pull/7139/merge -d8b7252fd231c52df8732ae18846b34c909b7572 refs/pull/7140/head -9d600a716b668c8e22148bc02926aff4701c754a refs/pull/7140/merge -0ef61b56b077347979757d0a115ce2a110485975 refs/pull/7141/head -06fb12a88d012a6202f254165e56d27be7d4df18 refs/pull/7141/merge -3ed8686f59eed939188793cc21738845d61a89d2 refs/pull/7142/head -c52e08bfdd583316f2fe6a33e51b46f43544bbd9 refs/pull/7142/merge -acda7f93792e041df90c7501da7dbe3fd5612eda refs/pull/7143/head -3b8d26c0295d5c5c97e7036dfa5bb8198cabe51d refs/pull/7143/merge -5259373c72e188ae5c718ee083b83b82334cdfe3 refs/pull/7144/head -7238f38c242a0a7c33e316a5b9f120e4166c567a refs/pull/7144/merge -b9a890d4af5b910747053bb1cc14e0d7298494fc refs/pull/7145/head -79d253207e1e9c06537d21665b0233f3884f3b03 refs/pull/7145/merge -de2674e42c0e87a07219010641f59d045b1506e1 refs/pull/7146/head -89b422a16a8fb61a1737b3ce0c3bbe09b6cba208 refs/pull/7146/merge -096f526ec288e76d0268a372669c27fb7c16fc9b refs/pull/7147/head -07b406399d317c8238990407e59bb6e36cf2959b refs/pull/7147/merge -6107e22bea72dd70ee2d67130d1adef97ffef296 refs/pull/7148/head -311d5903977d8d8af7aa7f12e54a50b2f0ce7a41 refs/pull/7148/merge -68f1ab563330e0c2730a4f4e179b20f6a5f07216 refs/pull/7149/head -e9abb3751ae5edfb47817faa7b9b3bb5e1874039 refs/pull/7149/merge -d34f709e827ad8ff4edccf876cd8bc64d15c34d9 refs/pull/7154/head -b4c913a91c5857f17269051b00e06240c4aa9606 refs/pull/7154/merge -7dc0cd35616e38d9c21ebbc4909b39a103b0387c refs/pull/7156/head -37a0b5430f0a1ec86034a2c7bf6e47b8fa073f6b refs/pull/7156/merge -3cf7d4f19ee7e3c1bd1504806b03f5894abfce08 refs/pull/7157/head -112c56114f64c59a7741715230c9229f695d8c9e refs/pull/7157/merge -bc0f4bc94a9a3dcff79837d5f91b31c71d8ba709 refs/pull/7158/head -7b46d0560de70dfe8b3a68f6e5b17cf9704ba889 refs/pull/7158/merge -dcd222a48faadc4affcd2595f233ea3076444f28 refs/pull/7159/head -a9009a013c17da55654e5c5cd5782f2467083429 refs/pull/7159/merge -8aa51016a119842848fb92886135103df52db0b9 refs/pull/7160/head -c3ff2178483705263a6ebee0639442cd60dd3326 refs/pull/7160/merge -3efcc9a1d05e5136452783f165e2e450b8bb137d refs/pull/7161/head -af0cba68abe3fc1881c139e2a1bb768dfd6e245f refs/pull/7161/merge -d998611f04bf847fbcae9de54ab198494c9c79af refs/pull/7173/head -a391ea07f8f7c1f123166da7f45783859fafab7c refs/pull/7173/merge -eeb53d2e00d7d3ba139f315501a12b1c15e43256 refs/pull/7176/head -90b7adfb9816a6401149d77375d35b0bdce9022d refs/pull/7176/merge -7a00b78da288ca613b8d876bd967d538a30f4d86 refs/pull/7177/head -0dcd94eefdc0b364bd418e129b9dafb5a51022fd refs/pull/7177/merge -f113067490d97cad20aa3f0f509f0c6d6c91b6c9 refs/pull/7178/head -d9648142c4fc98d47a5c57b2b3ff79c3e4188235 refs/pull/7178/merge -a8dd1f0831ccbcbc4f6d6cf8d49223f4d4352d1e refs/pull/7179/head -a5959b7c19a6a1cd4ae943bdba6c9f8f9ea1af35 refs/pull/7179/merge -dff292e8fe1b556fed4131c8c133a299299f4692 refs/pull/7181/head -f251721d408c04bbcc511e7f12da5b1e5608d66b refs/pull/7181/merge -919fb2da23926af5504167c312e25ecaffebc5e1 refs/pull/7182/head -bfa4da3a60bdaa99ebb979a7f0142170db1ecea7 refs/pull/7182/merge -cd07c89b3ce644fdb8074376be018cff278f1b8f refs/pull/7184/head -57f34d06f016ef165c3b9c132969a710e57eecef refs/pull/7184/merge -914ed3a0cd63695659c41e20d1d3042fafe1f9a2 refs/pull/7185/head -f98a95d25f7b8beb4a4e9f13063befaebae1dd9e refs/pull/7198/head -4cad53b3ab031a0cc2190d6738f34bfd3d285ef2 refs/pull/7198/merge -2be84ee45d310be928cf51d2d692fe96f1b9e66d refs/pull/7199/head -9fcba88166f80e602df5206aae4587c356b5ca03 refs/pull/7199/merge -e48aed92519265b14fdf93d0729ee28aa9181064 refs/pull/72/head -2b4c14b465ee7c3adf5860a413e0f7818b846e80 refs/pull/72/merge -2e10492ff7f44eb59e16acc6a94909afa54dd7b4 refs/pull/7201/head -3b647da607ac20a5217adc63871d5349c5fc1aa9 refs/pull/7201/merge -dc0024a8896101d82b338acd5492d406e982fee8 refs/pull/7202/head -df22188199799475d0d336caec3bb5328c03ed4a refs/pull/7202/merge -50948e620139b894ab9c9c090ace36340e1dd445 refs/pull/7203/head -73472edaae8177c32e4045b9498acbb0d446c4b5 refs/pull/7203/merge -6198d4dafa3fee819b15ed93cd187902a89a7a4f refs/pull/7204/head -731886a79c06b4f5598e1bbd48d5e6bd414028ef refs/pull/7204/merge -cfb481b1cf5afa40e68d34683a457f0607ac1dde refs/pull/7207/head -dcea623f725b99966656435c456a3ba0109760e5 refs/pull/7207/merge -e68eb23d68e65705b9480ecfc2017f783be83488 refs/pull/7208/head -601d6fb3ed2177bad8c3df434fe8176294b8697b refs/pull/7208/merge -1b3d3640db2953c154672b564be45b455e76b126 refs/pull/7209/head -bcb9e37279f38b6a151763fc516e5b138f99111a refs/pull/7209/merge -c28af2b9b423488d71bd7867b382de7e9c47c429 refs/pull/7210/head -65542ec43272e839db17e41f8d82c8b86f1f4420 refs/pull/7210/merge -8aa3f2893c76ae40eaac5c125d3c0be3d2f554a3 refs/pull/7217/head -6c5684fd6422ba60448663494eadd84c61ef3ea7 refs/pull/7217/merge -25f58c0b81be71bad700926553c092288f3fe2a2 refs/pull/7235/head -1f30e9054dc861cfe6fd3a36941a27629d96df35 refs/pull/7235/merge -077fb80a1479927828b259e00bc941fc6da45201 refs/pull/7238/head -f2817f3ea448d3050b2bcbf0477f8e94db39ec42 refs/pull/7238/merge -2e3296738d9381fe6b09a10296f5156de01b6954 refs/pull/7239/head -f2640d0991fa6db8ebfb875f09e5964c2ecaac7f refs/pull/7239/merge -049b4e5af9fbb7e5c0b5a8f434f2ffe98bb8fa9b refs/pull/7240/head -2425b7d4aad9ce3cc5c8a206dffe2458b3a2eafe refs/pull/7244/head -e917544e7c6614e00672193b19804c30ce54b6a8 refs/pull/7244/merge -b5e1129fbad5a4f8779fc584e95fe9549aea9e26 refs/pull/7246/head -34304b30efee056e2f50f8de0418ed4b4a0dc71e refs/pull/7246/merge -f3af2e5b16c8b7303aa632e12cebb6a69358b4be refs/pull/7247/head -678a8fd48e9f742e82cfa3db2a329b98d0c8b6b0 refs/pull/7247/merge -04aac93fb191766784849f4f78e2e818224fff31 refs/pull/7248/head -cf86f510fcff836b692864f19ed781fe6926d52c refs/pull/7248/merge -0dc275beb2e81c6fa5d8ed9bd907eb9f9526dda5 refs/pull/7249/head -c67901e74d796806ee1faec5cb5e6eedbcfdaa6c refs/pull/7249/merge -97726298fea965d1d3b981584961127165f1d977 refs/pull/7250/head -8cd5a6cfda7c588846bc948a87644d303779c3fb refs/pull/7250/merge -f11049644323467a3269d96dd9acf25e32e94e0b refs/pull/7254/head -6ec3a5c4fa87322976b10cc852f7bd35bc71adfd refs/pull/7254/merge -2f2f13200cc827ff9f0c26d6a3b642a704fe7d42 refs/pull/7255/head -ead0f664beea4f60be01797a6311a28ca0106089 refs/pull/7255/merge -0ae356b61c42df21ed89046e90075b6658580842 refs/pull/7259/head -ce23345f0a5948d3d8b31424b8cb6ff29dd6c1d3 refs/pull/7259/merge -b2cbc697328e67bd3789060c64b122e24b016294 refs/pull/7260/head -21b062ae504872afc40eb4e256699ba296e6f36d refs/pull/7260/merge -1a2e8ec2bfefe2eeb93ded3d427ac15c5082114b refs/pull/7261/head -e1dbb2a08fd93fab885d26f0e278cf79abeeccda refs/pull/7261/merge -8a2593374f023cb704091248be1c4fd2aa3d0e75 refs/pull/7264/head -26d5898d648dca9e69cd7c6201fa6a9484d483be refs/pull/7264/merge -8c9db6500ee1f59249639ec2799138e7a925504a refs/pull/7280/head -9288e02ac5e5aa3b67dbeedf0a2f12ab62a19f8f refs/pull/7280/merge -1eed47d29e6495ba0b0b48553f9e44329083f2ec refs/pull/7282/head -668847d96b566516dea54f3eec667235af7a684e refs/pull/7282/merge -17a0ae34742c382e974e9a2aa6612140cb629b52 refs/pull/7283/head -58337c19b5a67bc24b834138b28728d3be6cd047 refs/pull/7285/head -35d8dfa949879b4993643b54afd352a6d2782757 refs/pull/7285/merge -1673511dc8fb3aa90409ad7e583ed524b832c33f refs/pull/7290/head -c9fb1f9e5f068cfb83a77d31d6ef1058151d9979 refs/pull/7290/merge -43f1221cad759d2445951dbb08c82dfc9ae46805 refs/pull/7291/head -cd9107d6b091e2fec53a79a06c2ecdbc51af4100 refs/pull/7291/merge -3a9cfc1ec2c8f86c00f52ac1a7107de76fab4841 refs/pull/7292/head -709f35b767dbc927ddcf49858916b16c0d0cd9ba refs/pull/7292/merge -daceb22f5d2cc0db70fe142569b4dca3fa843cff refs/pull/7293/head -8246816e0772d7f429fb141b5fcf4551f581ba86 refs/pull/7293/merge -634d88f9092f0757e566d4409ad725f303da44e7 refs/pull/7294/head -16e8aba9ffc7d8ef30a099d1740ee2a92c7d8ec0 refs/pull/7294/merge -9dee8571a8ff2db2542d4be95bb5077c11f4aa60 refs/pull/7295/head -f4a8cbbf523c3c7f5db2bd5139364f28557b1775 refs/pull/7295/merge -929a61461122888a453b1ef297263c6b46e7946c refs/pull/73/head -33e233d3469b10d5e6bfb4b837aee45f53e256c9 refs/pull/73/merge -0994ca03a2306d708aca862cfe304b6ac5afdc31 refs/pull/7300/head -40dfa0914c221f83cc348da788f3b4a1e50d7143 refs/pull/7300/merge -4f1fa9f289f8d254d4e9d99d9fac02a53638082f refs/pull/7301/head -1402413d15166d2b016dc171e7218a140dd98a5c refs/pull/7301/merge -fc9e12c88a0897048c27f1870390463d4edc1d9e refs/pull/7302/head -b701f2a9c6738d3a85bea7fbcca168ac50bb50de refs/pull/7302/merge -eb22d11f2e664b1a9232bc48777bf7bde13bb08a refs/pull/7303/head -3949bbef49fdea1ca034b79409b868a1308f7d08 refs/pull/7303/merge -859006689e0229fade43f3b8fe0038e6f2bf1f70 refs/pull/7304/head -4f3d00824051f0c8556ee642fce1b9049f5082cc refs/pull/7304/merge -832c2ba07a1d0437613f4744ab8cc52bec17f85c refs/pull/7305/head -9a4e42a375bdafd4d4de257b8a8cf62baf67e6fc refs/pull/7305/merge -f60884adc00be55e4a451c9c06cf96e0913d5ae6 refs/pull/7307/head -4aac9ab74f6e7651d9942a9112eee455aa1b00bf refs/pull/7307/merge -073ccacbdeb5a8c5d0ac322478ac672841708c34 refs/pull/7313/head -76c2bde9900f129e69fc2daeb83c5caba20afb76 refs/pull/7313/merge -50409c3c5030bd1da9d73d7c0e68c8ceba5d6ef2 refs/pull/7314/head -59a40b3df0ee95dca6a2182a5847c0d9034dc867 refs/pull/7314/merge -05795be4ea43788698895bbf01e5964d66e8d510 refs/pull/7315/head -6cc94015a07ca57fcb8f7d2891ed3f934bec809d refs/pull/7315/merge -610641ff17cc5103e56d1c98093af9bf346ea13e refs/pull/7318/head -606faf9b569809b53538be5156ee7ec87ab5590e refs/pull/7318/merge -4a43b1a692df1e08baf9f5dd532cc1e6fcf35d21 refs/pull/7319/head -8effd5a0d2c20ed83776e74b6bb4af4f76d77aee refs/pull/7319/merge -f1266f9163fb27f8da28fed95a85b26d56932af6 refs/pull/7320/head -b1fdd38bf4184529eecf501ac11737f0a7a3a092 refs/pull/7320/merge -c3d5062baddaff9aca46a82baef6446681598452 refs/pull/7322/head -2b73b359cdc22c0ebaf24e7a490eab93daafb07c refs/pull/7322/merge -ed70faa94d3f9aa40309d39a66df57aabf418bf9 refs/pull/7328/head -64c23dc11c9c485002bc4cd63b858ff589c74365 refs/pull/7328/merge -e869e179c8e97e7b22895848688acdb404de9de5 refs/pull/7335/head -4225c9b463a812bc636365b02c9e68e82fb54f91 refs/pull/7339/head -abfbe1fd783aac1f74b0790639fe2c54b216237c refs/pull/7339/merge -b8e4adc1cd4a8305023aaaccbabf373185108b52 refs/pull/7340/head -170b3315bc2c5c87e1660fd13bc66b560dca15b5 refs/pull/7340/merge -fa2e32ddfa3b4cb4e6e4b993ee30317268b48742 refs/pull/7341/head -0b303208a1bd987890b7887ee7b1b1a70e351cee refs/pull/7341/merge -13aad0d949a66bab5ad35f69852d411a740f79eb refs/pull/7342/head -b641e86b8acaff5b67ccbcbda11d35d5d5788f71 refs/pull/7342/merge -7b29bf7b7dbd9cf15c5bbe3ec0bdfd73428f1a06 refs/pull/7344/head -2d1d867472a6a1a871485a05fa9ad8fc9ad955ac refs/pull/7344/merge -32b9418e8b963e29e2d1e225626d6491622f38e8 refs/pull/7349/head -1529ed8c7d0c67ecb0317e284c76f690c50cac19 refs/pull/7349/merge -c47dcfd82ad96594f3885987bec8d00e1cd04b86 refs/pull/7353/head -a73d540bf04c60887a4597ffe1e973aedca3d59f refs/pull/7353/merge -1a83090b1bcccdcbed2d0176ccccb2bd7ca07b34 refs/pull/7362/head -d73acd440ed14ed9ae9b3c89c2d7562b87969982 refs/pull/7362/merge -f9f2574b7975bb935b20d5583df528dc269923ca refs/pull/7363/head -2fa024de42d6d0d59a83c99aab4f0d4ed8585414 refs/pull/7363/merge -ac4dd8f555da874dbf6394afbdf800a0dabbd1e9 refs/pull/7365/head -50da1c98492a96731220ff887f2666e6e04411bd refs/pull/7365/merge -f8450abd268ca193fad12695dc2a45f25901a23c refs/pull/7366/head -30ecc4ba55c6aaa766a5c57baff5f43f0ad84833 refs/pull/7366/merge -4717f5a2016ff11a935375e95d1bc6cd51ea174d refs/pull/7367/head -a6ecdc39962da68d1315e037dc9553aa9c08fd17 refs/pull/7367/merge -bc571f0bf3bbb7371d4b65fb41d623c7a1b4a9d0 refs/pull/7376/head -4ceac78b9da87e179996dff612da889f2dad0ff5 refs/pull/7376/merge -bab2cc3319c801dfb57fa6b43c4809c8e4af1e15 refs/pull/7377/head -a4576e082bc9f06d81b25994e5e3c1eeb46f5af1 refs/pull/7377/merge -08b6e3917e7493fc6bfd3f5454c1f7c05fd5b442 refs/pull/7391/head -e44bf1de00f229699ef8715e0f3f192b6d42cac2 refs/pull/7391/merge -21ceaa996bdc1fe97e73d4fa904d3281bcb29be4 refs/pull/7398/head -0a43b844afeb963c4b0bdf2a1a4cb76d286de6b4 refs/pull/7398/merge -da12b22382d82b783aeeb6faeab49defd659bbf4 refs/pull/74/head -700f232e6f9cec87fa6bfb2de8e7fb95a0ca97fc refs/pull/74/merge -abaf80877637db6a373cd185996c1d92a0052795 refs/pull/7403/head -b75dd8232104e0876a5c12e2a819d32418ea334e refs/pull/7419/head -4abd9a1f1f3584438bdd9f70643a5d02742c91c8 refs/pull/7419/merge -adf840d6a81274474b6193064579645ae1596929 refs/pull/7429/head -fbde1c82e142ff3ca7fff95fb3bf128fa721e5c6 refs/pull/7429/merge -43f811dc0504c33125ea38256ae95cd22ba169c7 refs/pull/7442/head -6e44144f58686a72c72aff99595b736b6fa9e09a refs/pull/7442/merge -a62c730dbbc3aef38a8e6c4fb42945152fec12a5 refs/pull/7457/head -9bb237a43f5704caa96faa295860009b7660127b refs/pull/7457/merge -890109a104c9a86771b9728a403dc0a7a3af821b refs/pull/7458/head -85c06fed944ae41d7ec61158627e46e7016869e2 refs/pull/7458/merge -0058e6bf8a89a5a7d77c124f9ad984d1c2d1abbc refs/pull/7459/head -35cdfab6778aa70108ce1014c61dd5d2301f0c1c refs/pull/7459/merge -22eb852c4896b14efef76cfe5863e74e6e53d0ff refs/pull/7460/head -22eb852c4896b14efef76cfe5863e74e6e53d0ff refs/pull/7461/head -a458618833cc21bb1b33ef249fb9c70bca1a812e refs/pull/7461/merge -b4e65be09965199705c25942cb8aae55bf93629c refs/pull/7464/head -84562e10b5d6377acb4cdc4006c66a5c9a524625 refs/pull/7464/merge -f48d91fb95f525adcd74b6e5975ad769584f7268 refs/pull/7468/head -b9b8f066699b311d1ed9310f81c57f8e9fe2463d refs/pull/7468/merge -f465a7c785a6d080caa828039232fcfeb4ca8890 refs/pull/7469/head -817cd3cceaedde947828d6cb49b417afd9ab71d4 refs/pull/7470/head -72922d73a0e7146959f70cc494fe1f0dff5af408 refs/pull/7470/merge -c168bee3d086ecba7d030d804402dd4f39b0fb35 refs/pull/7472/head -b76953dadecc6ee442265440249cc9c5eb464bfe refs/pull/7472/merge -a8588a714830081791c7c7fd295749f4a62d333e refs/pull/7477/head -4f6e2bf618440710a1d6dfb77dc3773b8c3385b7 refs/pull/7477/merge -1d4741ad070099b4c0f3e6f2e851ab5b095a964b refs/pull/7482/head -04eeeea6f8fc2ac4086eee74108a3c86a991bcc6 refs/pull/7482/merge -c1b2d23a9a960cf41aab2c8dd67e5d987c0f7c6e refs/pull/7483/head -ca17b967bcbe9270d0b73a442543ea087c4275b4 refs/pull/7483/merge -9159e80b2dd8cf3865466cf12b7dcc9f6547691d refs/pull/7487/head -10c8138b3221bdb74ebc91922e4edeb47ed7d04f refs/pull/7487/merge -975690b0b82638f6da7007c6f0c774fcf0cad4c7 refs/pull/7488/head -7e09393f52b4ae9579ef4cdf6c71edf85c4ff5b5 refs/pull/7488/merge -421de79ec006144699831dae5958bcb83bd43b7f refs/pull/7491/head -89dadcf032b0b8c1b2a8e736faaf15e55a407650 refs/pull/7491/merge -3b351303a4473d9bc27fb65e6d465d5bc06c7f81 refs/pull/7492/head -2c70d2e955058248601b2454f41f46326abcca9b refs/pull/7492/merge -20c61c91b3304e032d4682b9d23e2b33bd547bd7 refs/pull/75/head -0f8653da93b64909a3beb5d1641bc8750af1c2ff refs/pull/75/merge -3b05141289872db4a6a0b941b6b893e7c2302fb5 refs/pull/7505/head -6fdc54ade98f40acf50e88597fb2253dbf043c34 refs/pull/7505/merge -9e0352ea6ee1ab276d89c8cc2cd47cb80f87c8fe refs/pull/7506/head -fc85291dbe1ac76ebdd1e29a627bc29b1e62c60a refs/pull/7506/merge -72d2eb1b91085059d0f266277f0282730df61d73 refs/pull/7508/head -e59bd81be29ae88b6e4166f767bdcfc0ed976148 refs/pull/7508/merge -5755c68d2ad5bfcd33d4129451cf9f4eb022399f refs/pull/7514/head -fb1b9c05e450295b24695cb1520fea3868d693a1 refs/pull/7514/merge -c58dbb51ca0b0fb20f2f9f0aa1cf621a97d957d1 refs/pull/7517/head -afbf0dc76670c83c979e681c7464efc5d44337e6 refs/pull/7517/merge -6a959e84f913853efc658b19001ac5f91aece109 refs/pull/7520/head -04f1e813fed2d0f57ca25aebc9b95f30d1e7301e refs/pull/7520/merge -096bbd7b2cfdb64772c7af7a1abc46d3585a587e refs/pull/7521/head -878ea46e6e8cabb4a77535ccdc9fc5f3b00fef39 refs/pull/7521/merge -ea800331818131252432c462f47e237f939e59eb refs/pull/7523/head -153e2736a623832f1c739b1c362c98f0135316f1 refs/pull/7523/merge -7fd1a60b01f91b314f59955a4e4d4e80d8edf11d refs/pull/7524/head -c38a856ec69f4642f75f7ee78791ab0493734f21 refs/pull/7530/head -00edac698fe359d36c0d58d4475854ed3b3a6d5c refs/pull/7530/merge -bfb18f7ac6e67dd6ce368c24ed802afd09ac030d refs/pull/7531/head -08632bf2830ed25ab5f25c4637356373737922d9 refs/pull/7531/merge -132ccb454bfbf09eab6ac0a481d45a7b04b9f726 refs/pull/7535/head -bf0b27789d67bd84440a4abab4ae29cb737f7c88 refs/pull/7535/merge -5060ba1f40f237154a888cf6524efc867e21fd33 refs/pull/7536/head -69083e04b3336e22698070f8d20a355c06834bee refs/pull/7536/merge -5060ba1f40f237154a888cf6524efc867e21fd33 refs/pull/7537/head -cf36e179207d517dd33bd17650af03eab4bf43d1 refs/pull/7540/head -433eb7fe019f458b18d75b957c3a9cfbd3d3ea01 refs/pull/7540/merge -175832046d58eea2f35327e15462f005a2c83ac6 refs/pull/7541/head -7531047ad83a9bc0fea2d5dc9749eae47bd1ba65 refs/pull/7541/merge -08b424e71f021df8f66b6b39313fcb8ba8a84fb3 refs/pull/7543/head -aa2e0b492600725b5e786d662e35423556be2825 refs/pull/7543/merge -774d80de437e1645725a71b00ae1f9758bb9331f refs/pull/7544/head -5aa4e9cd799979d3ad28faee968cd816eb92e28a refs/pull/7544/merge -d0808e53e5c1998a487713f5045b89f78296d4da refs/pull/7545/head -9db317112f84caa24f8e8a9e6ebad00f12c4a1f9 refs/pull/7545/merge -7f019cf1a529faa295f5a7d26ed741079ef49198 refs/pull/7546/head -3ca0a941353b6c8df04232c6fc25bb13cc41eb5a refs/pull/7546/merge -eae8f295a9e5a0173d0f05dfb5aa970d4689010f refs/pull/7550/head -bf7430f06eda5c9b4c8db394a52d44604dd49dd4 refs/pull/7550/merge -d80d76d262877304c09107fb023bcb20d934fba8 refs/pull/7553/head -51a35507ab27ae2527dd9a44ec3b9ae6237f671b refs/pull/7553/merge -2d263acb968c15d4573bb96c12337559026752dc refs/pull/76/head -a10ccdb2d2bb58baa645dce747bfc43a476e8d58 refs/pull/76/merge -093348b3e7e5d41cc7903e279ef0e3ee127a5435 refs/pull/764/head -466664502d6e18cc1c410b95ef2d1986a639eb11 refs/pull/764/merge -f4319f75c791b53bc22bda525c1f857b2bc7c4b0 refs/pull/765/head -cb62a40563490080f0dc544972702a013bea34fe refs/pull/765/merge -97214c063d58ced9a3b20782c07afd4673dba467 refs/pull/766/head -2463aff8952f0fc3463552ecce3438c661232abc refs/pull/766/merge -9424918972903c73c488f1332a161a6aba6fcf97 refs/pull/767/head -64eb7b5411779f71d22c3d8fa62f737aa72e45ae refs/pull/767/merge -d51c5d9b57bf93381920648ba4bc561b3979002a refs/pull/768/head -8e8a01b44365290a61dd926c1991fa5150727945 refs/pull/768/merge -6f620b7d4889ca258373ebff3dd5147be7f93273 refs/pull/769/head -36a1afdd6b91eab44bfea2da5da14b37efa18181 refs/pull/769/merge -506ca6caed30bdca12c432fce353c4ea925bffe9 refs/pull/77/head -29a1fa0d2a787a087e337c529b934f6749cb790e refs/pull/77/merge -efbe37acbb61eecbfec946b804bd5c605d6af506 refs/pull/770/head -8f43a750d2902ceda190993ade84a4bf752aafa5 refs/pull/770/merge -ae9fa4d5bccbcfe6d85e0df4fcbcadf8bb77dcec refs/pull/771/head -0e22d0e4e3f2df7b01610ae7e383e291fbdd147a refs/pull/771/merge -8bb40fa9eac50a4fd586816898567c111ed7075b refs/pull/772/head -78b328770676923ff98f75442955cdbb6233fc68 refs/pull/772/merge -23fafbf8186d42cd3dbe1b42d4e048eace3394ea refs/pull/773/head -0bb1b258c5421f2e6865efc8d83f6d0a0c31f202 refs/pull/773/merge -dbdcbc2e2f9d6660f9f05bc3726ce2584839df5f refs/pull/774/head -0d5ad13b39ec7899051dc6a1cf7dbf441bb81f95 refs/pull/774/merge -3b4583d7ba8d51d8a7bc80f4201a4b09d829b2ca refs/pull/776/head -b3687c26778145599163ba8bf14d399a316f5abc refs/pull/780/head -8cd39963da81906f43ac129212e4789d27df4c02 refs/pull/780/merge -319a3a3c626338545f4071680082e64e31fc0d8a refs/pull/783/head -e9b28aa90d03977a2d669b566631d28da0b8b618 refs/pull/783/merge -2be067d1f48f4a9f9e0dea8898070c820c92f8fc refs/pull/785/head -4ab11f150e14a9cefedd1068588c95c9f7a92be0 refs/pull/785/merge -62fab833a4ce71ab1a27019ff4a3127c7412af42 refs/pull/786/head -104e0c40212db998429df5d247f800892074dbe4 refs/pull/786/merge -bcf71d4121196da2a0763381c7aa354ec1a7de9f refs/pull/787/head -df5b3b08a3d0676e4d288790d967a69e7bac88d9 refs/pull/787/merge -087fb5c2f7967ff18a356cca53cfd4c9ecb02185 refs/pull/788/head -598c1d4b5d9ca6ac6b4051f4cc4053a3f911b92a refs/pull/788/merge -1415ccc203369dbc3538d8e553db1b08dd8e2dad refs/pull/79/head -4676291e44c10c6fa4ad49c13bbebcce3d4ddad9 refs/pull/79/merge -c8ab7b902cef86b1ab51346b56328c1d78edca47 refs/pull/795/head -c608276a79ec8873fb4a3acf39774949023a5c33 refs/pull/795/merge -66cdb9775e8751a4c74d008c249e21f5f079ec78 refs/pull/796/head -7220f8cc5e2640e83cb1e92b2b8966de03d7a8b0 refs/pull/8/head -64aec8019b884d3fcc96b00797f4b5630105836a refs/pull/8/merge -3c2d791233996403569955ce5e1a63472770d551 refs/pull/80/head -7e25ad44f0c45917ad78a8f467d995608a492ead refs/pull/80/merge -5c6e56ac93f525fac1ef5efa0ffcdccd66a39095 refs/pull/810/head -891ecf5461f73f5ca5d77a49ffa69a2e1440af6e refs/pull/813/head -1b812a8f4d54db833acd2ac809699293e296915a refs/pull/813/merge -7deeae650e269890e9a7151f6384fe39d8d9c5db refs/pull/82/head -8285fc34428ee3a8212e4566282f9f23136261e6 refs/pull/82/merge -71d68257567a9299aa97b2609547048588aca044 refs/pull/822/head -61282ce357d92235e23507626bb3af377643fc6d refs/pull/823/head -b5d6a7ea41153335944f08d1f7d1735b602f3129 refs/pull/828/head -794f7bca42f73a58a42f4caa86faa2c72078a8b4 refs/pull/83/head -c287d221a770f78d14498391a9cde4fa7f296dda refs/pull/83/merge -efaacbc25f1168c6423185a3462278dafb70c12c refs/pull/8367/head -f8dea66fb3173b94cbeeb5911682601e9663940c refs/pull/8367/merge -984bb6883aa7167dd5812f355bc0f5fec21a17b9 refs/pull/8368/head -e082115d03565f576c9a00c290a1563b02553131 refs/pull/8368/merge -e687b96d08ab468e07b17f6ea22c6667e154a7b3 refs/pull/8369/head -709ea4158eda398c4a1819fd3dbce4d7bfa7a013 refs/pull/8369/merge -ff7e440f825835fa288d780ad9bf0f59805a0e32 refs/pull/8372/head -cade576a02cc9979f36f0527d900d704c125e31d refs/pull/8372/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/838/head -fb032f603465e39f0072a93f7b0f25c49a8b350f refs/pull/838/merge -8315e6a0c3b99b59463482529df73a6843f30980 refs/pull/84/head -4237fe06127661e604ad621f2c636c421ec1a051 refs/pull/84/merge -ee4e506b15e0965922b8617cfe8ead713225ca44 refs/pull/841/head -88b3c8d75c878d0a467ee12e90defb1318a4f5f1 refs/pull/841/merge -684168f4d750919bdd14af9b82467d1b5f0bedeb refs/pull/846/head -ba5dee0ad104dcd9502b0a8b0436086bf9eba39c refs/pull/846/merge -09b283f443ee5db1ce48cb7daf1e16e8ed965977 refs/pull/86/head -ca0c6401af8fd62bdb4b788d5f21a819950d201f refs/pull/86/merge -0cfede4c583520bacfb076fb8a31596e19f1c06a refs/pull/87/head -c645ce19025d34a2e5cefabf59e0cf752899b176 refs/pull/87/merge -23d31260e6ff6e6270acfb5396bb1e7ccd0ef7d5 refs/pull/877/head -de6b50d4d0c3b5b0f3882a7d48742a83763b34a5 refs/pull/877/merge -cd7addc14384d1bbb8114793e14420bcceeac9c9 refs/pull/88/head -5b8e96639a9acc5b968b49328c9a128900e51b51 refs/pull/88/merge -20cb292856841647722e234f18c703b4b6ca1d71 refs/pull/881/head -c6ceac5f908296bc36d130920b0aee660dad70cd refs/pull/881/merge -a37ff6ea5a13b0049b951248ce3b1ffc8c019934 refs/pull/884/head -4eea0999ab4dab89b5c11bfae8d3f400104bb171 refs/pull/884/merge -49e70cf1c425e261de87f0177b8c4b111ac92968 refs/pull/885/head -1189a991966eebc96f92c2541faf81dbbc852bc2 refs/pull/89/head -94e94107a4ef051264a0afd722f495a6da3f8e78 refs/pull/89/merge -20559fcd2c935e36b4366b3614eb75c719027aa6 refs/pull/890/head -15f39c745c6c8b0cdfeddf78553df99f1a6399e0 refs/pull/890/merge -7d6ffe987b45452d7fc72c4e2543139f37d8140e refs/pull/891/head -366053f7649a3c9716c85a5dd9b5ac6a3f1f0ba7 refs/pull/891/merge -e18bc94d6216a75e4e5a8064770beab0540531e2 refs/pull/892/head -bd9310319d4b163dee559ea2b1a85778b279b870 refs/pull/892/merge -d8bc11643264663d354ec80d5c124de75723d8ca refs/pull/893/head -08736ac64d45cd974b9940ec36d49049b44d1e85 refs/pull/893/merge -68a3c5ae59bf69a3f9655227a6aa248ac16871f1 refs/pull/894/head -4c5b7a037f9e0f48c98b7ce29df90f365f1f5841 refs/pull/894/merge -1f96a5dfff98536aeecdf5bfbc24e606020c4b06 refs/pull/895/head -e6614c41967faaefd8db44cf8929c7388fd2b69b refs/pull/895/merge -1909c7742e27791525704e992eb43945e99d154d refs/pull/896/head -709c4fadddf66b60f4348d9dbe3eb736521ae0ec refs/pull/897/head -fee6c4df6a9acc5f75ca3c095a500491d46941ec refs/pull/897/merge -25dea13437f70eb35d734157bfeb4552e8f2acc5 refs/pull/898/head -85aab220a8efad4dd237d45a954e07eece97621b refs/pull/898/merge -9cbaac3ecf14599130ae2e7af323b9d29bed9097 refs/pull/899/head -1eeab326075cef2c9256e37ac70c2d2f4ec3bd74 refs/pull/899/merge -0d131de2e17d6d016a764effa97b1541da5b651f refs/pull/9/head -c21d22dd3e488608c02d6f162c1c448ffdf1c53d refs/pull/9/merge -52756167803679cb00a03ddbb412baf4eaa75868 refs/pull/90/head -f1876890fb28949c55c3b7488800ff34a557fa8f refs/pull/90/merge -9fb9be1b781431e838240d8ee776ca24a76644e1 refs/pull/900/head -3f9f5bd4c797c9b3a7386d567b57c4d0a477a982 refs/pull/900/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/907/head -21526c8fbc71545bfa7e7b94b16a8675814cf460 refs/pull/909/head -db95b52cf7ba0111e480e7a9654f8064caad29d0 refs/pull/91/head -c6ea9ef304a36177fb0ff9b0a90c6d1c94a28502 refs/pull/91/merge -07b21f01225a7a33e39122d62214a3ac8727be98 refs/pull/910/head -7babf23bc87b047b62e5f56fe39755a4b2acab33 refs/pull/911/head -16d5c4ea03807ad67ad2b258a326a86e96af66c6 refs/pull/911/merge -5fc336d8a79262cd3c940bde3d53431cb3185ad0 refs/pull/916/head -7171f526cc2c3c439bc52f7abc1b38a5eaadf322 refs/pull/916/merge -8a60cd18e13d40a69f20244bef3f27b1a5406b6b refs/pull/917/head -36539a13ddec2c92e3fbdb3216a4b63339e25124 refs/pull/92/head -c5d5b9aa1cf33c54655951218f5dc1f5323ed5d9 refs/pull/92/merge -783f5a80cd2120fbeb704b711df79ae5b46ec151 refs/pull/921/head -e38548a49c2fd7f110318083b147774dcd7f18bb refs/pull/93/head -7593197259a63b33f0fc3d03dd9edc772832cd3d refs/pull/93/merge -d014df11b5c8e02d2a74fd906ff7ac4bed48c7bf refs/pull/930/head -8812102e8ed7e67f6a160b895f20fd8d03e4e46e refs/pull/931/head -3420ed4e28b2ceadfdc7568c78985ec7bfc2a1a8 refs/pull/932/head -1eb6aad0e48521e81806ae8a35827dde14c57f65 refs/pull/933/head -836242925492a78a4101af2f4c86cff7c4f23ed0 refs/pull/933/merge -32f498651ab0498d15d571fb3f7e2400fac1b7b9 refs/pull/9348/head -0b03af3f23d2f4febac6706fdf763cd9b5a3b696 refs/pull/9348/merge -15d25105010e41fc36e372919ccecf21ddc2456d refs/pull/9349/head -842aa5464cb5da1c2b22450eb0e1d31c54d3d9b3 refs/pull/9349/merge -cfdb9c4be9b54ec28dcb9f7bda7c1a96e08dc836 refs/pull/9350/head -197064c966c9e57fbb4fb68c8fc1934f07c03633 refs/pull/9350/merge -316529daeca6d0c0b17ea55f6eaa91e804d355a4 refs/pull/9351/head -9d6fb9edb073b6fbec8711ec3992503b050ba67e refs/pull/9351/merge -28bbf6250081e8c5dc12a8b3719f8c9d0bc82ff3 refs/pull/9352/head -f9c60d7f86de74c92f1326d0040aa460ae54e3e9 refs/pull/9352/merge -f1c374fc9a861b605a8938e1c1b36125b278fadd refs/pull/9357/head -0839bc49de325ebd79b08d95da0af8a7eb258df0 refs/pull/9358/head -b0273c8c85da2cf28fd283177a0bac8562ae39ba refs/pull/9359/head -b0273c8c85da2cf28fd283177a0bac8562ae39ba refs/pull/9360/head -6d8af7aa2a564fd49ed7041f881559002a4bb842 refs/pull/9360/merge -d0e7b02ad75ef8d0f087a89b6bc35133e6682daf refs/pull/9361/head -2058d57934da623ec87812f53991b89420feee25 refs/pull/9361/merge -e9c112e4113e255a51a8148239f8fcf04bf4e30e refs/pull/9364/head -e9c112e4113e255a51a8148239f8fcf04bf4e30e refs/pull/9365/head -fec5ddd7cb4ebec2bebdaabf7d690832fa9eaf01 refs/pull/9365/merge -e9e58cd58d596aa9b36fb5050bf9a17af32c7101 refs/pull/9366/head -bf8c1a42bc2724c82e864fef04edaa7922da359a refs/pull/9366/merge -215d608ce0f14c676a38856f51013a754bb0440a refs/pull/9371/head -6fd29be89dd6b61d1f37fd9688a0fda840dd2b95 refs/pull/9371/merge -9eb15346d180b0d28849f4648949c1af141c6cf6 refs/pull/9372/head -9b5d835725534b337c0b0d6bd7380019d9f6f574 refs/pull/9372/merge -a49192f28a38dda092c9a16a6c5750fa44a326aa refs/pull/9375/head -e550c1e91c938d1c33a8b013b70a35f7acb08d8b refs/pull/9375/merge -e5b57b0588b6a32757b550094f76f39dee153c8a refs/pull/9376/head -f558458ffe222bdb0f372fccd0d027b751734032 refs/pull/9376/merge -b6a0c3431fc4afc6ece237623b1b5b5e165e08b6 refs/pull/9377/head -174a2f0a88014dc01f91724a11a2656933665cd0 refs/pull/9377/merge -69cf0c3c8cc557a201fcd7fd11c844a4d0228e0a refs/pull/9379/head -2bc072b85b4028331f29e8c1f76450b972018ed4 refs/pull/9381/head -ce2e438bd4cf841f482d112454d7401f929ab954 refs/pull/9381/merge -8044a037d51675b5dab70529c08c1a67389a2ba2 refs/pull/9382/head -33b01b27f0201d8a5bf29cdd192b0586a0a6ea84 refs/pull/9382/merge -8d5ad5bd21d9569f0003cc79f2dd020ff9de65ab refs/pull/9388/head -b1e7a9f044dbbcea2cba46377a6fcd01f844d379 refs/pull/9388/merge -cc726465f0f210d8b7eb3c2cfdd1f8f133247a5b refs/pull/9389/head -8afcd335b856bafd48c92d62104217ca60d75596 refs/pull/9389/merge -2d81d69fd0d55b001c9e1400a8c7692787fd89e2 refs/pull/9390/head -f3d8bdb879fd2f3f0bd14052169ac5e68e8e55b8 refs/pull/9390/merge -ad47b38629244a4dc21a9e70aa820238e14b171a refs/pull/9392/head -d12f1ffc29ece2dbdac623b0b3e7dff86e11c4c8 refs/pull/9392/merge -5a4dcda13a4ac9776ecbaae3059f291a0038fe62 refs/pull/9393/head -8df88fdcd313dc35fdb126881dcd080b1ae9c771 refs/pull/9393/merge -4fdd6c258917aee89c3c2222c0ad48bf66511b6d refs/pull/9394/head -75df445abfb87bf04e1d55f9588bf4ef217805b2 refs/pull/9394/merge -a5c73eccf67d9b1b7f8de41d6a37afbcdec2a321 refs/pull/9395/head -7c3e272aeb71c9372247a053aabb6fd720ef997a refs/pull/9395/merge -da30fe512dc4129896d25e8ab986524e11d08e62 refs/pull/9397/head -777043706e543ac464abf578966ccc1a6c4ab7df refs/pull/9397/merge -01404bed830c0184696fa0515bb3fddfd086bd40 refs/pull/9399/head -f4bcbeb56c40cf6e48f9ab7a583fa5a652bdfe4d refs/pull/9399/merge -fe9e55f1ac8c6ea1117eb80154c941283cf53c7b refs/pull/94/head -e0d487ccea5571a8bb0411040d34faace76383de refs/pull/94/merge -90853e8fa960108991cba9d6fb1fa73caffbfb0e refs/pull/9400/head -c38b039c0a2625b2a55ae9017f542996ecba3c9c refs/pull/9400/merge -512b11aa28cef80aa39bce277a231da3b9815b90 refs/pull/9403/head -47885b9b2cf7543bc3bdd909088232883823b035 refs/pull/9403/merge -891b74dd963c4f036b10f3955cd3ae0a6b4ac8a9 refs/pull/9404/head -5869a54ba22a9d2bff75f16b6f8439831c10797f refs/pull/9404/merge -741c02b4a6454d33ade09b63e4b68234eb585d21 refs/pull/9405/head -55a2fdd4b687374dab2aa4300e10259c13d6a97f refs/pull/9405/merge -22cf89a8f1def062765f69ebbc89329ffffab63f refs/pull/9406/head -57b459456dd6d6ce5acfcf63aae9efcd87fd19b7 refs/pull/9406/merge -43b53408fec892ef004b6e637ecc00a45170cc74 refs/pull/9407/head -eb64bd5b7d35d9e9c16199cf0ae6c794bbd79b8e refs/pull/9407/merge -fef5aae4e34981700b82fe002319e790c7afea7f refs/pull/9410/head -1ceed76de8070287fc08b333597539249f6019ef refs/pull/9410/merge -2d5f179a6a34730768e98989c522e5fd5616eb77 refs/pull/9411/head -f4b74fef35577e238109646ef95f5ead291614f6 refs/pull/9411/merge -a2f188bf876b61d67bd7ec2e45ff9190717b384c refs/pull/9412/head -cc067bcf5d69a2c409740da5c5b9e4fef43ca974 refs/pull/9412/merge -6c4f65d24cff441ed21832cadc527ea77761fd93 refs/pull/9416/head -133d5615aa3b07a21eae01133524252a828359cd refs/pull/9416/merge -537f371a08b57c1a06936014b8390f40c930fc1f refs/pull/9417/head -dd2518380ef47dbd9720b4601719d4a063452659 refs/pull/9417/merge -6ec33d4ea0ab02adce2ec1d4cef5e32c6c8ee150 refs/pull/9419/head -98e47d7c49b1cfb648a7820ac98ef509f56b5c75 refs/pull/9419/merge -b688cd85a0e95e3bf4baafb4bb8f6d841975b21a refs/pull/942/head -ed73ec5fec13e5243b4af569dea068f80079ae5b refs/pull/942/merge -c8865cc5eadb6fae784ca7c92a80223e0756b7f3 refs/pull/9425/head -57b2b9084e67d21fec0227eb4ac23aa7758311bd refs/pull/9425/merge -2ebb95edc3c961d806a95b6e6012f47ce797276f refs/pull/9435/head -5f95e44ec326e163a62e1a318784d9ebea775cae refs/pull/9435/merge -f0f1905434fa6a05e5eea966997730ef1eb5de7c refs/pull/9440/head -e3993fcbdcdf79778f02da6400f9709b0f86e10e refs/pull/9441/head -d8a4aa9239872a57a9df68c1a7ee2866f9ce90d1 refs/pull/9442/head -11d1fd83124fbf18ff82461c7cd012ff0b9a51a3 refs/pull/9443/head -bbe18424e2fc078bedc26b82f7d01282995bf699 refs/pull/9443/merge -25b50db3fe79cd48caf6a86e4d4d4677fd3bff25 refs/pull/9448/head -4a2e9e42350b4b323126522e8b9a7a18500b86aa refs/pull/9448/merge -66f72649f5db6bfaf2f6847708a89f1f26ef3376 refs/pull/9451/head -3799fc021ab6e5cbf9ff1c80407ad52cc169b33d refs/pull/9451/merge -5388a640fadd5660f84d7bff82f642eee165304e refs/pull/9458/head -d03efd62fa1927747b80773ff3d992b0f40294ea refs/pull/9458/merge -6a362b87026f8228a34737c3eadf2693e85838fb refs/pull/9459/head -c7931be577670dec23fa3746de480dc23be48bd3 refs/pull/9459/merge -ed7728af10f79c4ffb91b13f48a4b46a5476d9be refs/pull/9464/head -89286890115cf93cdab7d2dcc5550e4a8ad3ccd7 refs/pull/9464/merge -f83305126f7944c0a95a86c8449b953d964af2ff refs/pull/9469/head -0c3f6bdf52e1d2f9701e29875930490f0f3c7fdf refs/pull/95/head -c8c3aa29ba53c72dd91d4374943da874a8567a3f refs/pull/95/merge -c5569d6b5b938c7a017915f797adc63faa22512e refs/pull/951/head -3e9c619ca6b96e8de680e7436d5f31fe7fd942a9 refs/pull/951/merge -a19f4cba3f10510e6cd47d1a4cb504011d371d43 refs/pull/952/head -6dbc3393e89647ccc765afa723a12c012afea499 refs/pull/952/merge -ebd52620412134ef22abe3289b11e7d3cbcd6a43 refs/pull/953/head -61936c835b5f128b9a0db6afccc5ca3697fdc2d4 refs/pull/953/merge -f7d6992ab0070e73b8c2c1cbf1da94152f4725d0 refs/pull/954/head -2eaf7beb6233db0cea3c1b66126bec8264ab6995 refs/pull/954/merge -1e2049759a3dab8fa1670fff6c4da2abba9a613f refs/pull/955/head -b51c799c9cc7ab7fa63c00ffc3cb5b04af32948c refs/pull/955/merge -92913d689a8cf4bcb2cd5ede732c8bc715490ce3 refs/pull/956/head -18374913ad0aa7445d9b7f673e34cd3f32b0b063 refs/pull/956/merge -949c75b760048746e3a3ef2210071ec550bbcef9 refs/pull/957/head -606ce60ef8e7b589f23610f61e952a6d057ed870 refs/pull/957/merge -238d1bd356f53bc66268f6fc37f64e6472fcb38b refs/pull/958/head -c4d79839673a07063ae58437b55a74c58126158f refs/pull/958/merge -10a0c5628f303f66813c2f4dad0ba310dae12146 refs/pull/959/head -baee92623b997b6d6664a8ecac126ad3d7af568a refs/pull/959/merge -17ca288a498da0d420fe2002579ff0c1d159a8c5 refs/pull/96/head -0b11e492b7f98346a719c713a0b8f6b806e1b5a6 refs/pull/96/merge -a13f96ba0cf6729a4a999ada752735535f92d7c9 refs/pull/960/head -c867aa4d9ad3ec73608cf77c47781b61421cd4b1 refs/pull/961/head -2c9392d1cc7f9586bb6386eae4912d975f1fbef5 refs/pull/961/merge -2b6fbd93a7e7be52136945351dfe2dc5ccc31bd3 refs/pull/962/head -03a989a255c3ecf33fe5e1611695d5faa9188391 refs/pull/962/merge -7f5b263a5bf2d3ad7a91bc0235f76a77a0cebf57 refs/pull/963/head -43314edc3f8ee4d1323f9a724d8a18b735d1afdb refs/pull/963/merge -b1b3f9723831141a31a1a7252a213e216ea76e56 refs/pull/965/head -fd44950689bb5924b0745a5c9edc8e69086535d9 refs/pull/989/head -ed517357a4d13862cee7fe4d5a34eab71fd01f66 refs/pull/99/head -eb4649ced0ea548847a1e82827e099656b104ca8 refs/pull/99/merge -8bc6d2aa7f6cb9387d36928a2f3bb83a2cf54478 refs/pull/992/head -9f81418f73fbebff5974c33bd705eaa8957f1dfc refs/pull/997/head -7f951a24c1a3e83ce53230e80f243b7a5585ddb6 refs/pull/997/merge diff --git a/.repos/3/my-project.git/HEAD b/.repos/3/my-project.git/HEAD deleted file mode 100644 index cb089cd..0000000 --- a/.repos/3/my-project.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/.repos/3/my-project.git/config b/.repos/3/my-project.git/config deleted file mode 100644 index e6da231..0000000 --- a/.repos/3/my-project.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/.repos/3/my-project.git/description b/.repos/3/my-project.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/3/my-project.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/3/my-project.git/hooks/applypatch-msg.sample b/.repos/3/my-project.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/3/my-project.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/commit-msg.sample b/.repos/3/my-project.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/3/my-project.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/3/my-project.git/hooks/fsmonitor-watchman.sample b/.repos/3/my-project.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/3/my-project.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/3/my-project.git/hooks/post-update.sample b/.repos/3/my-project.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/3/my-project.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-applypatch.sample b/.repos/3/my-project.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/3/my-project.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-commit.sample b/.repos/3/my-project.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/3/my-project.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-merge-commit.sample b/.repos/3/my-project.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/3/my-project.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-push.sample b/.repos/3/my-project.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/3/my-project.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-rebase.sample b/.repos/3/my-project.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/3/my-project.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/pre-receive.sample b/.repos/3/my-project.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/3/my-project.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/prepare-commit-msg.sample b/.repos/3/my-project.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/3/my-project.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/push-to-checkout.sample b/.repos/3/my-project.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/3/my-project.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/3/my-project.git/hooks/update.sample b/.repos/3/my-project.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/3/my-project.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/3/my-project.git/info/exclude b/.repos/3/my-project.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/3/my-project.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/test.git/HEAD b/.repos/3/test.git/HEAD deleted file mode 100644 index cb089cd..0000000 --- a/.repos/3/test.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/master diff --git a/.repos/3/test.git/config b/.repos/3/test.git/config deleted file mode 100644 index e6da231..0000000 --- a/.repos/3/test.git/config +++ /dev/null @@ -1,6 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true diff --git a/.repos/3/test.git/description b/.repos/3/test.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/3/test.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/3/test.git/hooks/applypatch-msg.sample b/.repos/3/test.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/3/test.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/3/test.git/hooks/commit-msg.sample b/.repos/3/test.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/3/test.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/3/test.git/hooks/fsmonitor-watchman.sample b/.repos/3/test.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/3/test.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/3/test.git/hooks/post-update.sample b/.repos/3/test.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/3/test.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-applypatch.sample b/.repos/3/test.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/3/test.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-commit.sample b/.repos/3/test.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/3/test.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-merge-commit.sample b/.repos/3/test.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/3/test.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-push.sample b/.repos/3/test.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/3/test.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-rebase.sample b/.repos/3/test.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/3/test.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/3/test.git/hooks/pre-receive.sample b/.repos/3/test.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/3/test.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/3/test.git/hooks/prepare-commit-msg.sample b/.repos/3/test.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/3/test.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/3/test.git/hooks/push-to-checkout.sample b/.repos/3/test.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/3/test.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/3/test.git/hooks/update.sample b/.repos/3/test.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/3/test.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/3/test.git/info/exclude b/.repos/3/test.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/3/test.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/with-readme.git/HEAD b/.repos/3/with-readme.git/HEAD deleted file mode 100644 index b870d82..0000000 --- a/.repos/3/with-readme.git/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.repos/3/with-readme.git/config b/.repos/3/with-readme.git/config deleted file mode 100644 index 72cf9b5..0000000 --- a/.repos/3/with-readme.git/config +++ /dev/null @@ -1,8 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = true - bare = true - ignorecase = true - precomposeunicode = true -[http] - receivepack = true diff --git a/.repos/3/with-readme.git/description b/.repos/3/with-readme.git/description deleted file mode 100644 index 498b267..0000000 --- a/.repos/3/with-readme.git/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.repos/3/with-readme.git/hooks/applypatch-msg.sample b/.repos/3/with-readme.git/hooks/applypatch-msg.sample deleted file mode 100755 index a5d7b84..0000000 --- a/.repos/3/with-readme.git/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/commit-msg.sample b/.repos/3/with-readme.git/hooks/commit-msg.sample deleted file mode 100755 index f7458ef..0000000 --- a/.repos/3/with-readme.git/hooks/commit-msg.sample +++ /dev/null @@ -1,74 +0,0 @@ -#!/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 and messages that -# would confuse 'git am'. - -ret=0 - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - ret=1 -} - -comment_re="$( - { - git config --get-regexp "^core\.comment(char|string)\$" || - echo '#' - } | sed -n -e ' - ${ - s/^[^ ]* // - s|[][*./\]|\\&|g - s/^auto$/[#;@!$%^&|:]/ - p - }' -)" -scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" -comment_line="^${comment_re}.*" -blank_line='^[ ]*$' -# Disallow lines starting with "diff -" or "Index: " in the body of the -# message. Stop looking if we see a scissors line. -line="$(sed -n -e " - # Skip comments and blank lines at the start of the file. - /${scissors_line}/q - /${comment_line}/d - /${blank_line}/d - # The first paragraph will become the subject header so - # does not need to be checked. - : subject - n - /${scissors_line}/q - /${blank_line}/!b subject - # Check the body of the message for problematic - # prefixes. - : body - n - /${scissors_line}/q - /${comment_line}/b body - /^diff -/{p;q;} - /^Index: /{p;q;} - b body - " "$1")" -if test -n "$line" -then - echo >&2 "Message contains a diff that will confuse 'git am'." - echo >&2 "To fix this indent the diff." - ret=1 -fi - -exit $ret diff --git a/.repos/3/with-readme.git/hooks/fsmonitor-watchman.sample b/.repos/3/with-readme.git/hooks/fsmonitor-watchman.sample deleted file mode 100755 index 429e0a5..0000000 --- a/.repos/3/with-readme.git/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 $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 ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - 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 = $o->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - 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/.repos/3/with-readme.git/hooks/post-update.sample b/.repos/3/with-readme.git/hooks/post-update.sample deleted file mode 100755 index ec17ec1..0000000 --- a/.repos/3/with-readme.git/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-applypatch.sample b/.repos/3/with-readme.git/hooks/pre-applypatch.sample deleted file mode 100755 index 4142082..0000000 --- a/.repos/3/with-readme.git/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-commit.sample b/.repos/3/with-readme.git/hooks/pre-commit.sample deleted file mode 100755 index 29ed5ee..0000000 --- a/.repos/3/with-readme.git/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-merge-commit.sample b/.repos/3/with-readme.git/hooks/pre-merge-commit.sample deleted file mode 100755 index 399eab1..0000000 --- a/.repos/3/with-readme.git/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-push.sample b/.repos/3/with-readme.git/hooks/pre-push.sample deleted file mode 100755 index 4ce688d..0000000 --- a/.repos/3/with-readme.git/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-rebase.sample b/.repos/3/with-readme.git/hooks/pre-rebase.sample deleted file mode 100755 index 6cbef5c..0000000 --- a/.repos/3/with-readme.git/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/pre-receive.sample b/.repos/3/with-readme.git/hooks/pre-receive.sample deleted file mode 100755 index a1fd29e..0000000 --- a/.repos/3/with-readme.git/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/prepare-commit-msg.sample b/.repos/3/with-readme.git/hooks/prepare-commit-msg.sample deleted file mode 100755 index 10fa14c..0000000 --- a/.repos/3/with-readme.git/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/push-to-checkout.sample b/.repos/3/with-readme.git/hooks/push-to-checkout.sample deleted file mode 100755 index af5a0c0..0000000 --- a/.repos/3/with-readme.git/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/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/.repos/3/with-readme.git/hooks/update.sample b/.repos/3/with-readme.git/hooks/update.sample deleted file mode 100755 index c4d426b..0000000 --- a/.repos/3/with-readme.git/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/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/.repos/3/with-readme.git/info/exclude b/.repos/3/with-readme.git/info/exclude deleted file mode 100644 index a5196d1..0000000 --- a/.repos/3/with-readme.git/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# 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/.repos/3/with-readme.git/objects/6a/30661d66bf203342c844b48e844930d409dfec b/.repos/3/with-readme.git/objects/6a/30661d66bf203342c844b48e844930d409dfec deleted file mode 100644 index 89ebfa9..0000000 --- a/.repos/3/with-readme.git/objects/6a/30661d66bf203342c844b48e844930d409dfec +++ /dev/null @@ -1 +0,0 @@ -xMPÍNÃ0 朧0ê™JÀqDC ICšÄx€´±V£,îlGÓÞ¯e”[œÏߟ»Ì<>?Ý4p"îc:`M¯¨½ÐhÄ%„—”àÌU`þÆÞ -( (ØNœw4£²‡O‹b˜. lÅñc%%C aCjW­À¢ÒÀº¨Åœãì}ßÂ*sA°Apdb9‡‡Þ8g>¢ÕÈYRû ÉmÜøKãÞ»ÌE:„ÁW¡*^ý§.sôêê%ËäbᄹçÞÂ6ct±@,@ªÕ'¿LÍÙã+ªÍ’걨'Ø ¤—ógžµ$”©×Çz¿ûmøÞä‰ \ No newline at end of file diff --git a/.repos/3/with-readme.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e b/.repos/3/with-readme.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e deleted file mode 100644 index 52838cc..0000000 Binary files a/.repos/3/with-readme.git/objects/9e/6c25476528a6cca73e5abe82eda3a27a32269e and /dev/null differ diff --git a/.repos/3/with-readme.git/objects/b9/f467b162fba67970adb4d2480bf42b8c677a91 b/.repos/3/with-readme.git/objects/b9/f467b162fba67970adb4d2480bf42b8c677a91 deleted file mode 100644 index 02a55d0..0000000 Binary files a/.repos/3/with-readme.git/objects/b9/f467b162fba67970adb4d2480bf42b8c677a91 and /dev/null differ diff --git a/.repos/3/with-readme.git/objects/c9/e76394436f7f06c60d2d47d56fb2e657cdfb02 b/.repos/3/with-readme.git/objects/c9/e76394436f7f06c60d2d47d56fb2e657cdfb02 deleted file mode 100644 index e4e86f9..0000000 Binary files a/.repos/3/with-readme.git/objects/c9/e76394436f7f06c60d2d47d56fb2e657cdfb02 and /dev/null differ diff --git a/.repos/3/with-readme.git/refs/heads/main b/.repos/3/with-readme.git/refs/heads/main deleted file mode 100644 index e7b85cb..0000000 --- a/.repos/3/with-readme.git/refs/heads/main +++ /dev/null @@ -1 +0,0 @@ -c9e76394436f7f06c60d2d47d56fb2e657cdfb02 diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index d172c38..81d7533 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -5,7 +5,7 @@ services: environment: POSTGRES_DB: forgebucket POSTGRES_USER: forgebucket - POSTGRES_PASSWORD: password + POSTGRES_PASSWORD: forgebucket volumes: - postgres_data:/var/lib/postgresql healthcheck: @@ -22,7 +22,7 @@ services: condition: service_healthy env_file: .env environment: - DATABASE_URL: postgres://forgebucket:password@postgres:5432/forgebucket?sslmode=disable + DATABASE_URL: postgres://forgebucket:forgebucket@postgres:5432/forgebucket?sslmode=disable ports: - "8080:8080" volumes: diff --git a/frontend/.vite/deps/@tanstack_react-query.js b/frontend/.vite/deps/@tanstack_react-query.js new file mode 100644 index 0000000..5a2f135 --- /dev/null +++ b/frontend/.vite/deps/@tanstack_react-query.js @@ -0,0 +1,3081 @@ +import { r as __toESM, t as __commonJSMin } from "./chunk-CYJPkc-J.js"; +import { t as require_react } from "./react.js"; +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/subscribable.js +var Subscribable = class { + constructor() { + this.listeners = /* @__PURE__ */ new Set(); + this.subscribe = this.subscribe.bind(this); + } + subscribe(listener) { + this.listeners.add(listener); + this.onSubscribe(); + return () => { + this.listeners.delete(listener); + this.onUnsubscribe(); + }; + } + hasListeners() { + return this.listeners.size > 0; + } + onSubscribe() {} + onUnsubscribe() {} +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/focusManager.js +var FocusManager = class extends Subscribable { + #focused; + #cleanup; + #setup; + constructor() { + super(); + this.#setup = (onFocus) => { + if (typeof window !== "undefined" && window.addEventListener) { + const listener = () => onFocus(); + window.addEventListener("visibilitychange", listener, false); + return () => { + window.removeEventListener("visibilitychange", listener); + }; + } + }; + } + onSubscribe() { + if (!this.#cleanup) this.setEventListener(this.#setup); + } + onUnsubscribe() { + if (!this.hasListeners()) { + this.#cleanup?.(); + this.#cleanup = void 0; + } + } + setEventListener(setup) { + this.#setup = setup; + this.#cleanup?.(); + this.#cleanup = setup((focused) => { + if (typeof focused === "boolean") this.setFocused(focused); + else this.onFocus(); + }); + } + setFocused(focused) { + if (this.#focused !== focused) { + this.#focused = focused; + this.onFocus(); + } + } + onFocus() { + const isFocused = this.isFocused(); + this.listeners.forEach((listener) => { + listener(isFocused); + }); + } + isFocused() { + if (typeof this.#focused === "boolean") return this.#focused; + return globalThis.document?.visibilityState !== "hidden"; + } +}; +var focusManager = new FocusManager(); +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/timeoutManager.js +var defaultTimeoutProvider = { + setTimeout: (callback, delay) => setTimeout(callback, delay), + clearTimeout: (timeoutId) => clearTimeout(timeoutId), + setInterval: (callback, delay) => setInterval(callback, delay), + clearInterval: (intervalId) => clearInterval(intervalId) +}; +var TimeoutManager = class { + #provider = defaultTimeoutProvider; + #providerCalled = false; + setTimeoutProvider(provider) { + if (this.#providerCalled && provider !== this.#provider) console.error(`[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`, { + previous: this.#provider, + provider + }); + this.#provider = provider; + this.#providerCalled = false; + } + setTimeout(callback, delay) { + this.#providerCalled = true; + return this.#provider.setTimeout(callback, delay); + } + clearTimeout(timeoutId) { + this.#provider.clearTimeout(timeoutId); + } + setInterval(callback, delay) { + this.#providerCalled = true; + return this.#provider.setInterval(callback, delay); + } + clearInterval(intervalId) { + this.#provider.clearInterval(intervalId); + } +}; +var timeoutManager = new TimeoutManager(); +function systemSetTimeoutZero(callback) { + setTimeout(callback, 0); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/utils.js +var isServer = typeof window === "undefined" || "Deno" in globalThis; +function noop() {} +function functionalUpdate(updater, input) { + return typeof updater === "function" ? updater(input) : updater; +} +function isValidTimeout(value) { + return typeof value === "number" && value >= 0 && value !== Infinity; +} +function timeUntilStale(updatedAt, staleTime) { + return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0); +} +function resolveStaleTime(staleTime, query) { + return typeof staleTime === "function" ? staleTime(query) : staleTime; +} +function resolveQueryBoolean(option, query) { + return typeof option === "function" ? option(query) : option; +} +function matchQuery(filters, query) { + const { type = "all", exact, fetchStatus, predicate, queryKey, stale } = filters; + if (queryKey) { + if (exact) { + if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) return false; + } else if (!partialMatchKey(query.queryKey, queryKey)) return false; + } + if (type !== "all") { + const isActive = query.isActive(); + if (type === "active" && !isActive) return false; + if (type === "inactive" && isActive) return false; + } + if (typeof stale === "boolean" && query.isStale() !== stale) return false; + if (fetchStatus && fetchStatus !== query.state.fetchStatus) return false; + if (predicate && !predicate(query)) return false; + return true; +} +function matchMutation(filters, mutation) { + const { exact, status, predicate, mutationKey } = filters; + if (mutationKey) { + if (!mutation.options.mutationKey) return false; + if (exact) { + if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) return false; + } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) return false; + } + if (status && mutation.state.status !== status) return false; + if (predicate && !predicate(mutation)) return false; + return true; +} +function hashQueryKeyByOptions(queryKey, options) { + return (options?.queryKeyHashFn || hashKey)(queryKey); +} +function hashKey(queryKey) { + return JSON.stringify(queryKey, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => { + result[key] = val[key]; + return result; + }, {}) : val); +} +function partialMatchKey(a, b) { + if (a === b) return true; + if (typeof a !== typeof b) return false; + if (a && b && typeof a === "object" && typeof b === "object") return Object.keys(b).every((key) => partialMatchKey(a[key], b[key])); + return false; +} +var hasOwn = Object.prototype.hasOwnProperty; +function replaceEqualDeep(a, b, depth = 0) { + if (a === b) return a; + if (depth > 500) return b; + const array = isPlainArray(a) && isPlainArray(b); + if (!array && !(isPlainObject(a) && isPlainObject(b))) return b; + const aSize = (array ? a : Object.keys(a)).length; + const bItems = array ? b : Object.keys(b); + const bSize = bItems.length; + const copy = array ? new Array(bSize) : {}; + let equalItems = 0; + for (let i = 0; i < bSize; i++) { + const key = array ? i : bItems[i]; + const aItem = a[key]; + const bItem = b[key]; + if (aItem === bItem) { + copy[key] = aItem; + if (array ? i < aSize : hasOwn.call(a, key)) equalItems++; + continue; + } + if (aItem === null || bItem === null || typeof aItem !== "object" || typeof bItem !== "object") { + copy[key] = bItem; + continue; + } + const v = replaceEqualDeep(aItem, bItem, depth + 1); + copy[key] = v; + if (v === aItem) equalItems++; + } + return aSize === bSize && equalItems === aSize ? a : copy; +} +function shallowEqualObjects(a, b) { + if (!b || Object.keys(a).length !== Object.keys(b).length) return false; + for (const key in a) if (a[key] !== b[key]) return false; + return true; +} +function isPlainArray(value) { + return Array.isArray(value) && value.length === Object.keys(value).length; +} +function isPlainObject(o) { + if (!hasObjectPrototype(o)) return false; + const ctor = o.constructor; + if (ctor === void 0) return true; + const prot = ctor.prototype; + if (!hasObjectPrototype(prot)) return false; + if (!prot.hasOwnProperty("isPrototypeOf")) return false; + if (Object.getPrototypeOf(o) !== Object.prototype) return false; + return true; +} +function hasObjectPrototype(o) { + return Object.prototype.toString.call(o) === "[object Object]"; +} +function sleep(timeout) { + return new Promise((resolve) => { + timeoutManager.setTimeout(resolve, timeout); + }); +} +function replaceData(prevData, data, options) { + if (typeof options.structuralSharing === "function") return options.structuralSharing(prevData, data); + else if (options.structuralSharing !== false) { + try { + return replaceEqualDeep(prevData, data); + } catch (error) { + console.error(`Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`); + throw error; + } + return replaceEqualDeep(prevData, data); + } + return data; +} +function keepPreviousData(previousData) { + return previousData; +} +function addToEnd(items, item, max = 0) { + const newItems = [...items, item]; + return max && newItems.length > max ? newItems.slice(1) : newItems; +} +function addToStart(items, item, max = 0) { + const newItems = [item, ...items]; + return max && newItems.length > max ? newItems.slice(0, -1) : newItems; +} +var skipToken = /* @__PURE__ */ Symbol(); +function ensureQueryFn(options, fetchOptions) { + if (options.queryFn === skipToken) console.error(`Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`); + if (!options.queryFn && fetchOptions?.initialPromise) return () => fetchOptions.initialPromise; + if (!options.queryFn || options.queryFn === skipToken) return () => Promise.reject(/* @__PURE__ */ new Error(`Missing queryFn: '${options.queryHash}'`)); + return options.queryFn; +} +function shouldThrowError(throwOnError, params) { + if (typeof throwOnError === "function") return throwOnError(...params); + return !!throwOnError; +} +function addConsumeAwareSignal(object, getSignal, onCancelled) { + let consumed = false; + let signal; + Object.defineProperty(object, "signal", { + enumerable: true, + get: () => { + signal ??= getSignal(); + if (consumed) return signal; + consumed = true; + if (signal.aborted) onCancelled(); + else signal.addEventListener("abort", onCancelled, { once: true }); + return signal; + } + }); + return object; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/environmentManager.js +var environmentManager = /* @__PURE__ */ (() => { + let isServerFn = () => isServer; + return { + /** + * Returns whether the current runtime should be treated as a server environment. + */ + isServer() { + return isServerFn(); + }, + /** + * Overrides the server check globally. + */ + setIsServer(isServerValue) { + isServerFn = isServerValue; + } + }; +})(); +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/thenable.js +function pendingThenable() { + let resolve; + let reject; + const thenable = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + thenable.status = "pending"; + thenable.catch(() => {}); + function finalize(data) { + Object.assign(thenable, data); + delete thenable.resolve; + delete thenable.reject; + } + thenable.resolve = (value) => { + finalize({ + status: "fulfilled", + value + }); + resolve(value); + }; + thenable.reject = (reason) => { + finalize({ + status: "rejected", + reason + }); + reject(reason); + }; + return thenable; +} +function tryResolveSync(promise) { + let data; + promise.then((result) => { + data = result; + return result; + }, noop)?.catch(noop); + if (data !== void 0) return { data }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/hydration.js +function defaultTransformerFn(data) { + return data; +} +function dehydrateMutation(mutation) { + return { + mutationKey: mutation.options.mutationKey, + state: mutation.state, + ...mutation.options.scope && { scope: mutation.options.scope }, + ...mutation.meta && { meta: mutation.meta } + }; +} +function dehydrateQuery(query, serializeData, shouldRedactErrors) { + const dehydratePromise = () => { + const promise = query.promise?.then(serializeData).catch((error) => { + if (!shouldRedactErrors(error)) return Promise.reject(error); + console.error(`A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`); + return Promise.reject(/* @__PURE__ */ new Error("redacted")); + }); + promise?.catch(noop); + return promise; + }; + return { + dehydratedAt: Date.now(), + state: { + ...query.state, + ...query.state.data !== void 0 && { data: serializeData(query.state.data) } + }, + queryKey: query.queryKey, + queryHash: query.queryHash, + ...query.state.status === "pending" && { promise: dehydratePromise() }, + ...query.meta && { meta: query.meta }, + ...query.queryType && { queryType: query.queryType } + }; +} +function defaultShouldDehydrateMutation(mutation) { + return mutation.state.isPaused; +} +function defaultShouldDehydrateQuery(query) { + return query.state.status === "success"; +} +function defaultShouldRedactErrors(_) { + return true; +} +function dehydrate(client, options = {}) { + const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation; + const mutations = client.getMutationCache().getAll().flatMap((mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []); + const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery; + const shouldRedactErrors = options.shouldRedactErrors ?? client.getDefaultOptions().dehydrate?.shouldRedactErrors ?? defaultShouldRedactErrors; + const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn; + return { + mutations, + queries: client.getQueryCache().getAll().flatMap((query) => filterQuery(query) ? [dehydrateQuery(query, serializeData, shouldRedactErrors)] : []) + }; +} +function hydrate(client, dehydratedState, options) { + if (typeof dehydratedState !== "object" || dehydratedState === null) return; + const mutationCache = client.getMutationCache(); + const queryCache = client.getQueryCache(); + const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn; + const mutations = dehydratedState.mutations || []; + const queries = dehydratedState.queries || []; + mutations.forEach(({ state, ...mutationOptions }) => { + mutationCache.build(client, { + ...client.getDefaultOptions().hydrate?.mutations, + ...options?.defaultOptions?.mutations, + ...mutationOptions + }, state); + }); + queries.forEach(({ queryKey, state, queryHash, meta, promise, dehydratedAt, queryType }) => { + const syncData = promise ? tryResolveSync(promise) : void 0; + const rawData = state.data === void 0 ? syncData?.data : state.data; + const data = rawData === void 0 ? rawData : deserializeData(rawData); + let query = queryCache.get(queryHash); + const existingQueryIsPending = query?.state.status === "pending"; + const existingQueryIsFetching = query?.state.fetchStatus === "fetching"; + if (query) { + const hasNewerSyncData = syncData && dehydratedAt !== void 0 && dehydratedAt > query.state.dataUpdatedAt; + if (state.dataUpdatedAt > query.state.dataUpdatedAt || hasNewerSyncData) { + const { fetchStatus: _ignored, ...serializedState } = state; + query.setState({ + ...serializedState, + data, + ...state.status === "pending" && data !== void 0 && { + status: "success", + ...!existingQueryIsFetching && { fetchStatus: "idle" } + } + }); + } + } else query = queryCache.build(client, { + ...client.getDefaultOptions().hydrate?.queries, + ...options?.defaultOptions?.queries, + queryKey, + queryHash, + meta, + _type: queryType + }, { + ...state, + data, + fetchStatus: "idle", + status: state.status === "pending" && data !== void 0 ? "success" : state.status + }); + if (promise && !syncData && !existingQueryIsPending && !existingQueryIsFetching && (dehydratedAt === void 0 || dehydratedAt > query.state.dataUpdatedAt)) query.fetch(void 0, { initialPromise: Promise.resolve(promise).then(deserializeData) }).catch(noop); + }); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/notifyManager.js +var defaultScheduler = systemSetTimeoutZero; +function createNotifyManager() { + let queue = []; + let transactions = 0; + let notifyFn = (callback) => { + callback(); + }; + let batchNotifyFn = (callback) => { + callback(); + }; + let scheduleFn = defaultScheduler; + const schedule = (callback) => { + if (transactions) queue.push(callback); + else scheduleFn(() => { + notifyFn(callback); + }); + }; + const flush = () => { + const originalQueue = queue; + queue = []; + if (originalQueue.length) scheduleFn(() => { + batchNotifyFn(() => { + originalQueue.forEach((callback) => { + notifyFn(callback); + }); + }); + }); + }; + return { + batch: (callback) => { + let result; + transactions++; + try { + result = callback(); + } finally { + transactions--; + if (!transactions) flush(); + } + return result; + }, + /** + * All calls to the wrapped function will be batched. + */ + batchCalls: (callback) => { + return (...args) => { + schedule(() => { + callback(...args); + }); + }; + }, + schedule, + /** + * Use this method to set a custom notify function. + * This can be used to for example wrap notifications with `React.act` while running tests. + */ + setNotifyFunction: (fn) => { + notifyFn = fn; + }, + /** + * Use this method to set a custom function to batch notifications together into a single tick. + * By default React Query will use the batch function provided by ReactDOM or React Native. + */ + setBatchNotifyFunction: (fn) => { + batchNotifyFn = fn; + }, + setScheduler: (fn) => { + scheduleFn = fn; + } + }; +} +var notifyManager = createNotifyManager(); +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/onlineManager.js +var OnlineManager = class extends Subscribable { + #online = true; + #cleanup; + #setup; + constructor() { + super(); + this.#setup = (onOnline) => { + if (typeof window !== "undefined" && window.addEventListener) { + const onlineListener = () => onOnline(true); + const offlineListener = () => onOnline(false); + window.addEventListener("online", onlineListener, false); + window.addEventListener("offline", offlineListener, false); + return () => { + window.removeEventListener("online", onlineListener); + window.removeEventListener("offline", offlineListener); + }; + } + }; + } + onSubscribe() { + if (!this.#cleanup) this.setEventListener(this.#setup); + } + onUnsubscribe() { + if (!this.hasListeners()) { + this.#cleanup?.(); + this.#cleanup = void 0; + } + } + setEventListener(setup) { + this.#setup = setup; + this.#cleanup?.(); + this.#cleanup = setup(this.setOnline.bind(this)); + } + setOnline(online) { + if (this.#online !== online) { + this.#online = online; + this.listeners.forEach((listener) => { + listener(online); + }); + } + } + isOnline() { + return this.#online; + } +}; +var onlineManager = new OnlineManager(); +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/retryer.js +function defaultRetryDelay(failureCount) { + return Math.min(1e3 * 2 ** failureCount, 3e4); +} +function canFetch(networkMode) { + return (networkMode ?? "online") === "online" ? onlineManager.isOnline() : true; +} +var CancelledError = class extends Error { + constructor(options) { + super("CancelledError"); + this.revert = options?.revert; + this.silent = options?.silent; + } +}; +function isCancelledError(value) { + return value instanceof CancelledError; +} +function createRetryer(config) { + let isRetryCancelled = false; + let failureCount = 0; + let continueFn; + const thenable = pendingThenable(); + const isResolved = () => thenable.status !== "pending"; + const cancel = (cancelOptions) => { + if (!isResolved()) { + const error = new CancelledError(cancelOptions); + reject(error); + config.onCancel?.(error); + } + }; + const cancelRetry = () => { + isRetryCancelled = true; + }; + const continueRetry = () => { + isRetryCancelled = false; + }; + const canContinue = () => focusManager.isFocused() && (config.networkMode === "always" || onlineManager.isOnline()) && config.canRun(); + const canStart = () => canFetch(config.networkMode) && config.canRun(); + const resolve = (value) => { + if (!isResolved()) { + continueFn?.(); + thenable.resolve(value); + } + }; + const reject = (value) => { + if (!isResolved()) { + continueFn?.(); + thenable.reject(value); + } + }; + const pause = () => { + return new Promise((continueResolve) => { + continueFn = (value) => { + if (isResolved() || canContinue()) continueResolve(value); + }; + config.onPause?.(); + }).then(() => { + continueFn = void 0; + if (!isResolved()) config.onContinue?.(); + }); + }; + const run = () => { + if (isResolved()) return; + let promiseOrValue; + const initialPromise = failureCount === 0 ? config.initialPromise : void 0; + try { + promiseOrValue = initialPromise ?? config.fn(); + } catch (error) { + promiseOrValue = Promise.reject(error); + } + Promise.resolve(promiseOrValue).then(resolve).catch((error) => { + if (isResolved()) return; + const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3); + const retryDelay = config.retryDelay ?? defaultRetryDelay; + const delay = typeof retryDelay === "function" ? retryDelay(failureCount, error) : retryDelay; + const shouldRetry = retry === true || typeof retry === "number" && failureCount < retry || typeof retry === "function" && retry(failureCount, error); + if (isRetryCancelled || !shouldRetry) { + reject(error); + return; + } + failureCount++; + config.onFail?.(failureCount, error); + sleep(delay).then(() => { + return canContinue() ? void 0 : pause(); + }).then(() => { + if (isRetryCancelled) reject(error); + else run(); + }); + }); + }; + return { + promise: thenable, + status: () => thenable.status, + cancel, + continue: () => { + continueFn?.(); + return thenable; + }, + cancelRetry, + continueRetry, + canStart, + start: () => { + if (canStart()) run(); + else pause().then(run); + return thenable; + } + }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/removable.js +var Removable = class { + #gcTimeout; + destroy() { + this.clearGcTimeout(); + } + scheduleGc() { + this.clearGcTimeout(); + if (isValidTimeout(this.gcTime)) this.#gcTimeout = timeoutManager.setTimeout(() => { + this.optionalRemove(); + }, this.gcTime); + } + updateGcTime(newGcTime) { + this.gcTime = Math.max(this.gcTime || 0, newGcTime ?? (environmentManager.isServer() ? Infinity : 300 * 1e3)); + } + clearGcTimeout() { + if (this.#gcTimeout !== void 0) { + timeoutManager.clearTimeout(this.#gcTimeout); + this.#gcTimeout = void 0; + } + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js +function infiniteQueryBehavior(pages) { + return { onFetch: (context, query) => { + const options = context.options; + const direction = context.fetchOptions?.meta?.fetchMore?.direction; + const oldPages = context.state.data?.pages || []; + const oldPageParams = context.state.data?.pageParams || []; + let result = { + pages: [], + pageParams: [] + }; + let currentPage = 0; + const fetchFn = async () => { + let cancelled = false; + const addSignalProperty = (object) => { + addConsumeAwareSignal(object, () => context.signal, () => cancelled = true); + }; + const queryFn = ensureQueryFn(context.options, context.fetchOptions); + const fetchPage = async (data, param, previous) => { + if (cancelled) return Promise.reject(context.signal.reason); + if (param == null && data.pages.length) return Promise.resolve(data); + const createQueryFnContext = () => { + const queryFnContext2 = { + client: context.client, + queryKey: context.queryKey, + pageParam: param, + direction: previous ? "backward" : "forward", + meta: context.options.meta + }; + addSignalProperty(queryFnContext2); + return queryFnContext2; + }; + const page = await queryFn(createQueryFnContext()); + const { maxPages } = context.options; + const addTo = previous ? addToStart : addToEnd; + return { + pages: addTo(data.pages, page, maxPages), + pageParams: addTo(data.pageParams, param, maxPages) + }; + }; + if (direction && oldPages.length) { + const previous = direction === "backward"; + const pageParamFn = previous ? getPreviousPageParam : getNextPageParam; + const oldData = { + pages: oldPages, + pageParams: oldPageParams + }; + result = await fetchPage(oldData, pageParamFn(options, oldData), previous); + } else { + const remainingPages = pages ?? oldPages.length; + do { + const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result); + if (currentPage > 0 && param == null) break; + result = await fetchPage(result, param); + currentPage++; + } while (currentPage < remainingPages); + } + return result; + }; + if (context.options.persister) context.fetchFn = () => { + return context.options.persister?.(fetchFn, { + client: context.client, + queryKey: context.queryKey, + meta: context.options.meta, + signal: context.signal + }, query); + }; + else context.fetchFn = fetchFn; + } }; +} +function getNextPageParam(options, { pages, pageParams }) { + const lastIndex = pages.length - 1; + return pages.length > 0 ? options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams) : void 0; +} +function getPreviousPageParam(options, { pages, pageParams }) { + return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0; +} +function hasNextPage(options, data) { + if (!data) return false; + return getNextPageParam(options, data) != null; +} +function hasPreviousPage(options, data) { + if (!data || !options.getPreviousPageParam) return false; + return getPreviousPageParam(options, data) != null; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/query.js +var Query = class extends Removable { + #queryType; + #initialState; + #revertState; + #cache; + #client; + #retryer; + #defaultOptions; + #abortSignalConsumed; + constructor(config) { + super(); + this.#abortSignalConsumed = false; + this.#defaultOptions = config.defaultOptions; + this.setOptions(config.options); + this.observers = []; + this.#client = config.client; + this.#cache = this.#client.getQueryCache(); + this.queryKey = config.queryKey; + this.queryHash = config.queryHash; + this.#initialState = getDefaultState$1(this.options); + this.state = config.state ?? this.#initialState; + this.scheduleGc(); + } + get meta() { + return this.options.meta; + } + get queryType() { + return this.#queryType; + } + get promise() { + return this.#retryer?.promise; + } + setOptions(options) { + this.options = { + ...this.#defaultOptions, + ...options + }; + if (options?._type) this.#queryType = options._type; + this.updateGcTime(this.options.gcTime); + if (this.state && this.state.data === void 0) { + const defaultState = getDefaultState$1(this.options); + if (defaultState.data !== void 0) { + this.setState(successState(defaultState.data, defaultState.dataUpdatedAt)); + this.#initialState = defaultState; + } + } + } + optionalRemove() { + if (!this.observers.length && this.state.fetchStatus === "idle") this.#cache.remove(this); + } + setData(newData, options) { + const data = replaceData(this.state.data, newData, this.options); + this.#dispatch({ + data, + type: "success", + dataUpdatedAt: options?.updatedAt, + manual: options?.manual + }); + return data; + } + setState(state) { + this.#dispatch({ + type: "setState", + state + }); + } + cancel(options) { + const promise = this.#retryer?.promise; + this.#retryer?.cancel(options); + return promise ? promise.then(noop).catch(noop) : Promise.resolve(); + } + destroy() { + super.destroy(); + this.cancel({ silent: true }); + } + get resetState() { + return this.#initialState; + } + reset() { + this.destroy(); + this.setState(this.resetState); + } + isActive() { + return this.observers.some((observer) => resolveQueryBoolean(observer.options.enabled, this) !== false); + } + isDisabled() { + if (this.getObserversCount() > 0) return !this.isActive(); + return this.options.queryFn === skipToken || !this.isFetched(); + } + isFetched() { + return this.state.dataUpdateCount + this.state.errorUpdateCount > 0; + } + isStatic() { + if (this.getObserversCount() > 0) return this.observers.some((observer) => resolveStaleTime(observer.options.staleTime, this) === "static"); + return false; + } + isStale() { + if (this.getObserversCount() > 0) return this.observers.some((observer) => observer.getCurrentResult().isStale); + return this.state.data === void 0 || this.state.isInvalidated; + } + isStaleByTime(staleTime = 0) { + if (this.state.data === void 0) return true; + if (staleTime === "static") return false; + if (this.state.isInvalidated) return true; + return !timeUntilStale(this.state.dataUpdatedAt, staleTime); + } + onFocus() { + this.observers.find((x) => x.shouldFetchOnWindowFocus())?.refetch({ cancelRefetch: false }); + this.#retryer?.continue(); + } + onOnline() { + this.observers.find((x) => x.shouldFetchOnReconnect())?.refetch({ cancelRefetch: false }); + this.#retryer?.continue(); + } + addObserver(observer) { + if (!this.observers.includes(observer)) { + this.observers.push(observer); + this.clearGcTimeout(); + this.#cache.notify({ + type: "observerAdded", + query: this, + observer + }); + } + } + removeObserver(observer) { + if (this.observers.includes(observer)) { + this.observers = this.observers.filter((x) => x !== observer); + if (!this.observers.length) { + if (this.#retryer) if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) this.#retryer.cancel({ revert: true }); + else this.#retryer.cancelRetry(); + this.scheduleGc(); + } + this.#cache.notify({ + type: "observerRemoved", + query: this, + observer + }); + } + } + getObserversCount() { + return this.observers.length; + } + #isInitialPausedFetch() { + return this.state.fetchStatus === "paused" && this.state.status === "pending"; + } + invalidate() { + if (!this.state.isInvalidated) this.#dispatch({ type: "invalidate" }); + } + async fetch(options, fetchOptions) { + if (this.state.fetchStatus !== "idle" && this.#retryer?.status() !== "rejected") { + if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) this.cancel({ silent: true }); + else if (this.#retryer) { + this.#retryer.continueRetry(); + return this.#retryer.promise; + } + } + if (options) this.setOptions(options); + if (!this.options.queryFn) { + const observer = this.observers.find((x) => x.options.queryFn); + if (observer) this.setOptions(observer.options); + } + if (!Array.isArray(this.options.queryKey)) console.error(`As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`); + const abortController = new AbortController(); + const addSignalProperty = (object) => { + Object.defineProperty(object, "signal", { + enumerable: true, + get: () => { + this.#abortSignalConsumed = true; + return abortController.signal; + } + }); + }; + const fetchFn = () => { + const queryFn = ensureQueryFn(this.options, fetchOptions); + const createQueryFnContext = () => { + const queryFnContext2 = { + client: this.#client, + queryKey: this.queryKey, + meta: this.meta + }; + addSignalProperty(queryFnContext2); + return queryFnContext2; + }; + const queryFnContext = createQueryFnContext(); + this.#abortSignalConsumed = false; + if (this.options.persister) return this.options.persister(queryFn, queryFnContext, this); + return queryFn(queryFnContext); + }; + const createFetchContext = () => { + const context2 = { + fetchOptions, + options: this.options, + queryKey: this.queryKey, + client: this.#client, + state: this.state, + fetchFn + }; + addSignalProperty(context2); + return context2; + }; + const context = createFetchContext(); + (this.#queryType === "infinite" ? infiniteQueryBehavior(this.options.pages) : this.options.behavior)?.onFetch(context, this); + this.#revertState = this.state; + if (this.state.fetchStatus === "idle" || this.state.fetchMeta !== context.fetchOptions?.meta) this.#dispatch({ + type: "fetch", + meta: context.fetchOptions?.meta + }); + this.#retryer = createRetryer({ + initialPromise: fetchOptions?.initialPromise, + fn: context.fetchFn, + onCancel: (error) => { + if (error instanceof CancelledError && error.revert) this.setState({ + ...this.#revertState, + fetchStatus: "idle" + }); + abortController.abort(); + }, + onFail: (failureCount, error) => { + this.#dispatch({ + type: "failed", + failureCount, + error + }); + }, + onPause: () => { + this.#dispatch({ type: "pause" }); + }, + onContinue: () => { + this.#dispatch({ type: "continue" }); + }, + retry: context.options.retry, + retryDelay: context.options.retryDelay, + networkMode: context.options.networkMode, + canRun: () => true + }); + try { + const data = await this.#retryer.start(); + if (data === void 0) { + console.error(`Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`); + throw new Error(`${this.queryHash} data is undefined`); + } + this.setData(data); + this.#cache.config.onSuccess?.(data, this); + this.#cache.config.onSettled?.(data, this.state.error, this); + return data; + } catch (error) { + if (error instanceof CancelledError) { + if (error.silent) return this.#retryer.promise; + else if (error.revert) { + if (this.state.data === void 0) throw error; + return this.state.data; + } + } + this.#dispatch({ + type: "error", + error + }); + this.#cache.config.onError?.(error, this); + this.#cache.config.onSettled?.(this.state.data, error, this); + throw error; + } finally { + this.scheduleGc(); + } + } + #dispatch(action) { + const reducer = (state) => { + switch (action.type) { + case "failed": return { + ...state, + fetchFailureCount: action.failureCount, + fetchFailureReason: action.error + }; + case "pause": return { + ...state, + fetchStatus: "paused" + }; + case "continue": return { + ...state, + fetchStatus: "fetching" + }; + case "fetch": return { + ...state, + ...fetchState(state.data, this.options), + fetchMeta: action.meta ?? null + }; + case "success": + const newState = { + ...state, + ...successState(action.data, action.dataUpdatedAt), + dataUpdateCount: state.dataUpdateCount + 1, + ...!action.manual && { + fetchStatus: "idle", + fetchFailureCount: 0, + fetchFailureReason: null + } + }; + this.#revertState = action.manual ? newState : void 0; + return newState; + case "error": + const error = action.error; + return { + ...state, + error, + errorUpdateCount: state.errorUpdateCount + 1, + errorUpdatedAt: Date.now(), + fetchFailureCount: state.fetchFailureCount + 1, + fetchFailureReason: error, + fetchStatus: "idle", + status: "error", + isInvalidated: true + }; + case "invalidate": return { + ...state, + isInvalidated: true + }; + case "setState": return { + ...state, + ...action.state + }; + } + }; + this.state = reducer(this.state); + notifyManager.batch(() => { + this.observers.forEach((observer) => { + observer.onQueryUpdate(); + }); + this.#cache.notify({ + query: this, + type: "updated", + action + }); + }); + } +}; +function fetchState(data, options) { + return { + fetchFailureCount: 0, + fetchFailureReason: null, + fetchStatus: canFetch(options.networkMode) ? "fetching" : "paused", + ...data === void 0 && { + error: null, + status: "pending" + } + }; +} +function successState(data, dataUpdatedAt) { + return { + data, + dataUpdatedAt: dataUpdatedAt ?? Date.now(), + error: null, + isInvalidated: false, + status: "success" + }; +} +function getDefaultState$1(options) { + const data = typeof options.initialData === "function" ? options.initialData() : options.initialData; + const hasData = data !== void 0; + const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === "function" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0; + return { + data, + dataUpdateCount: 0, + dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0, + error: null, + errorUpdateCount: 0, + errorUpdatedAt: 0, + fetchFailureCount: 0, + fetchFailureReason: null, + fetchMeta: null, + isInvalidated: false, + status: hasData ? "success" : "pending", + fetchStatus: "idle" + }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryObserver.js +var QueryObserver = class extends Subscribable { + constructor(client, options) { + super(); + this.options = options; + this.#client = client; + this.#selectError = null; + this.#currentThenable = pendingThenable(); + this.bindMethods(); + this.setOptions(options); + } + #client; + #currentQuery = void 0; + #currentQueryInitialState = void 0; + #currentResult = void 0; + #currentResultState; + #currentResultOptions; + #currentThenable; + #selectError; + #selectFn; + #selectResult; + #lastQueryWithDefinedData; + #staleTimeoutId; + #refetchIntervalId; + #currentRefetchInterval; + #trackedProps = /* @__PURE__ */ new Set(); + bindMethods() { + this.refetch = this.refetch.bind(this); + } + onSubscribe() { + if (this.listeners.size === 1) { + this.#currentQuery.addObserver(this); + if (shouldFetchOnMount(this.#currentQuery, this.options)) this.#executeFetch(); + else this.updateResult(); + this.#updateTimers(); + } + } + onUnsubscribe() { + if (!this.hasListeners()) this.destroy(); + } + shouldFetchOnReconnect() { + return shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnReconnect); + } + shouldFetchOnWindowFocus() { + return shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnWindowFocus); + } + destroy() { + this.listeners = /* @__PURE__ */ new Set(); + this.#clearStaleTimeout(); + this.#clearRefetchInterval(); + this.#currentQuery.removeObserver(this); + } + setOptions(options) { + const prevOptions = this.options; + const prevQuery = this.#currentQuery; + this.options = this.#client.defaultQueryOptions(options); + if (this.options.enabled !== void 0 && typeof this.options.enabled !== "boolean" && typeof this.options.enabled !== "function" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== "boolean") throw new Error("Expected enabled to be a boolean or a callback that returns a boolean"); + this.#updateQuery(); + this.#currentQuery.setOptions(this.options); + if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) this.#client.getQueryCache().notify({ + type: "observerOptionsUpdated", + query: this.#currentQuery, + observer: this + }); + const mounted = this.hasListeners(); + if (mounted && shouldFetchOptionally(this.#currentQuery, prevQuery, this.options, prevOptions)) this.#executeFetch(); + this.updateResult(); + if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) this.#updateStaleTimeout(); + const nextRefetchInterval = this.#computeRefetchInterval(); + if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) this.#updateRefetchInterval(nextRefetchInterval); + } + getOptimisticResult(options) { + const query = this.#client.getQueryCache().build(this.#client, options); + const result = this.createResult(query, options); + if (shouldAssignObserverCurrentProperties(this, result)) { + this.#currentResult = result; + this.#currentResultOptions = this.options; + this.#currentResultState = this.#currentQuery.state; + } + return result; + } + getCurrentResult() { + return this.#currentResult; + } + trackResult(result, onPropTracked) { + return new Proxy(result, { get: (target, key) => { + this.trackProp(key); + onPropTracked?.(key); + if (key === "promise") { + this.trackProp("data"); + if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === "pending") this.#currentThenable.reject(/* @__PURE__ */ new Error("experimental_prefetchInRender feature flag is not enabled")); + } + return Reflect.get(target, key); + } }); + } + trackProp(key) { + this.#trackedProps.add(key); + } + getCurrentQuery() { + return this.#currentQuery; + } + refetch({ ...options } = {}) { + return this.fetch({ ...options }); + } + fetchOptimistic(options) { + const defaultedOptions = this.#client.defaultQueryOptions(options); + const query = this.#client.getQueryCache().build(this.#client, defaultedOptions); + return query.fetch().then(() => this.createResult(query, defaultedOptions)); + } + fetch(fetchOptions) { + return this.#executeFetch({ + ...fetchOptions, + cancelRefetch: fetchOptions.cancelRefetch ?? true + }).then(() => { + this.updateResult(); + return this.#currentResult; + }); + } + #executeFetch(fetchOptions) { + this.#updateQuery(); + let promise = this.#currentQuery.fetch(this.options, fetchOptions); + if (!fetchOptions?.throwOnError) promise = promise.catch(noop); + return promise; + } + #updateStaleTimeout() { + this.#clearStaleTimeout(); + const staleTime = resolveStaleTime(this.options.staleTime, this.#currentQuery); + if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) return; + const timeout = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime) + 1; + this.#staleTimeoutId = timeoutManager.setTimeout(() => { + if (!this.#currentResult.isStale) this.updateResult(); + }, timeout); + } + #computeRefetchInterval() { + return (typeof this.options.refetchInterval === "function" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false; + } + #updateRefetchInterval(nextInterval) { + this.#clearRefetchInterval(); + this.#currentRefetchInterval = nextInterval; + if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) return; + this.#refetchIntervalId = timeoutManager.setInterval(() => { + if (this.options.refetchIntervalInBackground || focusManager.isFocused()) this.#executeFetch(); + }, this.#currentRefetchInterval); + } + #updateTimers() { + this.#updateStaleTimeout(); + this.#updateRefetchInterval(this.#computeRefetchInterval()); + } + #clearStaleTimeout() { + if (this.#staleTimeoutId !== void 0) { + timeoutManager.clearTimeout(this.#staleTimeoutId); + this.#staleTimeoutId = void 0; + } + } + #clearRefetchInterval() { + if (this.#refetchIntervalId !== void 0) { + timeoutManager.clearInterval(this.#refetchIntervalId); + this.#refetchIntervalId = void 0; + } + } + createResult(query, options) { + const prevQuery = this.#currentQuery; + const prevOptions = this.options; + const prevResult = this.#currentResult; + const prevResultState = this.#currentResultState; + const prevResultOptions = this.#currentResultOptions; + const queryInitialState = query !== prevQuery ? query.state : this.#currentQueryInitialState; + const { state } = query; + let newState = { ...state }; + let isPlaceholderData = false; + let data; + if (options._optimisticResults) { + const mounted = this.hasListeners(); + const fetchOnMount = !mounted && shouldFetchOnMount(query, options); + const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions); + if (fetchOnMount || fetchOptionally) newState = { + ...newState, + ...fetchState(state.data, query.options) + }; + if (options._optimisticResults === "isRestoring") newState.fetchStatus = "idle"; + } + let { error, errorUpdatedAt, status } = newState; + data = newState.data; + let skipSelect = false; + if (options.placeholderData !== void 0 && data === void 0 && status === "pending") { + let placeholderData; + if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) { + placeholderData = prevResult.data; + skipSelect = true; + } else placeholderData = typeof options.placeholderData === "function" ? options.placeholderData(this.#lastQueryWithDefinedData?.state.data, this.#lastQueryWithDefinedData) : options.placeholderData; + if (placeholderData !== void 0) { + status = "success"; + data = replaceData(prevResult?.data, placeholderData, options); + isPlaceholderData = true; + } + } + if (options.select && data !== void 0 && !skipSelect) if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) data = this.#selectResult; + else try { + this.#selectFn = options.select; + data = options.select(data); + data = replaceData(prevResult?.data, data, options); + this.#selectResult = data; + this.#selectError = null; + } catch (selectError) { + this.#selectError = selectError; + } + if (this.#selectError) { + error = this.#selectError; + data = this.#selectResult; + errorUpdatedAt = Date.now(); + status = "error"; + } + const isFetching = newState.fetchStatus === "fetching"; + const isPending = status === "pending"; + const isError = status === "error"; + const isLoading = isPending && isFetching; + const hasData = data !== void 0; + const nextResult = { + status, + fetchStatus: newState.fetchStatus, + isPending, + isSuccess: status === "success", + isError, + isInitialLoading: isLoading, + isLoading, + data, + dataUpdatedAt: newState.dataUpdatedAt, + error, + errorUpdatedAt, + failureCount: newState.fetchFailureCount, + failureReason: newState.fetchFailureReason, + errorUpdateCount: newState.errorUpdateCount, + isFetched: query.isFetched(), + isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount, + isFetching, + isRefetching: isFetching && !isPending, + isLoadingError: isError && !hasData, + isPaused: newState.fetchStatus === "paused", + isPlaceholderData, + isRefetchError: isError && hasData, + isStale: isStale(query, options), + refetch: this.refetch, + promise: this.#currentThenable, + isEnabled: resolveQueryBoolean(options.enabled, query) !== false + }; + if (this.options.experimental_prefetchInRender) { + const hasResultData = nextResult.data !== void 0; + const isErrorWithoutData = nextResult.status === "error" && !hasResultData; + const finalizeThenableIfPossible = (thenable) => { + if (isErrorWithoutData) thenable.reject(nextResult.error); + else if (hasResultData) thenable.resolve(nextResult.data); + }; + const recreateThenable = () => { + finalizeThenableIfPossible(this.#currentThenable = nextResult.promise = pendingThenable()); + }; + const prevThenable = this.#currentThenable; + switch (prevThenable.status) { + case "pending": + if (query.queryHash === prevQuery.queryHash) finalizeThenableIfPossible(prevThenable); + break; + case "fulfilled": + if (isErrorWithoutData || nextResult.data !== prevThenable.value) recreateThenable(); + break; + case "rejected": + if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) recreateThenable(); + break; + } + } + return nextResult; + } + updateResult() { + const prevResult = this.#currentResult; + const nextResult = this.createResult(this.#currentQuery, this.options); + this.#currentResultState = this.#currentQuery.state; + this.#currentResultOptions = this.options; + if (this.#currentResultState.data !== void 0) this.#lastQueryWithDefinedData = this.#currentQuery; + if (shallowEqualObjects(nextResult, prevResult)) return; + this.#currentResult = nextResult; + const shouldNotifyListeners = () => { + if (!prevResult) return true; + const { notifyOnChangeProps } = this.options; + const notifyOnChangePropsValue = typeof notifyOnChangeProps === "function" ? notifyOnChangeProps() : notifyOnChangeProps; + if (notifyOnChangePropsValue === "all" || !notifyOnChangePropsValue && !this.#trackedProps.size) return true; + const includedProps = new Set(notifyOnChangePropsValue ?? this.#trackedProps); + if (this.options.throwOnError) includedProps.add("error"); + return Object.keys(this.#currentResult).some((key) => { + const typedKey = key; + return this.#currentResult[typedKey] !== prevResult[typedKey] && includedProps.has(typedKey); + }); + }; + this.#notify({ listeners: shouldNotifyListeners() }); + } + #updateQuery() { + const query = this.#client.getQueryCache().build(this.#client, this.options); + if (query === this.#currentQuery) return; + const prevQuery = this.#currentQuery; + this.#currentQuery = query; + this.#currentQueryInitialState = query.state; + if (this.hasListeners()) { + prevQuery?.removeObserver(this); + query.addObserver(this); + } + } + onQueryUpdate() { + this.updateResult(); + if (this.hasListeners()) this.#updateTimers(); + } + #notify(notifyOptions) { + notifyManager.batch(() => { + if (notifyOptions.listeners) this.listeners.forEach((listener) => { + listener(this.#currentResult); + }); + this.#client.getQueryCache().notify({ + query: this.#currentQuery, + type: "observerResultsUpdated" + }); + }); + } +}; +function shouldLoadOnMount(query, options) { + return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === "error" && resolveQueryBoolean(options.retryOnMount, query) === false); +} +function shouldFetchOnMount(query, options) { + return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount); +} +function shouldFetchOn(query, options, field) { + if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== "static") { + const value = typeof field === "function" ? field(query) : field; + return value === "always" || value !== false && isStale(query, options); + } + return false; +} +function shouldFetchOptionally(query, prevQuery, options, prevOptions) { + return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== "error") && isStale(query, options); +} +function isStale(query, options) { + return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query)); +} +function shouldAssignObserverCurrentProperties(observer, optimisticResult) { + if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) return true; + return false; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js +var InfiniteQueryObserver = class extends QueryObserver { + constructor(client, options) { + super(client, options); + } + bindMethods() { + super.bindMethods(); + this.fetchNextPage = this.fetchNextPage.bind(this); + this.fetchPreviousPage = this.fetchPreviousPage.bind(this); + } + setOptions(options) { + options._type = "infinite"; + super.setOptions(options); + } + getOptimisticResult(options) { + options._type = "infinite"; + return super.getOptimisticResult(options); + } + fetchNextPage(options) { + return this.fetch({ + ...options, + meta: { fetchMore: { direction: "forward" } } + }); + } + fetchPreviousPage(options) { + return this.fetch({ + ...options, + meta: { fetchMore: { direction: "backward" } } + }); + } + createResult(query, options) { + const { state } = query; + const parentResult = super.createResult(query, options); + const { isFetching, isRefetching, isError, isRefetchError } = parentResult; + const fetchDirection = state.fetchMeta?.fetchMore?.direction; + const isFetchNextPageError = isError && fetchDirection === "forward"; + const isFetchingNextPage = isFetching && fetchDirection === "forward"; + const isFetchPreviousPageError = isError && fetchDirection === "backward"; + const isFetchingPreviousPage = isFetching && fetchDirection === "backward"; + return { + ...parentResult, + fetchNextPage: this.fetchNextPage, + fetchPreviousPage: this.fetchPreviousPage, + hasNextPage: hasNextPage(options, state.data), + hasPreviousPage: hasPreviousPage(options, state.data), + isFetchNextPageError, + isFetchingNextPage, + isFetchPreviousPageError, + isFetchingPreviousPage, + isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError, + isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage + }; + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutation.js +var Mutation = class extends Removable { + #client; + #observers; + #mutationCache; + #retryer; + constructor(config) { + super(); + this.#client = config.client; + this.mutationId = config.mutationId; + this.#mutationCache = config.mutationCache; + this.#observers = []; + this.state = config.state || getDefaultState(); + this.setOptions(config.options); + this.scheduleGc(); + } + setOptions(options) { + this.options = options; + this.updateGcTime(this.options.gcTime); + } + get meta() { + return this.options.meta; + } + addObserver(observer) { + if (!this.#observers.includes(observer)) { + this.#observers.push(observer); + this.clearGcTimeout(); + this.#mutationCache.notify({ + type: "observerAdded", + mutation: this, + observer + }); + } + } + removeObserver(observer) { + this.#observers = this.#observers.filter((x) => x !== observer); + this.scheduleGc(); + this.#mutationCache.notify({ + type: "observerRemoved", + mutation: this, + observer + }); + } + optionalRemove() { + if (!this.#observers.length) if (this.state.status === "pending") this.scheduleGc(); + else this.#mutationCache.remove(this); + } + continue() { + return this.#retryer?.continue() ?? this.execute(this.state.variables); + } + async execute(variables) { + const onContinue = () => { + this.#dispatch({ type: "continue" }); + }; + const mutationFnContext = { + client: this.#client, + meta: this.options.meta, + mutationKey: this.options.mutationKey + }; + this.#retryer = createRetryer({ + fn: () => { + if (!this.options.mutationFn) return Promise.reject(/* @__PURE__ */ new Error("No mutationFn found")); + return this.options.mutationFn(variables, mutationFnContext); + }, + onFail: (failureCount, error) => { + this.#dispatch({ + type: "failed", + failureCount, + error + }); + }, + onPause: () => { + this.#dispatch({ type: "pause" }); + }, + onContinue, + retry: this.options.retry ?? 0, + retryDelay: this.options.retryDelay, + networkMode: this.options.networkMode, + canRun: () => this.#mutationCache.canRun(this) + }); + const restored = this.state.status === "pending"; + const isPaused = !this.#retryer.canStart(); + try { + if (restored) onContinue(); + else { + this.#dispatch({ + type: "pending", + variables, + isPaused + }); + if (this.#mutationCache.config.onMutate) await this.#mutationCache.config.onMutate(variables, this, mutationFnContext); + const context = await this.options.onMutate?.(variables, mutationFnContext); + if (context !== this.state.context) this.#dispatch({ + type: "pending", + context, + variables, + isPaused + }); + } + const data = await this.#retryer.start(); + await this.#mutationCache.config.onSuccess?.(data, variables, this.state.context, this, mutationFnContext); + await this.options.onSuccess?.(data, variables, this.state.context, mutationFnContext); + await this.#mutationCache.config.onSettled?.(data, null, this.state.variables, this.state.context, this, mutationFnContext); + await this.options.onSettled?.(data, null, variables, this.state.context, mutationFnContext); + this.#dispatch({ + type: "success", + data + }); + return data; + } catch (error) { + try { + await this.#mutationCache.config.onError?.(error, variables, this.state.context, this, mutationFnContext); + } catch (e) { + Promise.reject(e); + } + try { + await this.options.onError?.(error, variables, this.state.context, mutationFnContext); + } catch (e) { + Promise.reject(e); + } + try { + await this.#mutationCache.config.onSettled?.(void 0, error, this.state.variables, this.state.context, this, mutationFnContext); + } catch (e) { + Promise.reject(e); + } + try { + await this.options.onSettled?.(void 0, error, variables, this.state.context, mutationFnContext); + } catch (e) { + Promise.reject(e); + } + this.#dispatch({ + type: "error", + error + }); + throw error; + } finally { + this.#mutationCache.runNext(this); + } + } + #dispatch(action) { + const reducer = (state) => { + switch (action.type) { + case "failed": return { + ...state, + failureCount: action.failureCount, + failureReason: action.error + }; + case "pause": return { + ...state, + isPaused: true + }; + case "continue": return { + ...state, + isPaused: false + }; + case "pending": return { + ...state, + context: action.context, + data: void 0, + failureCount: 0, + failureReason: null, + error: null, + isPaused: action.isPaused, + status: "pending", + variables: action.variables, + submittedAt: Date.now() + }; + case "success": return { + ...state, + data: action.data, + failureCount: 0, + failureReason: null, + error: null, + status: "success", + isPaused: false + }; + case "error": return { + ...state, + data: void 0, + error: action.error, + failureCount: state.failureCount + 1, + failureReason: action.error, + isPaused: false, + status: "error" + }; + } + }; + this.state = reducer(this.state); + notifyManager.batch(() => { + this.#observers.forEach((observer) => { + observer.onMutationUpdate(action); + }); + this.#mutationCache.notify({ + mutation: this, + type: "updated", + action + }); + }); + } +}; +function getDefaultState() { + return { + context: void 0, + data: void 0, + error: null, + failureCount: 0, + failureReason: null, + isPaused: false, + status: "idle", + variables: void 0, + submittedAt: 0 + }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationCache.js +var MutationCache = class extends Subscribable { + constructor(config = {}) { + super(); + this.config = config; + this.#mutations = /* @__PURE__ */ new Set(); + this.#scopes = /* @__PURE__ */ new Map(); + this.#mutationId = 0; + } + #mutations; + #scopes; + #mutationId; + build(client, options, state) { + const mutation = new Mutation({ + client, + mutationCache: this, + mutationId: ++this.#mutationId, + options: client.defaultMutationOptions(options), + state + }); + this.add(mutation); + return mutation; + } + add(mutation) { + this.#mutations.add(mutation); + const scope = scopeFor(mutation); + if (typeof scope === "string") { + const scopedMutations = this.#scopes.get(scope); + if (scopedMutations) scopedMutations.push(mutation); + else this.#scopes.set(scope, [mutation]); + } + this.notify({ + type: "added", + mutation + }); + } + remove(mutation) { + if (this.#mutations.delete(mutation)) { + const scope = scopeFor(mutation); + if (typeof scope === "string") { + const scopedMutations = this.#scopes.get(scope); + if (scopedMutations) { + if (scopedMutations.length > 1) { + const index = scopedMutations.indexOf(mutation); + if (index !== -1) scopedMutations.splice(index, 1); + } else if (scopedMutations[0] === mutation) this.#scopes.delete(scope); + } + } + } + this.notify({ + type: "removed", + mutation + }); + } + canRun(mutation) { + const scope = scopeFor(mutation); + if (typeof scope === "string") { + const firstPendingMutation = this.#scopes.get(scope)?.find((m) => m.state.status === "pending"); + return !firstPendingMutation || firstPendingMutation === mutation; + } else return true; + } + runNext(mutation) { + const scope = scopeFor(mutation); + if (typeof scope === "string") return (this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused))?.continue() ?? Promise.resolve(); + else return Promise.resolve(); + } + clear() { + notifyManager.batch(() => { + this.#mutations.forEach((mutation) => { + this.notify({ + type: "removed", + mutation + }); + }); + this.#mutations.clear(); + this.#scopes.clear(); + }); + } + getAll() { + return Array.from(this.#mutations); + } + find(filters) { + const defaultedFilters = { + exact: true, + ...filters + }; + return this.getAll().find((mutation) => matchMutation(defaultedFilters, mutation)); + } + findAll(filters = {}) { + return this.getAll().filter((mutation) => matchMutation(filters, mutation)); + } + notify(event) { + notifyManager.batch(() => { + this.listeners.forEach((listener) => { + listener(event); + }); + }); + } + resumePausedMutations() { + const pausedMutations = this.getAll().filter((x) => x.state.isPaused); + return notifyManager.batch(() => Promise.all(pausedMutations.map((mutation) => mutation.continue().catch(noop)))); + } +}; +function scopeFor(mutation) { + return mutation.options.scope?.id; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationObserver.js +var MutationObserver = class extends Subscribable { + #client; + #currentResult = void 0; + #currentMutation; + #mutateOptions; + constructor(client, options) { + super(); + this.#client = client; + this.setOptions(options); + this.bindMethods(); + this.#updateResult(); + } + bindMethods() { + this.mutate = this.mutate.bind(this); + this.reset = this.reset.bind(this); + } + setOptions(options) { + const prevOptions = this.options; + this.options = this.#client.defaultMutationOptions(options); + if (!shallowEqualObjects(this.options, prevOptions)) this.#client.getMutationCache().notify({ + type: "observerOptionsUpdated", + mutation: this.#currentMutation, + observer: this + }); + if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) this.reset(); + else if (this.#currentMutation?.state.status === "pending") this.#currentMutation.setOptions(this.options); + } + onUnsubscribe() { + if (!this.hasListeners()) this.#currentMutation?.removeObserver(this); + } + onMutationUpdate(action) { + this.#updateResult(); + this.#notify(action); + } + getCurrentResult() { + return this.#currentResult; + } + reset() { + this.#currentMutation?.removeObserver(this); + this.#currentMutation = void 0; + this.#updateResult(); + this.#notify(); + } + mutate(variables, options) { + this.#mutateOptions = options; + this.#currentMutation?.removeObserver(this); + this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options); + this.#currentMutation.addObserver(this); + return this.#currentMutation.execute(variables); + } + #updateResult() { + const state = this.#currentMutation?.state ?? getDefaultState(); + this.#currentResult = { + ...state, + isPending: state.status === "pending", + isSuccess: state.status === "success", + isError: state.status === "error", + isIdle: state.status === "idle", + mutate: this.mutate, + reset: this.reset + }; + } + #notify(action) { + notifyManager.batch(() => { + if (this.#mutateOptions && this.hasListeners()) { + const variables = this.#currentResult.variables; + const onMutateResult = this.#currentResult.context; + const context = { + client: this.#client, + meta: this.options.meta, + mutationKey: this.options.mutationKey + }; + if (action?.type === "success") { + try { + this.#mutateOptions.onSuccess?.(action.data, variables, onMutateResult, context); + } catch (e) { + Promise.reject(e); + } + try { + this.#mutateOptions.onSettled?.(action.data, null, variables, onMutateResult, context); + } catch (e) { + Promise.reject(e); + } + } else if (action?.type === "error") { + try { + this.#mutateOptions.onError?.(action.error, variables, onMutateResult, context); + } catch (e) { + Promise.reject(e); + } + try { + this.#mutateOptions.onSettled?.(void 0, action.error, variables, onMutateResult, context); + } catch (e) { + Promise.reject(e); + } + } + } + this.listeners.forEach((listener) => { + listener(this.#currentResult); + }); + }); + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queriesObserver.js +function difference(array1, array2) { + const excludeSet = new Set(array2); + return array1.filter((x) => !excludeSet.has(x)); +} +function replaceAt(array, index, value) { + const copy = array.slice(0); + copy[index] = value; + return copy; +} +var QueriesObserver = class extends Subscribable { + #client; + #result; + #queries; + #options; + #observers; + #combinedResult; + #lastCombine; + #lastResult; + #lastQueryHashes; + #observerMatches = []; + constructor(client, queries, options) { + super(); + this.#client = client; + this.#options = options; + this.#queries = []; + this.#observers = []; + this.#result = []; + this.setQueries(queries); + } + onSubscribe() { + if (this.listeners.size === 1) this.#observers.forEach((observer) => { + observer.subscribe((result) => { + this.#onUpdate(observer, result); + }); + }); + } + onUnsubscribe() { + if (!this.listeners.size) this.destroy(); + } + destroy() { + this.listeners = /* @__PURE__ */ new Set(); + this.#observers.forEach((observer) => { + observer.destroy(); + }); + } + setQueries(queries, options) { + this.#queries = queries; + this.#options = options; + { + const queryHashes = queries.map((query) => this.#client.defaultQueryOptions(query).queryHash); + if (new Set(queryHashes).size !== queryHashes.length) console.warn("[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior."); + } + notifyManager.batch(() => { + const prevObservers = this.#observers; + const newObserverMatches = this.#findMatchingObservers(this.#queries); + newObserverMatches.forEach((match) => match.observer.setOptions(match.defaultedQueryOptions)); + const newObservers = newObserverMatches.map((match) => match.observer); + const newResult = newObservers.map((observer) => observer.getCurrentResult()); + const hasLengthChange = prevObservers.length !== newObservers.length; + const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]); + const hasStructuralChange = hasLengthChange || hasIndexChange; + const hasResultChange = hasStructuralChange ? true : newResult.some((result, index) => { + const prev = this.#result[index]; + return !prev || !shallowEqualObjects(result, prev); + }); + if (!hasStructuralChange && !hasResultChange) return; + if (hasStructuralChange) { + this.#observerMatches = newObserverMatches; + this.#observers = newObservers; + } + this.#result = newResult; + if (!this.hasListeners()) return; + if (hasStructuralChange) { + difference(prevObservers, newObservers).forEach((observer) => { + observer.destroy(); + }); + difference(newObservers, prevObservers).forEach((observer) => { + observer.subscribe((result) => { + this.#onUpdate(observer, result); + }); + }); + } + this.#notify(); + }); + } + getCurrentResult() { + return this.#result; + } + getQueries() { + return this.#observers.map((observer) => observer.getCurrentQuery()); + } + getObservers() { + return this.#observers; + } + getOptimisticResult(queries, combine) { + const matches = this.#findMatchingObservers(queries); + const result = matches.map((match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)); + const queryHashes = matches.map((match) => match.defaultedQueryOptions.queryHash); + return [ + result, + (r) => { + return this.#combineResult(r ?? result, combine, queryHashes); + }, + () => { + return this.#trackResult(result, matches); + } + ]; + } + #trackResult(result, matches) { + return matches.map((match, index) => { + const observerResult = result[index]; + return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => { + matches.forEach((m) => { + m.observer.trackProp(accessedProp); + }); + }) : observerResult; + }); + } + #combineResult(input, combine, queryHashes) { + if (combine) { + const lastHashes = this.#lastQueryHashes; + const queryHashesChanged = queryHashes !== void 0 && lastHashes !== void 0 && (lastHashes.length !== queryHashes.length || queryHashes.some((hash, i) => hash !== lastHashes[i])); + if (!this.#combinedResult || this.#result !== this.#lastResult || queryHashesChanged || combine !== this.#lastCombine) { + this.#lastCombine = combine; + this.#lastResult = this.#result; + if (queryHashes !== void 0) this.#lastQueryHashes = queryHashes; + this.#combinedResult = replaceEqualDeep(this.#combinedResult, combine(input)); + } + return this.#combinedResult; + } + return input; + } + #shouldSkipCombine() { + return this.#options?.combine !== void 0 && this.#observers.some((observer, index) => { + return observer.options.suspense && this.#result[index]?.data === void 0; + }); + } + #findMatchingObservers(queries) { + const prevObserversMap = /* @__PURE__ */ new Map(); + this.#observers.forEach((observer) => { + const key = observer.options.queryHash; + if (!key) return; + const previousObservers = prevObserversMap.get(key); + if (previousObservers) previousObservers.push(observer); + else prevObserversMap.set(key, [observer]); + }); + const observers = []; + queries.forEach((options) => { + const defaultedOptions = this.#client.defaultQueryOptions(options); + const observer = prevObserversMap.get(defaultedOptions.queryHash)?.shift() ?? new QueryObserver(this.#client, defaultedOptions); + observers.push({ + defaultedQueryOptions: defaultedOptions, + observer + }); + }); + return observers; + } + #onUpdate(observer, result) { + const index = this.#observers.indexOf(observer); + if (index !== -1) { + this.#result = replaceAt(this.#result, index, result); + this.#notify(); + } + } + #notify() { + if (this.hasListeners()) { + const newTracked = this.#trackResult(this.#result, this.#observerMatches); + const shouldSkipCombine = this.#shouldSkipCombine(); + const previousResult = this.#combinedResult; + const newResult = shouldSkipCombine ? previousResult : this.#combineResult(newTracked, this.#options?.combine); + if (shouldSkipCombine || previousResult !== newResult) notifyManager.batch(() => { + this.listeners.forEach((listener) => { + listener(this.#result); + }); + }); + } + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryCache.js +var QueryCache = class extends Subscribable { + constructor(config = {}) { + super(); + this.config = config; + this.#queries = /* @__PURE__ */ new Map(); + } + #queries; + build(client, options, state) { + const queryKey = options.queryKey; + const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options); + let query = this.get(queryHash); + if (!query) { + query = new Query({ + client, + queryKey, + queryHash, + options: client.defaultQueryOptions(options), + state, + defaultOptions: client.getQueryDefaults(queryKey) + }); + this.add(query); + } + return query; + } + add(query) { + if (!this.#queries.has(query.queryHash)) { + this.#queries.set(query.queryHash, query); + this.notify({ + type: "added", + query + }); + } + } + remove(query) { + const queryInMap = this.#queries.get(query.queryHash); + if (queryInMap) { + query.destroy(); + if (queryInMap === query) this.#queries.delete(query.queryHash); + this.notify({ + type: "removed", + query + }); + } + } + clear() { + notifyManager.batch(() => { + this.getAll().forEach((query) => { + this.remove(query); + }); + }); + } + get(queryHash) { + return this.#queries.get(queryHash); + } + getAll() { + return [...this.#queries.values()]; + } + find(filters) { + const defaultedFilters = { + exact: true, + ...filters + }; + return this.getAll().find((query) => matchQuery(defaultedFilters, query)); + } + findAll(filters = {}) { + const queries = this.getAll(); + return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries; + } + notify(event) { + notifyManager.batch(() => { + this.listeners.forEach((listener) => { + listener(event); + }); + }); + } + onFocus() { + notifyManager.batch(() => { + this.getAll().forEach((query) => { + query.onFocus(); + }); + }); + } + onOnline() { + notifyManager.batch(() => { + this.getAll().forEach((query) => { + query.onOnline(); + }); + }); + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryClient.js +var QueryClient = class { + #queryCache; + #mutationCache; + #defaultOptions; + #queryDefaults; + #mutationDefaults; + #mountCount; + #unsubscribeFocus; + #unsubscribeOnline; + constructor(config = {}) { + this.#queryCache = config.queryCache || new QueryCache(); + this.#mutationCache = config.mutationCache || new MutationCache(); + this.#defaultOptions = config.defaultOptions || {}; + this.#queryDefaults = /* @__PURE__ */ new Map(); + this.#mutationDefaults = /* @__PURE__ */ new Map(); + this.#mountCount = 0; + } + mount() { + this.#mountCount++; + if (this.#mountCount !== 1) return; + this.#unsubscribeFocus = focusManager.subscribe(async (focused) => { + if (focused) { + await this.resumePausedMutations(); + this.#queryCache.onFocus(); + } + }); + this.#unsubscribeOnline = onlineManager.subscribe(async (online) => { + if (online) { + await this.resumePausedMutations(); + this.#queryCache.onOnline(); + } + }); + } + unmount() { + this.#mountCount--; + if (this.#mountCount !== 0) return; + this.#unsubscribeFocus?.(); + this.#unsubscribeFocus = void 0; + this.#unsubscribeOnline?.(); + this.#unsubscribeOnline = void 0; + } + isFetching(filters) { + return this.#queryCache.findAll({ + ...filters, + fetchStatus: "fetching" + }).length; + } + isMutating(filters) { + return this.#mutationCache.findAll({ + ...filters, + status: "pending" + }).length; + } + /** + * Imperative (non-reactive) way to retrieve data for a QueryKey. + * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates. + * + * Hint: Do not use this function inside a component, because it won't receive updates. + * Use `useQuery` to create a `QueryObserver` that subscribes to changes. + */ + getQueryData(queryKey) { + const options = this.defaultQueryOptions({ queryKey }); + return this.#queryCache.get(options.queryHash)?.state.data; + } + ensureQueryData(options) { + const defaultedOptions = this.defaultQueryOptions(options); + const query = this.#queryCache.build(this, defaultedOptions); + const cachedData = query.state.data; + if (cachedData === void 0) return this.fetchQuery(options); + if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) this.prefetchQuery(defaultedOptions); + return Promise.resolve(cachedData); + } + getQueriesData(filters) { + return this.#queryCache.findAll(filters).map(({ queryKey, state }) => { + return [queryKey, state.data]; + }); + } + setQueryData(queryKey, updater, options) { + const defaultedOptions = this.defaultQueryOptions({ queryKey }); + const prevData = this.#queryCache.get(defaultedOptions.queryHash)?.state.data; + const data = functionalUpdate(updater, prevData); + if (data === void 0) return; + return this.#queryCache.build(this, defaultedOptions).setData(data, { + ...options, + manual: true + }); + } + setQueriesData(filters, updater, options) { + return notifyManager.batch(() => this.#queryCache.findAll(filters).map(({ queryKey }) => [queryKey, this.setQueryData(queryKey, updater, options)])); + } + getQueryState(queryKey) { + const options = this.defaultQueryOptions({ queryKey }); + return this.#queryCache.get(options.queryHash)?.state; + } + removeQueries(filters) { + const queryCache = this.#queryCache; + notifyManager.batch(() => { + queryCache.findAll(filters).forEach((query) => { + queryCache.remove(query); + }); + }); + } + resetQueries(filters, options) { + const queryCache = this.#queryCache; + return notifyManager.batch(() => { + queryCache.findAll(filters).forEach((query) => { + query.reset(); + }); + return this.refetchQueries({ + type: "active", + ...filters + }, options); + }); + } + cancelQueries(filters, cancelOptions = {}) { + const defaultedCancelOptions = { + revert: true, + ...cancelOptions + }; + const promises = notifyManager.batch(() => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))); + return Promise.all(promises).then(noop).catch(noop); + } + invalidateQueries(filters, options = {}) { + return notifyManager.batch(() => { + this.#queryCache.findAll(filters).forEach((query) => { + query.invalidate(); + }); + if (filters?.refetchType === "none") return Promise.resolve(); + return this.refetchQueries({ + ...filters, + type: filters?.refetchType ?? filters?.type ?? "active" + }, options); + }); + } + refetchQueries(filters, options = {}) { + const fetchOptions = { + ...options, + cancelRefetch: options.cancelRefetch ?? true + }; + const promises = notifyManager.batch(() => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => { + let promise = query.fetch(void 0, fetchOptions); + if (!fetchOptions.throwOnError) promise = promise.catch(noop); + return query.state.fetchStatus === "paused" ? Promise.resolve() : promise; + })); + return Promise.all(promises).then(noop); + } + fetchQuery(options) { + const defaultedOptions = this.defaultQueryOptions(options); + if (defaultedOptions.retry === void 0) defaultedOptions.retry = false; + const query = this.#queryCache.build(this, defaultedOptions); + return query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query)) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data); + } + prefetchQuery(options) { + return this.fetchQuery(options).then(noop).catch(noop); + } + fetchInfiniteQuery(options) { + options._type = "infinite"; + return this.fetchQuery(options); + } + prefetchInfiniteQuery(options) { + return this.fetchInfiniteQuery(options).then(noop).catch(noop); + } + ensureInfiniteQueryData(options) { + options._type = "infinite"; + return this.ensureQueryData(options); + } + resumePausedMutations() { + if (onlineManager.isOnline()) return this.#mutationCache.resumePausedMutations(); + return Promise.resolve(); + } + getQueryCache() { + return this.#queryCache; + } + getMutationCache() { + return this.#mutationCache; + } + getDefaultOptions() { + return this.#defaultOptions; + } + setDefaultOptions(options) { + this.#defaultOptions = options; + } + setQueryDefaults(queryKey, options) { + this.#queryDefaults.set(hashKey(queryKey), { + queryKey, + defaultOptions: options + }); + } + getQueryDefaults(queryKey) { + const defaults = [...this.#queryDefaults.values()]; + const result = {}; + defaults.forEach((queryDefault) => { + if (partialMatchKey(queryKey, queryDefault.queryKey)) Object.assign(result, queryDefault.defaultOptions); + }); + return result; + } + setMutationDefaults(mutationKey, options) { + this.#mutationDefaults.set(hashKey(mutationKey), { + mutationKey, + defaultOptions: options + }); + } + getMutationDefaults(mutationKey) { + const defaults = [...this.#mutationDefaults.values()]; + const result = {}; + defaults.forEach((queryDefault) => { + if (partialMatchKey(mutationKey, queryDefault.mutationKey)) Object.assign(result, queryDefault.defaultOptions); + }); + return result; + } + defaultQueryOptions(options) { + if (options._defaulted) return options; + const defaultedOptions = { + ...this.#defaultOptions.queries, + ...this.getQueryDefaults(options.queryKey), + ...options, + _defaulted: true + }; + if (!defaultedOptions.queryHash) defaultedOptions.queryHash = hashQueryKeyByOptions(defaultedOptions.queryKey, defaultedOptions); + if (defaultedOptions.refetchOnReconnect === void 0) defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== "always"; + if (defaultedOptions.throwOnError === void 0) defaultedOptions.throwOnError = !!defaultedOptions.suspense; + if (!defaultedOptions.networkMode && defaultedOptions.persister) defaultedOptions.networkMode = "offlineFirst"; + if (defaultedOptions.queryFn === skipToken) defaultedOptions.enabled = false; + return defaultedOptions; + } + defaultMutationOptions(options) { + if (options?._defaulted) return options; + return { + ...this.#defaultOptions.mutations, + ...options?.mutationKey && this.getMutationDefaults(options.mutationKey), + ...options, + _defaulted: true + }; + } + clear() { + this.#queryCache.clear(); + this.#mutationCache.clear(); + } +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/streamedQuery.js +function streamedQuery({ streamFn, refetchMode = "reset", reducer = (items, chunk) => addToEnd(items, chunk), initialValue = [] }) { + return async (context) => { + const query = context.client.getQueryCache().find({ + queryKey: context.queryKey, + exact: true + }); + const isRefetch = !!query && query.isFetched(); + if (isRefetch && refetchMode === "reset") query.setState({ + ...query.resetState, + fetchStatus: "fetching" + }); + let result = initialValue; + let cancelled = false; + const stream = await streamFn(addConsumeAwareSignal({ + client: context.client, + meta: context.meta, + queryKey: context.queryKey, + pageParam: context.pageParam, + direction: context.direction + }, () => context.signal, () => cancelled = true)); + const isReplaceRefetch = isRefetch && refetchMode === "replace"; + for await (const chunk of stream) { + if (cancelled) break; + if (isReplaceRefetch) result = reducer(result, chunk); + else context.client.setQueryData(context.queryKey, (prev) => reducer(prev === void 0 ? initialValue : prev, chunk)); + } + if (isReplaceRefetch && !cancelled) context.client.setQueryData(context.queryKey, result); + return context.client.getQueryData(context.queryKey) ?? initialValue; + }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/types.js +var dataTagSymbol = /* @__PURE__ */ Symbol("dataTagSymbol"); +var dataTagErrorSymbol = /* @__PURE__ */ Symbol("dataTagErrorSymbol"); +var unsetMarker = /* @__PURE__ */ Symbol("unsetMarker"); +//#endregion +//#region node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react-jsx-runtime.development.js +/** +* @license React +* react-jsx-runtime.development.js +* +* Copyright (c) Meta Platforms, Inc. and affiliates. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ +var require_react_jsx_runtime_development = /* @__PURE__ */ __commonJSMin(((exports) => { + (function() { + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: return "Fragment"; + case REACT_PROFILER_TYPE: return "Profiler"; + case REACT_STRICT_MODE_TYPE: return "StrictMode"; + case REACT_SUSPENSE_TYPE: return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: return "SuspenseList"; + case REACT_ACTIVITY_TYPE: return "Activity"; + } + if ("object" === typeof type) switch ("number" === typeof type.tag && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) { + case REACT_PORTAL_TYPE: return "Portal"; + case REACT_CONTEXT_TYPE: return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); + return type; + case REACT_MEMO_TYPE: return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function testStringCoercion(value) { + return "" + value; + } + function checkKeyStringCoercion(value) { + try { + testStringCoercion(value); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + if (JSCompiler_inline_result) { + JSCompiler_inline_result = console; + var JSCompiler_temp_const = JSCompiler_inline_result.error; + var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; + JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0); + return testStringCoercion(value); + } + } + function getTaskName(type) { + if (type === REACT_FRAGMENT_TYPE) return "<>"; + if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE) return "<...>"; + try { + var name = getComponentNameFromType(type); + return name ? "<" + name + ">" : "<...>"; + } catch (x) { + return "<...>"; + } + } + function getOwner() { + var dispatcher = ReactSharedInternals.A; + return null === dispatcher ? null : dispatcher.getOwner(); + } + function UnknownOwner() { + return Error("react-stack-top-frame"); + } + function hasValidKey(config) { + if (hasOwnProperty.call(config, "key")) { + var getter = Object.getOwnPropertyDescriptor(config, "key").get; + if (getter && getter.isReactWarning) return !1; + } + return void 0 !== config.key; + } + function defineKeyPropWarningGetter(props, displayName) { + function warnAboutAccessingKey() { + specialPropKeyWarningShown || (specialPropKeyWarningShown = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName)); + } + warnAboutAccessingKey.isReactWarning = !0; + Object.defineProperty(props, "key", { + get: warnAboutAccessingKey, + configurable: !0 + }); + } + function elementRefGetterWithDeprecationWarning() { + var componentName = getComponentNameFromType(this.type); + didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")); + componentName = this.props.ref; + return void 0 !== componentName ? componentName : null; + } + function ReactElement(type, key, props, owner, debugStack, debugTask) { + var refProp = props.ref; + type = { + $$typeof: REACT_ELEMENT_TYPE, + type, + key, + props, + _owner: owner + }; + null !== (void 0 !== refProp ? refProp : null) ? Object.defineProperty(type, "ref", { + enumerable: !1, + get: elementRefGetterWithDeprecationWarning + }) : Object.defineProperty(type, "ref", { + enumerable: !1, + value: null + }); + type._store = {}; + Object.defineProperty(type._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: 0 + }); + Object.defineProperty(type, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(type, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugStack + }); + Object.defineProperty(type, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: debugTask + }); + Object.freeze && (Object.freeze(type.props), Object.freeze(type)); + return type; + } + function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) { + var children = config.children; + if (void 0 !== children) if (isStaticChildren) if (isArrayImpl(children)) { + for (isStaticChildren = 0; isStaticChildren < children.length; isStaticChildren++) validateChildKeys(children[isStaticChildren]); + Object.freeze && Object.freeze(children); + } else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."); + else validateChildKeys(children); + if (hasOwnProperty.call(config, "key")) { + children = getComponentNameFromType(type); + var keys = Object.keys(config).filter(function(k) { + return "key" !== k; + }); + isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}"; + didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error("A props object containing a \"key\" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />", isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = !0); + } + children = null; + void 0 !== maybeKey && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey); + hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key); + if ("key" in config) { + maybeKey = {}; + for (var propName in config) "key" !== propName && (maybeKey[propName] = config[propName]); + } else maybeKey = config; + children && defineKeyPropWarningGetter(maybeKey, "function" === typeof type ? type.displayName || type.name || "Unknown" : type); + return ReactElement(type, children, maybeKey, getOwner(), debugStack, debugTask); + } + function validateChildKeys(node) { + isValidElement(node) ? node._store && (node._store.validated = 1) : "object" === typeof node && null !== node && node.$$typeof === REACT_LAZY_TYPE && ("fulfilled" === node._payload.status ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1)); + } + function isValidElement(object) { + return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; + } + var React = require_react(), REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() { + return null; + }; + React = { react_stack_bottom_frame: function(callStackForError) { + return callStackForError(); + } }; + var specialPropKeyWarningShown; + var didWarnAboutElementRef = {}; + var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(React, UnknownOwner)(); + var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); + var didWarnAboutKeySpread = {}; + exports.Fragment = REACT_FRAGMENT_TYPE; + exports.jsx = function(type, config, maybeKey) { + var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return jsxDEVImpl(type, config, maybeKey, !1, trackActualOwner ? Error("react-stack-top-frame") : unknownOwnerDebugStack, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask); + }; + exports.jsxs = function(type, config, maybeKey) { + var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; + return jsxDEVImpl(type, config, maybeKey, !0, trackActualOwner ? Error("react-stack-top-frame") : unknownOwnerDebugStack, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask); + }; + })(); +})); +//#endregion +//#region node_modules/.pnpm/react@19.2.6/node_modules/react/jsx-runtime.js +var require_jsx_runtime = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports = require_react_jsx_runtime_development(); +})); +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +var import_react = /* @__PURE__ */ __toESM(require_react(), 1); +var import_jsx_runtime = require_jsx_runtime(); +var QueryClientContext = import_react.createContext(void 0); +var useQueryClient = (queryClient) => { + const client = import_react.useContext(QueryClientContext); + if (queryClient) return queryClient; + if (!client) throw new Error("No QueryClient set, use QueryClientProvider to set one"); + return client; +}; +var QueryClientProvider = ({ client, children }) => { + import_react.useEffect(() => { + client.mount(); + return () => { + client.unmount(); + }; + }, [client]); + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QueryClientContext.Provider, { + value: client, + children + }); +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js +var IsRestoringContext = import_react.createContext(false); +var useIsRestoring = () => import_react.useContext(IsRestoringContext); +var IsRestoringProvider = IsRestoringContext.Provider; +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js +function createValue() { + let isReset = false; + return { + clearReset: () => { + isReset = false; + }, + reset: () => { + isReset = true; + }, + isReset: () => { + return isReset; + } + }; +} +var QueryErrorResetBoundaryContext = import_react.createContext(createValue()); +var useQueryErrorResetBoundary = () => import_react.useContext(QueryErrorResetBoundaryContext); +var QueryErrorResetBoundary = ({ children }) => { + const [value] = import_react.useState(() => createValue()); + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(QueryErrorResetBoundaryContext.Provider, { + value, + children: typeof children === "function" ? children(value) : children + }); +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js +var ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => { + const throwOnError = query?.state.error && typeof options.throwOnError === "function" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError; + if (options.suspense || options.experimental_prefetchInRender || throwOnError) { + if (!errorResetBoundary.isReset()) options.retryOnMount = false; + } +}; +var useClearResetErrorBoundary = (errorResetBoundary) => { + import_react.useEffect(() => { + errorResetBoundary.clearReset(); + }, [errorResetBoundary]); +}; +var getHasError = ({ result, errorResetBoundary, throwOnError, query, suspense }) => { + return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query])); +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/suspense.js +var defaultThrowOnError = (_error, query) => query.state.data === void 0; +var ensureSuspenseTimers = (defaultedOptions) => { + if (defaultedOptions.suspense) { + const MIN_SUSPENSE_TIME_MS = 1e3; + const clamp = (value) => value === "static" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS); + const originalStaleTime = defaultedOptions.staleTime; + defaultedOptions.staleTime = typeof originalStaleTime === "function" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime); + if (typeof defaultedOptions.gcTime === "number") defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, MIN_SUSPENSE_TIME_MS); + } +}; +var willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring; +var shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending; +var fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => { + errorResetBoundary.clearReset(); +}); +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useQueries.js +function useQueries({ queries, ...options }, queryClient) { + const client = useQueryClient(queryClient); + const isRestoring = useIsRestoring(); + const errorResetBoundary = useQueryErrorResetBoundary(); + const defaultedQueries = import_react.useMemo(() => queries.map((opts) => { + const defaultedOptions = client.defaultQueryOptions(opts); + defaultedOptions._optimisticResults = isRestoring ? "isRestoring" : "optimistic"; + return defaultedOptions; + }), [ + queries, + client, + isRestoring + ]); + defaultedQueries.forEach((queryOptions) => { + ensureSuspenseTimers(queryOptions); + ensurePreventErrorBoundaryRetry(queryOptions, errorResetBoundary, client.getQueryCache().get(queryOptions.queryHash)); + }); + useClearResetErrorBoundary(errorResetBoundary); + const [observer] = import_react.useState(() => new QueriesObserver(client, defaultedQueries, options)); + const [optimisticResult, getCombinedResult, trackResult] = observer.getOptimisticResult(defaultedQueries, options.combine); + const shouldSubscribe = !isRestoring && options.subscribed !== false; + import_react.useSyncExternalStore(import_react.useCallback((onStoreChange) => shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop, [observer, shouldSubscribe]), () => observer.getCurrentResult(), () => observer.getCurrentResult()); + import_react.useEffect(() => { + observer.setQueries(defaultedQueries, options); + }, [ + defaultedQueries, + options, + observer + ]); + const suspensePromises = optimisticResult.some((result, index) => shouldSuspend(defaultedQueries[index], result)) ? optimisticResult.flatMap((result, index) => { + const opts = defaultedQueries[index]; + if (opts && shouldSuspend(opts, result)) return fetchOptimistic(opts, new QueryObserver(client, opts), errorResetBoundary); + return []; + }) : []; + if (suspensePromises.length > 0) throw Promise.all(suspensePromises); + const firstSingleResultWhichShouldThrow = optimisticResult.find((result, index) => { + const query = defaultedQueries[index]; + return query && getHasError({ + result, + errorResetBoundary, + throwOnError: query.throwOnError, + query: client.getQueryCache().get(query.queryHash), + suspense: query.suspense + }); + }); + if (firstSingleResultWhichShouldThrow?.error) throw firstSingleResultWhichShouldThrow.error; + return getCombinedResult(trackResult()); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +function useBaseQuery(options, Observer, queryClient) { + if (typeof options !== "object" || Array.isArray(options)) throw new Error("Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object"); + const isRestoring = useIsRestoring(); + const errorResetBoundary = useQueryErrorResetBoundary(); + const client = useQueryClient(queryClient); + const defaultedOptions = client.defaultQueryOptions(options); + client.getDefaultOptions().queries?._experimental_beforeQuery?.(defaultedOptions); + const query = client.getQueryCache().get(defaultedOptions.queryHash); + if (!defaultedOptions.queryFn) console.error(`[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`); + defaultedOptions._optimisticResults = isRestoring ? "isRestoring" : "optimistic"; + ensureSuspenseTimers(defaultedOptions); + ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query); + useClearResetErrorBoundary(errorResetBoundary); + const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash); + const [observer] = import_react.useState(() => new Observer(client, defaultedOptions)); + const result = observer.getOptimisticResult(defaultedOptions); + const shouldSubscribe = !isRestoring && options.subscribed !== false; + import_react.useSyncExternalStore(import_react.useCallback((onStoreChange) => { + const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop; + observer.updateResult(); + return unsubscribe; + }, [observer, shouldSubscribe]), () => observer.getCurrentResult(), () => observer.getCurrentResult()); + import_react.useEffect(() => { + observer.setOptions(defaultedOptions); + }, [defaultedOptions, observer]); + if (shouldSuspend(defaultedOptions, result)) throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary); + if (getHasError({ + result, + errorResetBoundary, + throwOnError: defaultedOptions.throwOnError, + query, + suspense: defaultedOptions.suspense + })) throw result.error; + client.getDefaultOptions().queries?._experimental_afterQuery?.(defaultedOptions, result); + if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) (isNewCacheEntry ? fetchOptimistic(defaultedOptions, observer, errorResetBoundary) : query?.promise)?.catch(noop).finally(() => { + observer.updateResult(); + }); + return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useQuery.js +function useQuery(options, queryClient) { + return useBaseQuery(options, QueryObserver, queryClient); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseQuery.js +function useSuspenseQuery(options, queryClient) { + if (options.queryFn === skipToken) console.error("skipToken is not allowed for useSuspenseQuery"); + return useBaseQuery({ + ...options, + enabled: true, + suspense: true, + throwOnError: defaultThrowOnError, + placeholderData: void 0 + }, QueryObserver, queryClient); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseInfiniteQuery.js +function useSuspenseInfiniteQuery(options, queryClient) { + if (options.queryFn === skipToken) console.error("skipToken is not allowed for useSuspenseInfiniteQuery"); + return useBaseQuery({ + ...options, + enabled: true, + suspense: true, + throwOnError: defaultThrowOnError + }, InfiniteQueryObserver, queryClient); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseQueries.js +function useSuspenseQueries(options, queryClient) { + return useQueries({ + ...options, + queries: options.queries.map((query) => { + if (query.queryFn === skipToken) console.error("skipToken is not allowed for useSuspenseQueries"); + return { + ...query, + suspense: true, + throwOnError: defaultThrowOnError, + enabled: true, + placeholderData: void 0 + }; + }) + }, queryClient); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/usePrefetchQuery.js +function usePrefetchQuery(options, queryClient) { + const client = useQueryClient(queryClient); + if (!client.getQueryState(options.queryKey)) client.prefetchQuery(options); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/usePrefetchInfiniteQuery.js +function usePrefetchInfiniteQuery(options, queryClient) { + const client = useQueryClient(queryClient); + if (!client.getQueryState(options.queryKey)) client.prefetchInfiniteQuery(options); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/queryOptions.js +function queryOptions(options) { + return options; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/infiniteQueryOptions.js +function infiniteQueryOptions(options) { + return options; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js +var HydrationBoundary = ({ children, options = {}, state, queryClient }) => { + const client = useQueryClient(queryClient); + const optionsRef = import_react.useRef(options); + import_react.useEffect(() => { + optionsRef.current = options; + }); + const hydrationQueue = import_react.useMemo(() => { + if (state) { + if (typeof state !== "object") return; + const queryCache = client.getQueryCache(); + const queries = state.queries || []; + const newQueries = []; + const existingQueries = []; + for (const dehydratedQuery of queries) { + const existingQuery = queryCache.get(dehydratedQuery.queryHash); + if (!existingQuery) newQueries.push(dehydratedQuery); + else if (dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt || dehydratedQuery.promise && existingQuery.state.status !== "pending" && existingQuery.state.fetchStatus !== "fetching" && dehydratedQuery.dehydratedAt !== void 0 && dehydratedQuery.dehydratedAt > existingQuery.state.dataUpdatedAt) existingQueries.push(dehydratedQuery); + } + if (newQueries.length > 0) hydrate(client, { queries: newQueries }, optionsRef.current); + if (existingQueries.length > 0) return existingQueries; + } + }, [client, state]); + import_react.useEffect(() => { + if (hydrationQueue) hydrate(client, { queries: hydrationQueue }, optionsRef.current); + }, [client, hydrationQueue]); + return children; +}; +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useIsFetching.js +function useIsFetching(filters, queryClient) { + const client = useQueryClient(queryClient); + const queryCache = client.getQueryCache(); + return import_react.useSyncExternalStore(import_react.useCallback((onStoreChange) => queryCache.subscribe(notifyManager.batchCalls(onStoreChange)), [queryCache]), () => client.isFetching(filters), () => client.isFetching(filters)); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useMutationState.js +function useIsMutating(filters, queryClient) { + const client = useQueryClient(queryClient); + return useMutationState({ filters: { + ...filters, + status: "pending" + } }, client).length; +} +function getResult(mutationCache, options) { + return mutationCache.findAll(options.filters).map((mutation) => options.select ? options.select(mutation) : mutation.state); +} +function useMutationState(options = {}, queryClient) { + const mutationCache = useQueryClient(queryClient).getMutationCache(); + const optionsRef = import_react.useRef(options); + const result = import_react.useRef(null); + if (result.current === null) result.current = getResult(mutationCache, options); + import_react.useEffect(() => { + optionsRef.current = options; + }); + return import_react.useSyncExternalStore(import_react.useCallback((onStoreChange) => mutationCache.subscribe(() => { + const nextResult = replaceEqualDeep(result.current, getResult(mutationCache, optionsRef.current)); + if (result.current !== nextResult) { + result.current = nextResult; + notifyManager.schedule(onStoreChange); + } + }), [mutationCache]), () => result.current, () => result.current); +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useMutation.js +function useMutation(options, queryClient) { + const client = useQueryClient(queryClient); + const [observer] = import_react.useState(() => new MutationObserver(client, options)); + import_react.useEffect(() => { + observer.setOptions(options); + }, [observer, options]); + const result = import_react.useSyncExternalStore(import_react.useCallback((onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)), [observer]), () => observer.getCurrentResult(), () => observer.getCurrentResult()); + const mutate = import_react.useCallback((variables, mutateOptions) => { + observer.mutate(variables, mutateOptions).catch(noop); + }, [observer]); + if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) throw result.error; + return { + ...result, + mutate, + mutateAsync: result.mutate + }; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/mutationOptions.js +function mutationOptions(options) { + return options; +} +//#endregion +//#region node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js +function useInfiniteQuery(options, queryClient) { + return useBaseQuery(options, InfiniteQueryObserver, queryClient); +} +//#endregion +export { CancelledError, HydrationBoundary, InfiniteQueryObserver, IsRestoringProvider, Mutation, MutationCache, MutationObserver, QueriesObserver, Query, QueryCache, QueryClient, QueryClientContext, QueryClientProvider, QueryErrorResetBoundary, QueryObserver, dataTagErrorSymbol, dataTagSymbol, defaultScheduler, defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, environmentManager, streamedQuery as experimental_streamedQuery, focusManager, hashKey, hydrate, infiniteQueryOptions, isCancelledError, isServer, keepPreviousData, matchMutation, matchQuery, mutationOptions, noop, notifyManager, onlineManager, partialMatchKey, queryOptions, replaceEqualDeep, shouldThrowError, skipToken, timeoutManager, unsetMarker, useInfiniteQuery, useIsFetching, useIsMutating, useIsRestoring, useMutation, useMutationState, usePrefetchInfiniteQuery, usePrefetchQuery, useQueries, useQuery, useQueryClient, useQueryErrorResetBoundary, useSuspenseInfiniteQuery, useSuspenseQueries, useSuspenseQuery }; + +//# sourceMappingURL=@tanstack_react-query.js.map \ No newline at end of file diff --git a/frontend/.vite/deps/@tanstack_react-query.js.map b/frontend/.vite/deps/@tanstack_react-query.js.map new file mode 100644 index 0000000..cf71433 --- /dev/null +++ b/frontend/.vite/deps/@tanstack_react-query.js.map @@ -0,0 +1 @@ +{"version":3,"file":"@tanstack_react-query.js","names":["#setup","#cleanup","#focused","#providerCalled","#provider","#setup","#cleanup","#online","#gcTimeout","#abortSignalConsumed","#defaultOptions","#client","#cache","#initialState","getDefaultState","#queryType","#retryer","#dispatch","#isInitialPausedFetch","#revertState","#client","#selectError","#currentThenable","#currentQuery","#executeFetch","#updateTimers","#clearStaleTimeout","#clearRefetchInterval","#updateQuery","#updateStaleTimeout","#computeRefetchInterval","#currentRefetchInterval","#updateRefetchInterval","#currentResult","#currentResultOptions","#currentResultState","#trackedProps","#staleTimeoutId","#refetchIntervalId","#currentQueryInitialState","#lastQueryWithDefinedData","#selectFn","#selectResult","#notify","#client","#mutationCache","#observers","#retryer","#dispatch","#mutations","#scopes","#mutationId","#client","#updateResult","#currentMutation","#notify","#currentResult","#mutateOptions","#client","#options","#queries","#observers","#result","#onUpdate","#findMatchingObservers","#observerMatches","#notify","#combineResult","#trackResult","#lastQueryHashes","#combinedResult","#lastResult","#lastCombine","#shouldSkipCombine","#queries","#queryCache","#mutationCache","#defaultOptions","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline"],"sources":["../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/utils.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/thenable.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/hydration.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/retryer.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/removable.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/query.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutation.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queriesObserver.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/streamedQuery.js","../../node_modules/.pnpm/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/types.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react-jsx-runtime.development.js","../../node_modules/.pnpm/react@19.2.6/node_modules/react/jsx-runtime.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/suspense.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useQueries.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseInfiniteQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useSuspenseQueries.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/usePrefetchQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/usePrefetchInfiniteQuery.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/queryOptions.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/infiniteQueryOptions.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/HydrationBoundary.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useIsFetching.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useMutationState.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useMutation.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/mutationOptions.js","../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js"],"sourcesContent":["// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support the default provider's concrete timer ID, which is\n // infeasible across environments.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveQueryBoolean(option, query) {\n return typeof option === \"function\" ? option(query) : option;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n let isServerFn = () => isServer;\n return {\n /**\n * Returns whether the current runtime should be treated as a server environment.\n */\n isServer() {\n return isServerFn();\n },\n /**\n * Overrides the server check globally.\n */\n setIsServer(isServerValue) {\n isServerFn = isServerValue;\n }\n };\n})();\nexport {\n environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/hydration.ts\nimport { tryResolveSync } from \"./thenable.js\";\nimport { noop } from \"./utils.js\";\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData, shouldRedactErrors) {\n const dehydratePromise = () => {\n const promise = query.promise?.then(serializeData).catch((error) => {\n if (!shouldRedactErrors(error)) {\n return Promise.reject(error);\n }\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n });\n promise?.catch(noop);\n return promise;\n };\n return {\n dehydratedAt: Date.now(),\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: dehydratePromise()\n },\n ...query.meta && { meta: query.meta },\n ...query.queryType && { queryType: query.queryType }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction defaultShouldRedactErrors(_) {\n return true;\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const shouldRedactErrors = options.shouldRedactErrors ?? client.getDefaultOptions().dehydrate?.shouldRedactErrors ?? defaultShouldRedactErrors;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData, shouldRedactErrors)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(\n ({\n queryKey,\n state,\n queryHash,\n meta,\n promise,\n dehydratedAt,\n queryType\n }) => {\n const syncData = promise ? tryResolveSync(promise) : void 0;\n const rawData = state.data === void 0 ? syncData?.data : state.data;\n const data = rawData === void 0 ? rawData : deserializeData(rawData);\n let query = queryCache.get(queryHash);\n const existingQueryIsPending = query?.state.status === \"pending\";\n const existingQueryIsFetching = query?.state.fetchStatus === \"fetching\";\n if (query) {\n const hasNewerSyncData = syncData && // We only need this undefined check to handle older dehydration\n // payloads that might not have dehydratedAt\n dehydratedAt !== void 0 && dehydratedAt > query.state.dataUpdatedAt;\n if (state.dataUpdatedAt > query.state.dataUpdatedAt || hasNewerSyncData) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data,\n // If the query was pending at the moment of dehydration, but resolved to have data\n // before hydration, we can assume the query should be hydrated as successful.\n //\n // Since you can opt into dehydrating failed queries, and those can have data from\n // previous successful fetches, we make sure we only do this for pending queries.\n ...state.status === \"pending\" && data !== void 0 && {\n status: \"success\",\n // Preserve existing fetchStatus if the existing query is actively fetching.\n ...!existingQueryIsFetching && {\n fetchStatus: \"idle\"\n }\n }\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta,\n _type: queryType\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\",\n // Like above, if the query was pending at the moment of dehydration but has data,\n // we can assume it should be hydrated as successful.\n status: state.status === \"pending\" && data !== void 0 ? \"success\" : state.status\n }\n );\n }\n if (promise && // If the data was synchronously available, there is no need to set up\n // a retryer and thus no reason to call fetch\n !syncData && !existingQueryIsPending && !existingQueryIsFetching && // Only hydrate if dehydration is newer than any existing data,\n // this is always true for new queries\n (dehydratedAt === void 0 || dehydratedAt > query.state.dataUpdatedAt)) {\n query.fetch(void 0, {\n // RSC transformed promises are not thenable\n initialPromise: Promise.resolve(promise).then(deserializeData)\n }).catch(noop);\n }\n }\n );\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout !== void 0) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject(context.signal.reason);\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar Query = class extends Removable {\n #queryType;\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get queryType() {\n return this.#queryType;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n if (options?._type) {\n this.#queryType = options._type;\n }\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state) {\n this.#dispatch({ type: \"setState\", state });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n get resetState() {\n return this.#initialState;\n }\n reset() {\n this.destroy();\n this.setState(this.resetState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveQueryBoolean(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || !this.isFetched();\n }\n isFetched() {\n return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n #isInitialPausedFetch() {\n return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n const behavior = this.#queryType === \"infinite\" ? infiniteQueryBehavior(\n this.options.pages\n ) : this.options.behavior;\n behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n if (this.#mutationCache.config.onMutate) {\n await this.#mutationCache.config.onMutate(\n variables,\n this,\n mutationFnContext\n );\n }\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queriesObserver.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { replaceEqualDeep, shallowEqualObjects } from \"./utils.js\";\nfunction difference(array1, array2) {\n const excludeSet = new Set(array2);\n return array1.filter((x) => !excludeSet.has(x));\n}\nfunction replaceAt(array, index, value) {\n const copy = array.slice(0);\n copy[index] = value;\n return copy;\n}\nvar QueriesObserver = class extends Subscribable {\n #client;\n #result;\n #queries;\n #options;\n #observers;\n #combinedResult;\n #lastCombine;\n #lastResult;\n #lastQueryHashes;\n #observerMatches = [];\n constructor(client, queries, options) {\n super();\n this.#client = client;\n this.#options = options;\n this.#queries = [];\n this.#observers = [];\n this.#result = [];\n this.setQueries(queries);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result);\n });\n });\n }\n }\n onUnsubscribe() {\n if (!this.listeners.size) {\n this.destroy();\n }\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#observers.forEach((observer) => {\n observer.destroy();\n });\n }\n setQueries(queries, options) {\n this.#queries = queries;\n this.#options = options;\n if (process.env.NODE_ENV !== \"production\") {\n const queryHashes = queries.map(\n (query) => this.#client.defaultQueryOptions(query).queryHash\n );\n if (new Set(queryHashes).size !== queryHashes.length) {\n console.warn(\n \"[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.\"\n );\n }\n }\n notifyManager.batch(() => {\n const prevObservers = this.#observers;\n const newObserverMatches = this.#findMatchingObservers(this.#queries);\n newObserverMatches.forEach(\n (match) => match.observer.setOptions(match.defaultedQueryOptions)\n );\n const newObservers = newObserverMatches.map((match) => match.observer);\n const newResult = newObservers.map(\n (observer) => observer.getCurrentResult()\n );\n const hasLengthChange = prevObservers.length !== newObservers.length;\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index]\n );\n const hasStructuralChange = hasLengthChange || hasIndexChange;\n const hasResultChange = hasStructuralChange ? true : newResult.some((result, index) => {\n const prev = this.#result[index];\n return !prev || !shallowEqualObjects(result, prev);\n });\n if (!hasStructuralChange && !hasResultChange) return;\n if (hasStructuralChange) {\n this.#observerMatches = newObserverMatches;\n this.#observers = newObservers;\n }\n this.#result = newResult;\n if (!this.hasListeners()) return;\n if (hasStructuralChange) {\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy();\n });\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result);\n });\n });\n }\n this.#notify();\n });\n }\n getCurrentResult() {\n return this.#result;\n }\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery());\n }\n getObservers() {\n return this.#observers;\n }\n getOptimisticResult(queries, combine) {\n const matches = this.#findMatchingObservers(queries);\n const result = matches.map(\n (match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)\n );\n const queryHashes = matches.map(\n (match) => match.defaultedQueryOptions.queryHash\n );\n return [\n result,\n (r) => {\n return this.#combineResult(r ?? result, combine, queryHashes);\n },\n () => {\n return this.#trackResult(result, matches);\n }\n ];\n }\n #trackResult(result, matches) {\n return matches.map((match, index) => {\n const observerResult = result[index];\n return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp);\n });\n }) : observerResult;\n });\n }\n #combineResult(input, combine, queryHashes) {\n if (combine) {\n const lastHashes = this.#lastQueryHashes;\n const queryHashesChanged = queryHashes !== void 0 && lastHashes !== void 0 && (lastHashes.length !== queryHashes.length || queryHashes.some((hash, i) => hash !== lastHashes[i]));\n if (!this.#combinedResult || this.#result !== this.#lastResult || queryHashesChanged || combine !== this.#lastCombine) {\n this.#lastCombine = combine;\n this.#lastResult = this.#result;\n if (queryHashes !== void 0) {\n this.#lastQueryHashes = queryHashes;\n }\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input)\n );\n }\n return this.#combinedResult;\n }\n return input;\n }\n #shouldSkipCombine() {\n return this.#options?.combine !== void 0 && this.#observers.some((observer, index) => {\n return observer.options.suspense && this.#result[index]?.data === void 0;\n });\n }\n #findMatchingObservers(queries) {\n const prevObserversMap = /* @__PURE__ */ new Map();\n this.#observers.forEach((observer) => {\n const key = observer.options.queryHash;\n if (!key) return;\n const previousObservers = prevObserversMap.get(key);\n if (previousObservers) {\n previousObservers.push(observer);\n } else {\n prevObserversMap.set(key, [observer]);\n }\n });\n const observers = [];\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const match = prevObserversMap.get(defaultedOptions.queryHash)?.shift();\n const observer = match ?? new QueryObserver(this.#client, defaultedOptions);\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer\n });\n });\n return observers;\n }\n #onUpdate(observer, result) {\n const index = this.#observers.indexOf(observer);\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result);\n this.#notify();\n }\n }\n #notify() {\n if (this.hasListeners()) {\n const newTracked = this.#trackResult(this.#result, this.#observerMatches);\n const shouldSkipCombine = this.#shouldSkipCombine();\n const previousResult = this.#combinedResult;\n const newResult = shouldSkipCombine ? previousResult : this.#combineResult(newTracked, this.#options?.combine);\n if (shouldSkipCombine || previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result);\n });\n });\n }\n }\n }\n};\nexport {\n QueriesObserver\n};\n//# sourceMappingURL=queriesObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options._type = \"infinite\";\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options._type = \"infinite\";\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","// src/streamedQuery.ts\nimport { addConsumeAwareSignal, addToEnd } from \"./utils.js\";\nfunction streamedQuery({\n streamFn,\n refetchMode = \"reset\",\n reducer = (items, chunk) => addToEnd(items, chunk),\n initialValue = []\n}) {\n return async (context) => {\n const query = context.client.getQueryCache().find({ queryKey: context.queryKey, exact: true });\n const isRefetch = !!query && query.isFetched();\n if (isRefetch && refetchMode === \"reset\") {\n query.setState({\n ...query.resetState,\n fetchStatus: \"fetching\"\n });\n }\n let result = initialValue;\n let cancelled = false;\n const streamFnContext = addConsumeAwareSignal(\n {\n client: context.client,\n meta: context.meta,\n queryKey: context.queryKey,\n pageParam: context.pageParam,\n direction: context.direction\n },\n () => context.signal,\n () => cancelled = true\n );\n const stream = await streamFn(streamFnContext);\n const isReplaceRefetch = isRefetch && refetchMode === \"replace\";\n for await (const chunk of stream) {\n if (cancelled) {\n break;\n }\n if (isReplaceRefetch) {\n result = reducer(result, chunk);\n } else {\n context.client.setQueryData(\n context.queryKey,\n (prev) => reducer(prev === void 0 ? initialValue : prev, chunk)\n );\n }\n }\n if (isReplaceRefetch && !cancelled) {\n context.client.setQueryData(context.queryKey, result);\n }\n return context.client.getQueryData(context.queryKey) ?? initialValue;\n };\n}\nexport {\n streamedQuery\n};\n//# sourceMappingURL=streamedQuery.js.map","// src/types.ts\nvar dataTagSymbol = /* @__PURE__ */ Symbol(\"dataTagSymbol\");\nvar dataTagErrorSymbol = /* @__PURE__ */ Symbol(\"dataTagErrorSymbol\");\nvar unsetMarker = /* @__PURE__ */ Symbol(\"unsetMarker\");\nexport {\n dataTagErrorSymbol,\n dataTagSymbol,\n unsetMarker\n};\n//# sourceMappingURL=types.js.map","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useQueries.ts\nimport * as React from \"react\";\nimport {\n QueriesObserver,\n QueryObserver,\n noop,\n notifyManager\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend\n} from \"./suspense.js\";\nfunction useQueries({\n queries,\n ...options\n}, queryClient) {\n const client = useQueryClient(queryClient);\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const defaultedQueries = React.useMemo(\n () => queries.map((opts) => {\n const defaultedOptions = client.defaultQueryOptions(\n opts\n );\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n return defaultedOptions;\n }),\n [queries, client, isRestoring]\n );\n defaultedQueries.forEach((queryOptions) => {\n ensureSuspenseTimers(queryOptions);\n const query = client.getQueryCache().get(queryOptions.queryHash);\n ensurePreventErrorBoundaryRetry(queryOptions, errorResetBoundary, query);\n });\n useClearResetErrorBoundary(errorResetBoundary);\n const [observer] = React.useState(\n () => new QueriesObserver(\n client,\n defaultedQueries,\n options\n )\n );\n const [optimisticResult, getCombinedResult, trackResult] = observer.getOptimisticResult(\n defaultedQueries,\n options.combine\n );\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop,\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setQueries(\n defaultedQueries,\n options\n );\n }, [defaultedQueries, options, observer]);\n const shouldAtLeastOneSuspend = optimisticResult.some(\n (result, index) => shouldSuspend(defaultedQueries[index], result)\n );\n const suspensePromises = shouldAtLeastOneSuspend ? optimisticResult.flatMap((result, index) => {\n const opts = defaultedQueries[index];\n if (opts && shouldSuspend(opts, result)) {\n const queryObserver = new QueryObserver(client, opts);\n return fetchOptimistic(opts, queryObserver, errorResetBoundary);\n }\n return [];\n }) : [];\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises);\n }\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) => {\n const query = defaultedQueries[index];\n return query && getHasError({\n result,\n errorResetBoundary,\n throwOnError: query.throwOnError,\n query: client.getQueryCache().get(query.queryHash),\n suspense: query.suspense\n });\n }\n );\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error;\n }\n return getCombinedResult(trackResult());\n}\nexport {\n useQueries\n};\n//# sourceMappingURL=useQueries.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useSuspenseQuery.ts\nimport { QueryObserver, skipToken } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { defaultThrowOnError } from \"./suspense.js\";\nfunction useSuspenseQuery(options, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\"skipToken is not allowed for useSuspenseQuery\");\n }\n }\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n placeholderData: void 0\n },\n QueryObserver,\n queryClient\n );\n}\nexport {\n useSuspenseQuery\n};\n//# sourceMappingURL=useSuspenseQuery.js.map","\"use client\";\n\n// src/useSuspenseInfiniteQuery.ts\nimport { InfiniteQueryObserver, skipToken } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { defaultThrowOnError } from \"./suspense.js\";\nfunction useSuspenseInfiniteQuery(options, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\"skipToken is not allowed for useSuspenseInfiniteQuery\");\n }\n }\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError\n },\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useSuspenseInfiniteQuery\n};\n//# sourceMappingURL=useSuspenseInfiniteQuery.js.map","\"use client\";\n\n// src/useSuspenseQueries.ts\nimport { skipToken } from \"@tanstack/query-core\";\nimport { useQueries } from \"./useQueries.js\";\nimport { defaultThrowOnError } from \"./suspense.js\";\nfunction useSuspenseQueries(options, queryClient) {\n return useQueries(\n {\n ...options,\n queries: options.queries.map((query) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (query.queryFn === skipToken) {\n console.error(\"skipToken is not allowed for useSuspenseQueries\");\n }\n }\n return {\n ...query,\n suspense: true,\n throwOnError: defaultThrowOnError,\n enabled: true,\n placeholderData: void 0\n };\n })\n },\n queryClient\n );\n}\nexport {\n useSuspenseQueries\n};\n//# sourceMappingURL=useSuspenseQueries.js.map","// src/usePrefetchQuery.tsx\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction usePrefetchQuery(options, queryClient) {\n const client = useQueryClient(queryClient);\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchQuery(options);\n }\n}\nexport {\n usePrefetchQuery\n};\n//# sourceMappingURL=usePrefetchQuery.js.map","// src/usePrefetchInfiniteQuery.tsx\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction usePrefetchInfiniteQuery(options, queryClient) {\n const client = useQueryClient(queryClient);\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchInfiniteQuery(options);\n }\n}\nexport {\n usePrefetchInfiniteQuery\n};\n//# sourceMappingURL=usePrefetchInfiniteQuery.js.map","// src/queryOptions.ts\nfunction queryOptions(options) {\n return options;\n}\nexport {\n queryOptions\n};\n//# sourceMappingURL=queryOptions.js.map","// src/infiniteQueryOptions.ts\nfunction infiniteQueryOptions(options) {\n return options;\n}\nexport {\n infiniteQueryOptions\n};\n//# sourceMappingURL=infiniteQueryOptions.js.map","\"use client\";\n\n// src/HydrationBoundary.tsx\nimport * as React from \"react\";\nimport { hydrate } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nvar HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient\n}) => {\n const client = useQueryClient(queryClient);\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n });\n const hydrationQueue = React.useMemo(() => {\n if (state) {\n if (typeof state !== \"object\") {\n return;\n }\n const queryCache = client.getQueryCache();\n const queries = state.queries || [];\n const newQueries = [];\n const existingQueries = [];\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash);\n if (!existingQuery) {\n newQueries.push(dehydratedQuery);\n } else {\n const hydrationIsNewer = dehydratedQuery.state.dataUpdatedAt > existingQuery.state.dataUpdatedAt || dehydratedQuery.promise && existingQuery.state.status !== \"pending\" && existingQuery.state.fetchStatus !== \"fetching\" && dehydratedQuery.dehydratedAt !== void 0 && dehydratedQuery.dehydratedAt > existingQuery.state.dataUpdatedAt;\n if (hydrationIsNewer) {\n existingQueries.push(dehydratedQuery);\n }\n }\n }\n if (newQueries.length > 0) {\n hydrate(client, { queries: newQueries }, optionsRef.current);\n }\n if (existingQueries.length > 0) {\n return existingQueries;\n }\n }\n return void 0;\n }, [client, state]);\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current);\n }\n }, [client, hydrationQueue]);\n return children;\n};\nexport {\n HydrationBoundary\n};\n//# sourceMappingURL=HydrationBoundary.js.map","\"use client\";\n\n// src/useIsFetching.ts\nimport * as React from \"react\";\nimport { notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useIsFetching(filters, queryClient) {\n const client = useQueryClient(queryClient);\n const queryCache = client.getQueryCache();\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),\n [queryCache]\n ),\n () => client.isFetching(filters),\n () => client.isFetching(filters)\n );\n}\nexport {\n useIsFetching\n};\n//# sourceMappingURL=useIsFetching.js.map","\"use client\";\n\n// src/useMutationState.ts\nimport * as React from \"react\";\nimport { notifyManager, replaceEqualDeep } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useIsMutating(filters, queryClient) {\n const client = useQueryClient(queryClient);\n return useMutationState(\n { filters: { ...filters, status: \"pending\" } },\n client\n ).length;\n}\nfunction getResult(mutationCache, options) {\n return mutationCache.findAll(options.filters).map(\n (mutation) => options.select ? options.select(mutation) : mutation.state\n );\n}\nfunction useMutationState(options = {}, queryClient) {\n const mutationCache = useQueryClient(queryClient).getMutationCache();\n const optionsRef = React.useRef(options);\n const result = React.useRef(null);\n if (result.current === null) {\n result.current = getResult(mutationCache, options);\n }\n React.useEffect(() => {\n optionsRef.current = options;\n });\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => mutationCache.subscribe(() => {\n const nextResult = replaceEqualDeep(\n result.current,\n getResult(mutationCache, optionsRef.current)\n );\n if (result.current !== nextResult) {\n result.current = nextResult;\n notifyManager.schedule(onStoreChange);\n }\n }),\n [mutationCache]\n ),\n () => result.current,\n () => result.current\n );\n}\nexport {\n useIsMutating,\n useMutationState\n};\n//# sourceMappingURL=useMutationState.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","// src/mutationOptions.ts\nfunction mutationOptions(options) {\n return options;\n}\nexport {\n mutationOptions\n};\n//# sourceMappingURL=mutationOptions.js.map","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"mappings":"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"} \ No newline at end of file diff --git a/frontend/.vite/deps/_metadata.json b/frontend/.vite/deps/_metadata.json new file mode 100644 index 0000000..764a6b6 --- /dev/null +++ b/frontend/.vite/deps/_metadata.json @@ -0,0 +1,54 @@ +{ + "hash": "2f6823f3", + "configHash": "e3395d50", + "lockfileHash": "0eb2883b", + "browserHash": "c332ad85", + "optimized": { + "@tanstack/react-query": { + "src": "../../node_modules/.pnpm/@tanstack+react-query@5.100.9_react@19.2.6/node_modules/@tanstack/react-query/build/modern/index.js", + "file": "@tanstack_react-query.js", + "fileHash": "f8b84c60", + "needsInterop": false + }, + "react-dom/client": { + "src": "../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/client.js", + "file": "react-dom_client.js", + "fileHash": "a3cfb649", + "needsInterop": true + }, + "react-router-dom": { + "src": "../../node_modules/.pnpm/react-router-dom@7.15.0_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/react-router-dom/dist/index.mjs", + "file": "react-router-dom.js", + "fileHash": "267ed6bd", + "needsInterop": false + }, + "react": { + "src": "../../node_modules/.pnpm/react@19.2.6/node_modules/react/index.js", + "file": "react.js", + "fileHash": "43cb25c2", + "needsInterop": true + }, + "react/jsx-dev-runtime": { + "src": "../../node_modules/.pnpm/react@19.2.6/node_modules/react/jsx-dev-runtime.js", + "file": "react_jsx-dev-runtime.js", + "fileHash": "d3e1e2b9", + "needsInterop": true + }, + "zod": { + "src": "../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js", + "file": "zod.js", + "fileHash": "bac038b5", + "needsInterop": false + } + }, + "chunks": { + "chunk-CYJPkc-J": { + "file": "chunk-CYJPkc-J.js", + "isDynamicEntry": false + }, + "react-dom-0C0sIl3L": { + "file": "react-dom-0C0sIl3L.js", + "isDynamicEntry": false + } + } +} \ No newline at end of file diff --git a/frontend/.vite/deps/chunk-CYJPkc-J.js b/frontend/.vite/deps/chunk-CYJPkc-J.js new file mode 100644 index 0000000..53f5bad --- /dev/null +++ b/frontend/.vite/deps/chunk-CYJPkc-J.js @@ -0,0 +1,33 @@ +//#region \0rolldown/runtime.js +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports); +var __exportAll = (all, no_symbols) => { + let target = {}; + for (var name in all) __defProp(target, name, { + get: all[name], + enumerable: true + }); + if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); + return target; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ((k) => from[k]).bind(null, key), + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { + value: mod, + enumerable: true +}) : target, mod)); +//#endregion +export { __exportAll as n, __toESM as r, __commonJSMin as t }; diff --git a/frontend/.vite/deps/package.json b/frontend/.vite/deps/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/frontend/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/frontend/.vite/deps/react-dom-0C0sIl3L.js b/frontend/.vite/deps/react-dom-0C0sIl3L.js new file mode 100644 index 0000000..8680902 --- /dev/null +++ b/frontend/.vite/deps/react-dom-0C0sIl3L.js @@ -0,0 +1,185 @@ +import { t as __commonJSMin } from "./chunk-CYJPkc-J.js"; +import { t as require_react } from "./react.js"; +//#region node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/cjs/react-dom.development.js +/** +* @license React +* react-dom.development.js +* +* Copyright (c) Meta Platforms, Inc. and affiliates. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ +var require_react_dom_development = /* @__PURE__ */ __commonJSMin(((exports) => { + (function() { + function noop() {} + function testStringCoercion(value) { + return "" + value; + } + function createPortal$1(children, containerInfo, implementation) { + var key = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null; + try { + testStringCoercion(key); + var JSCompiler_inline_result = !1; + } catch (e) { + JSCompiler_inline_result = !0; + } + JSCompiler_inline_result && (console.error("The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", "function" === typeof Symbol && Symbol.toStringTag && key[Symbol.toStringTag] || key.constructor.name || "Object"), testStringCoercion(key)); + return { + $$typeof: REACT_PORTAL_TYPE, + key: null == key ? null : "" + key, + children, + containerInfo, + implementation + }; + } + function getCrossOriginStringAs(as, input) { + if ("font" === as) return ""; + if ("string" === typeof input) return "use-credentials" === input ? input : ""; + } + function getValueDescriptorExpectingObjectForWarning(thing) { + return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : "something with type \"" + typeof thing + "\""; + } + function getValueDescriptorExpectingEnumForWarning(thing) { + return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : "string" === typeof thing ? JSON.stringify(thing) : "number" === typeof thing ? "`" + thing + "`" : "something with type \"" + typeof thing + "\""; + } + function resolveDispatcher() { + var dispatcher = ReactSharedInternals.H; + null === dispatcher && console.error("Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem."); + return dispatcher; + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + var React = require_react(), Internals = { + d: { + f: noop, + r: function() { + throw Error("Invalid form element. requestFormReset must be passed a form that was rendered by React."); + }, + D: noop, + C: noop, + L: noop, + m: noop, + X: noop, + S: noop, + M: noop + }, + p: 0, + findDOMNode: null + }, REACT_PORTAL_TYPE = Symbol.for("react.portal"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + "function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error("React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"); + exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals; + exports.createPortal = function(children, container) { + var key = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null; + if (!container || 1 !== container.nodeType && 9 !== container.nodeType && 11 !== container.nodeType) throw Error("Target container is not a DOM element."); + return createPortal$1(children, container, null, key); + }; + exports.flushSync = function(fn) { + var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p; + try { + if (ReactSharedInternals.T = null, Internals.p = 2, fn) return fn(); + } finally { + ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f() && console.error("flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task."); + } + }; + exports.preconnect = function(href, options) { + "string" === typeof href && href ? null != options && "object" !== typeof options ? console.error("ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.", getValueDescriptorExpectingEnumForWarning(options)) : null != options && "string" !== typeof options.crossOrigin && console.error("ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.", getValueDescriptorExpectingObjectForWarning(options.crossOrigin)) : console.error("ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href)); + "string" === typeof href && (options ? (options = options.crossOrigin, options = "string" === typeof options ? "use-credentials" === options ? options : "" : void 0) : options = null, Internals.d.C(href, options)); + }; + exports.prefetchDNS = function(href) { + if ("string" !== typeof href || !href) console.error("ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href)); + else if (1 < arguments.length) { + var options = arguments[1]; + "object" === typeof options && options.hasOwnProperty("crossOrigin") ? console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", getValueDescriptorExpectingEnumForWarning(options)) : console.error("ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", getValueDescriptorExpectingEnumForWarning(options)); + } + "string" === typeof href && Internals.d.D(href); + }; + exports.preinit = function(href, options) { + "string" === typeof href && href ? null == options || "object" !== typeof options ? console.error("ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.", getValueDescriptorExpectingEnumForWarning(options)) : "style" !== options.as && "script" !== options.as && console.error("ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".", getValueDescriptorExpectingEnumForWarning(options.as)) : console.error("ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", getValueDescriptorExpectingObjectForWarning(href)); + if ("string" === typeof href && options && "string" === typeof options.as) { + var as = options.as, crossOrigin = getCrossOriginStringAs(as, options.crossOrigin), integrity = "string" === typeof options.integrity ? options.integrity : void 0, fetchPriority = "string" === typeof options.fetchPriority ? options.fetchPriority : void 0; + "style" === as ? Internals.d.S(href, "string" === typeof options.precedence ? options.precedence : void 0, { + crossOrigin, + integrity, + fetchPriority + }) : "script" === as && Internals.d.X(href, { + crossOrigin, + integrity, + fetchPriority, + nonce: "string" === typeof options.nonce ? options.nonce : void 0 + }); + } + }; + exports.preinitModule = function(href, options) { + var encountered = ""; + "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); + void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "script" !== options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingEnumForWarning(options.as) + "."); + if (encountered) console.error("ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s", encountered); + else switch (encountered = options && "string" === typeof options.as ? options.as : "script", encountered) { + case "script": break; + default: encountered = getValueDescriptorExpectingEnumForWarning(encountered), console.error("ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)", encountered, href); + } + if ("string" === typeof href) if ("object" === typeof options && null !== options) { + if (null == options.as || "script" === options.as) encountered = getCrossOriginStringAs(options.as, options.crossOrigin), Internals.d.M(href, { + crossOrigin: encountered, + integrity: "string" === typeof options.integrity ? options.integrity : void 0, + nonce: "string" === typeof options.nonce ? options.nonce : void 0 + }); + } else options ?? Internals.d.M(href); + }; + exports.preload = function(href, options) { + var encountered = ""; + "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); + null == options || "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : "string" === typeof options.as && options.as || (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + "."); + encountered && console.error("ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `` tag.%s", encountered); + if ("string" === typeof href && "object" === typeof options && null !== options && "string" === typeof options.as) { + encountered = options.as; + var crossOrigin = getCrossOriginStringAs(encountered, options.crossOrigin); + Internals.d.L(href, encountered, { + crossOrigin, + integrity: "string" === typeof options.integrity ? options.integrity : void 0, + nonce: "string" === typeof options.nonce ? options.nonce : void 0, + type: "string" === typeof options.type ? options.type : void 0, + fetchPriority: "string" === typeof options.fetchPriority ? options.fetchPriority : void 0, + referrerPolicy: "string" === typeof options.referrerPolicy ? options.referrerPolicy : void 0, + imageSrcSet: "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0, + imageSizes: "string" === typeof options.imageSizes ? options.imageSizes : void 0, + media: "string" === typeof options.media ? options.media : void 0 + }); + } + }; + exports.preloadModule = function(href, options) { + var encountered = ""; + "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); + void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "string" !== typeof options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + "."); + encountered && console.error("ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `` tag.%s", encountered); + "string" === typeof href && (options ? (encountered = getCrossOriginStringAs(options.as, options.crossOrigin), Internals.d.m(href, { + as: "string" === typeof options.as && "script" !== options.as ? options.as : void 0, + crossOrigin: encountered, + integrity: "string" === typeof options.integrity ? options.integrity : void 0 + })) : Internals.d.m(href)); + }; + exports.requestFormReset = function(form) { + Internals.d.r(form); + }; + exports.unstable_batchedUpdates = function(fn, a) { + return fn(a); + }; + exports.useFormState = function(action, initialState, permalink) { + return resolveDispatcher().useFormState(action, initialState, permalink); + }; + exports.useFormStatus = function() { + return resolveDispatcher().useHostTransitionStatus(); + }; + exports.version = "19.2.6"; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); +})); +//#endregion +//#region node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/index.js +var require_react_dom = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports = require_react_dom_development(); +})); +//#endregion +export { require_react_dom as t }; + +//# sourceMappingURL=react-dom-0C0sIl3L.js.map \ No newline at end of file diff --git a/frontend/.vite/deps/react-dom-0C0sIl3L.js.map b/frontend/.vite/deps/react-dom-0C0sIl3L.js.map new file mode 100644 index 0000000..483789b --- /dev/null +++ b/frontend/.vite/deps/react-dom-0C0sIl3L.js.map @@ -0,0 +1 @@ +{"version":3,"file":"react-dom-0C0sIl3L.js","names":[],"sources":["../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/cjs/react-dom.development.js","../../node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/index.js"],"sourcesContent":["/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n try {\n testStringCoercion(key);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n JSCompiler_inline_result &&\n (console.error(\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n key[Symbol.toStringTag]) ||\n key.constructor.name ||\n \"Object\"\n ),\n testStringCoercion(key));\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n }\n function getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n }\n function getValueDescriptorExpectingObjectForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function getValueDescriptorExpectingEnumForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : \"string\" === typeof thing\n ? JSON.stringify(thing)\n : \"number\" === typeof thing\n ? \"`\" + thing + \"`\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(\n \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n );\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n );\n exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\n exports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(\"Target container is not a DOM element.\");\n return createPortal$1(children, container, null, key);\n };\n exports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f() &&\n console.error(\n \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n );\n }\n };\n exports.preconnect = function (href, options) {\n \"string\" === typeof href && href\n ? null != options && \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : null != options &&\n \"string\" !== typeof options.crossOrigin &&\n console.error(\n \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n )\n : console.error(\n \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n };\n exports.prefetchDNS = function (href) {\n if (\"string\" !== typeof href || !href)\n console.error(\n \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n else if (1 < arguments.length) {\n var options = arguments[1];\n \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n ? console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n );\n }\n \"string\" === typeof href && Internals.d.D(href);\n };\n exports.preinit = function (href, options) {\n \"string\" === typeof href && href\n ? null == options || \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : \"style\" !== options.as &&\n \"script\" !== options.as &&\n console.error(\n 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n getValueDescriptorExpectingEnumForWarning(options.as)\n )\n : console.error(\n \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n if (\n \"string\" === typeof href &&\n options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence\n ? options.precedence\n : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n };\n exports.preinitModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"script\" !== options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingEnumForWarning(options.as) +\n \".\");\n if (encountered)\n console.error(\n \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n encountered\n );\n else\n switch (\n ((encountered =\n options && \"string\" === typeof options.as ? options.as : \"script\"),\n encountered)\n ) {\n case \"script\":\n break;\n default:\n (encountered =\n getValueDescriptorExpectingEnumForWarning(encountered)),\n console.error(\n 'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n encountered,\n href\n );\n }\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as)\n (encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.M(href, {\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0,\n nonce:\n \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n } else null == options && Internals.d.M(href);\n };\n exports.preload = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n null == options || \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : (\"string\" === typeof options.as && options.as) ||\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `` tag.%s',\n encountered\n );\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n encountered = options.as;\n var crossOrigin = getCrossOriginStringAs(\n encountered,\n options.crossOrigin\n );\n Internals.d.L(href, encountered, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet\n ? options.imageSrcSet\n : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes\n ? options.imageSizes\n : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n };\n exports.preloadModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"string\" !== typeof options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `` tag.%s',\n encountered\n );\n \"string\" === typeof href &&\n (options\n ? ((encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0\n }))\n : Internals.d.m(href));\n };\n exports.requestFormReset = function (form) {\n Internals.d.r(form);\n };\n exports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n };\n exports.useFormState = function (action, initialState, permalink) {\n return resolveDispatcher().useFormState(action, initialState, permalink);\n };\n exports.useFormStatus = function () {\n return resolveDispatcher().useHostTransitionStatus();\n };\n exports.version = \"19.2.6\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"} \ No newline at end of file diff --git a/frontend/.vite/deps/react-dom_client.js b/frontend/.vite/deps/react-dom_client.js new file mode 100644 index 0000000..5964f31 --- /dev/null +++ b/frontend/.vite/deps/react-dom_client.js @@ -0,0 +1,14385 @@ +import { t as __commonJSMin } from "./chunk-CYJPkc-J.js"; +import { t as require_react } from "./react.js"; +import { t as require_react_dom } from "./react-dom-0C0sIl3L.js"; +//#region node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.development.js +/** +* @license React +* scheduler.development.js +* +* Copyright (c) Meta Platforms, Inc. and affiliates. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ +var require_scheduler_development = /* @__PURE__ */ __commonJSMin(((exports) => { + (function() { + function performWorkUntilDeadline() { + needsPaint = !1; + if (isMessageLoopRunning) { + var currentTime = exports.unstable_now(); + startTime = currentTime; + var hasMoreWork = !0; + try { + a: { + isHostCallbackScheduled = !1; + isHostTimeoutScheduled && (isHostTimeoutScheduled = !1, localClearTimeout(taskTimeoutID), taskTimeoutID = -1); + isPerformingWork = !0; + var previousPriorityLevel = currentPriorityLevel; + try { + b: { + advanceTimers(currentTime); + for (currentTask = peek(taskQueue); null !== currentTask && !(currentTask.expirationTime > currentTime && shouldYieldToHost());) { + var callback = currentTask.callback; + if ("function" === typeof callback) { + currentTask.callback = null; + currentPriorityLevel = currentTask.priorityLevel; + var continuationCallback = callback(currentTask.expirationTime <= currentTime); + currentTime = exports.unstable_now(); + if ("function" === typeof continuationCallback) { + currentTask.callback = continuationCallback; + advanceTimers(currentTime); + hasMoreWork = !0; + break b; + } + currentTask === peek(taskQueue) && pop(taskQueue); + advanceTimers(currentTime); + } else pop(taskQueue); + currentTask = peek(taskQueue); + } + if (null !== currentTask) hasMoreWork = !0; + else { + var firstTimer = peek(timerQueue); + null !== firstTimer && requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime); + hasMoreWork = !1; + } + } + break a; + } finally { + currentTask = null, currentPriorityLevel = previousPriorityLevel, isPerformingWork = !1; + } + hasMoreWork = void 0; + } + } finally { + hasMoreWork ? schedulePerformWorkUntilDeadline() : isMessageLoopRunning = !1; + } + } + } + function push(heap, node) { + var index = heap.length; + heap.push(node); + a: for (; 0 < index;) { + var parentIndex = index - 1 >>> 1, parent = heap[parentIndex]; + if (0 < compare(parent, node)) heap[parentIndex] = node, heap[index] = parent, index = parentIndex; + else break a; + } + } + function peek(heap) { + return 0 === heap.length ? null : heap[0]; + } + function pop(heap) { + if (0 === heap.length) return null; + var first = heap[0], last = heap.pop(); + if (last !== first) { + heap[0] = last; + a: for (var index = 0, length = heap.length, halfLength = length >>> 1; index < halfLength;) { + var leftIndex = 2 * (index + 1) - 1, left = heap[leftIndex], rightIndex = leftIndex + 1, right = heap[rightIndex]; + if (0 > compare(left, last)) rightIndex < length && 0 > compare(right, left) ? (heap[index] = right, heap[rightIndex] = last, index = rightIndex) : (heap[index] = left, heap[leftIndex] = last, index = leftIndex); + else if (rightIndex < length && 0 > compare(right, last)) heap[index] = right, heap[rightIndex] = last, index = rightIndex; + else break a; + } + } + return first; + } + function compare(a, b) { + var diff = a.sortIndex - b.sortIndex; + return 0 !== diff ? diff : a.id - b.id; + } + function advanceTimers(currentTime) { + for (var timer = peek(timerQueue); null !== timer;) { + if (null === timer.callback) pop(timerQueue); + else if (timer.startTime <= currentTime) pop(timerQueue), timer.sortIndex = timer.expirationTime, push(taskQueue, timer); + else break; + timer = peek(timerQueue); + } + } + function handleTimeout(currentTime) { + isHostTimeoutScheduled = !1; + advanceTimers(currentTime); + if (!isHostCallbackScheduled) if (null !== peek(taskQueue)) isHostCallbackScheduled = !0, isMessageLoopRunning || (isMessageLoopRunning = !0, schedulePerformWorkUntilDeadline()); + else { + var firstTimer = peek(timerQueue); + null !== firstTimer && requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime); + } + } + function shouldYieldToHost() { + return needsPaint ? !0 : exports.unstable_now() - startTime < frameInterval ? !1 : !0; + } + function requestHostTimeout(callback, ms) { + taskTimeoutID = localSetTimeout(function() { + callback(exports.unstable_now()); + }, ms); + } + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); + exports.unstable_now = void 0; + if ("object" === typeof performance && "function" === typeof performance.now) { + var localPerformance = performance; + exports.unstable_now = function() { + return localPerformance.now(); + }; + } else { + var localDate = Date, initialTime = localDate.now(); + exports.unstable_now = function() { + return localDate.now() - initialTime; + }; + } + var taskQueue = [], timerQueue = [], taskIdCounter = 1, currentTask = null, currentPriorityLevel = 3, isPerformingWork = !1, isHostCallbackScheduled = !1, isHostTimeoutScheduled = !1, needsPaint = !1, localSetTimeout = "function" === typeof setTimeout ? setTimeout : null, localClearTimeout = "function" === typeof clearTimeout ? clearTimeout : null, localSetImmediate = "undefined" !== typeof setImmediate ? setImmediate : null, isMessageLoopRunning = !1, taskTimeoutID = -1, frameInterval = 5, startTime = -1; + if ("function" === typeof localSetImmediate) var schedulePerformWorkUntilDeadline = function() { + localSetImmediate(performWorkUntilDeadline); + }; + else if ("undefined" !== typeof MessageChannel) { + var channel = new MessageChannel(), port = channel.port2; + channel.port1.onmessage = performWorkUntilDeadline; + schedulePerformWorkUntilDeadline = function() { + port.postMessage(null); + }; + } else schedulePerformWorkUntilDeadline = function() { + localSetTimeout(performWorkUntilDeadline, 0); + }; + exports.unstable_IdlePriority = 5; + exports.unstable_ImmediatePriority = 1; + exports.unstable_LowPriority = 4; + exports.unstable_NormalPriority = 3; + exports.unstable_Profiling = null; + exports.unstable_UserBlockingPriority = 2; + exports.unstable_cancelCallback = function(task) { + task.callback = null; + }; + exports.unstable_forceFrameRate = function(fps) { + 0 > fps || 125 < fps ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5; + }; + exports.unstable_getCurrentPriorityLevel = function() { + return currentPriorityLevel; + }; + exports.unstable_next = function(eventHandler) { + switch (currentPriorityLevel) { + case 1: + case 2: + case 3: + var priorityLevel = 3; + break; + default: priorityLevel = currentPriorityLevel; + } + var previousPriorityLevel = currentPriorityLevel; + currentPriorityLevel = priorityLevel; + try { + return eventHandler(); + } finally { + currentPriorityLevel = previousPriorityLevel; + } + }; + exports.unstable_requestPaint = function() { + needsPaint = !0; + }; + exports.unstable_runWithPriority = function(priorityLevel, eventHandler) { + switch (priorityLevel) { + case 1: + case 2: + case 3: + case 4: + case 5: break; + default: priorityLevel = 3; + } + var previousPriorityLevel = currentPriorityLevel; + currentPriorityLevel = priorityLevel; + try { + return eventHandler(); + } finally { + currentPriorityLevel = previousPriorityLevel; + } + }; + exports.unstable_scheduleCallback = function(priorityLevel, callback, options) { + var currentTime = exports.unstable_now(); + "object" === typeof options && null !== options ? (options = options.delay, options = "number" === typeof options && 0 < options ? currentTime + options : currentTime) : options = currentTime; + switch (priorityLevel) { + case 1: + var timeout = -1; + break; + case 2: + timeout = 250; + break; + case 5: + timeout = 1073741823; + break; + case 4: + timeout = 1e4; + break; + default: timeout = 5e3; + } + timeout = options + timeout; + priorityLevel = { + id: taskIdCounter++, + callback, + priorityLevel, + startTime: options, + expirationTime: timeout, + sortIndex: -1 + }; + options > currentTime ? (priorityLevel.sortIndex = options, push(timerQueue, priorityLevel), null === peek(taskQueue) && priorityLevel === peek(timerQueue) && (isHostTimeoutScheduled ? (localClearTimeout(taskTimeoutID), taskTimeoutID = -1) : isHostTimeoutScheduled = !0, requestHostTimeout(handleTimeout, options - currentTime))) : (priorityLevel.sortIndex = timeout, push(taskQueue, priorityLevel), isHostCallbackScheduled || isPerformingWork || (isHostCallbackScheduled = !0, isMessageLoopRunning || (isMessageLoopRunning = !0, schedulePerformWorkUntilDeadline()))); + return priorityLevel; + }; + exports.unstable_shouldYield = shouldYieldToHost; + exports.unstable_wrapCallback = function(callback) { + var parentPriorityLevel = currentPriorityLevel; + return function() { + var previousPriorityLevel = currentPriorityLevel; + currentPriorityLevel = parentPriorityLevel; + try { + return callback.apply(this, arguments); + } finally { + currentPriorityLevel = previousPriorityLevel; + } + }; + }; + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); + })(); +})); +//#endregion +//#region node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.js +var require_scheduler = /* @__PURE__ */ __commonJSMin(((exports, module) => { + module.exports = require_scheduler_development(); +})); +//#endregion +//#region node_modules/.pnpm/react-dom@19.2.6_react@19.2.6/node_modules/react-dom/cjs/react-dom-client.development.js +/** +* @license React +* react-dom-client.development.js +* +* Copyright (c) Meta Platforms, Inc. and affiliates. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ +var require_react_dom_client_development = /* @__PURE__ */ __commonJSMin(((exports) => { + (function() { + function findHook(fiber, id) { + for (fiber = fiber.memoizedState; null !== fiber && 0 < id;) fiber = fiber.next, id--; + return fiber; + } + function copyWithSetImpl(obj, path, index, value) { + if (index >= path.length) return value; + var key = path[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); + updated[key] = copyWithSetImpl(obj[key], path, index + 1, value); + return updated; + } + function copyWithRename(obj, oldPath, newPath) { + if (oldPath.length !== newPath.length) console.warn("copyWithRename() expects paths of the same length"); + else { + for (var i = 0; i < newPath.length - 1; i++) if (oldPath[i] !== newPath[i]) { + console.warn("copyWithRename() expects paths to be the same except for the deepest key"); + return; + } + return copyWithRenameImpl(obj, oldPath, newPath, 0); + } + } + function copyWithRenameImpl(obj, oldPath, newPath, index) { + var oldKey = oldPath[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); + index + 1 === oldPath.length ? (updated[newPath[index]] = updated[oldKey], isArrayImpl(updated) ? updated.splice(oldKey, 1) : delete updated[oldKey]) : updated[oldKey] = copyWithRenameImpl(obj[oldKey], oldPath, newPath, index + 1); + return updated; + } + function copyWithDeleteImpl(obj, path, index) { + var key = path[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); + if (index + 1 === path.length) return isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key], updated; + updated[key] = copyWithDeleteImpl(obj[key], path, index + 1); + return updated; + } + function shouldSuspendImpl() { + return !1; + } + function shouldErrorImpl() { + return null; + } + function warnInvalidHookAccess() { + console.error("Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"); + } + function warnInvalidContextAccess() { + console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."); + } + function noop() {} + function warnForMissingKey() {} + function setToSortedString(set) { + var array = []; + set.forEach(function(value) { + array.push(value); + }); + return array.sort().join(", "); + } + function createFiber(tag, pendingProps, key, mode) { + return new FiberNode(tag, pendingProps, key, mode); + } + function scheduleRoot(root, element) { + root.context === emptyContextObject && (updateContainerImpl(root.current, 2, element, root, null, null), flushSyncWork$1()); + } + function scheduleRefresh(root, update) { + if (null !== resolveFamily) { + var staleFamilies = update.staleFamilies; + update = update.updatedFamilies; + flushPendingEffects(); + scheduleFibersWithFamiliesRecursively(root.current, update, staleFamilies); + flushSyncWork$1(); + } + } + function setRefreshHandler(handler) { + resolveFamily = handler; + } + function isValidContainer(node) { + return !(!node || 1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType); + } + function getNearestMountedFiber(fiber) { + var node = fiber, nearestMounted = fiber; + if (fiber.alternate) for (; node.return;) node = node.return; + else { + fiber = node; + do + node = fiber, 0 !== (node.flags & 4098) && (nearestMounted = node.return), fiber = node.return; + while (fiber); + } + return 3 === node.tag ? nearestMounted : null; + } + function getSuspenseInstanceFromFiber(fiber) { + if (13 === fiber.tag) { + var suspenseState = fiber.memoizedState; + null === suspenseState && (fiber = fiber.alternate, null !== fiber && (suspenseState = fiber.memoizedState)); + if (null !== suspenseState) return suspenseState.dehydrated; + } + return null; + } + function getActivityInstanceFromFiber(fiber) { + if (31 === fiber.tag) { + var activityState = fiber.memoizedState; + null === activityState && (fiber = fiber.alternate, null !== fiber && (activityState = fiber.memoizedState)); + if (null !== activityState) return activityState.dehydrated; + } + return null; + } + function assertIsMounted(fiber) { + if (getNearestMountedFiber(fiber) !== fiber) throw Error("Unable to find node on an unmounted component."); + } + function findCurrentFiberUsingSlowPath(fiber) { + var alternate = fiber.alternate; + if (!alternate) { + alternate = getNearestMountedFiber(fiber); + if (null === alternate) throw Error("Unable to find node on an unmounted component."); + return alternate !== fiber ? null : fiber; + } + for (var a = fiber, b = alternate;;) { + var parentA = a.return; + if (null === parentA) break; + var parentB = parentA.alternate; + if (null === parentB) { + b = parentA.return; + if (null !== b) { + a = b; + continue; + } + break; + } + if (parentA.child === parentB.child) { + for (parentB = parentA.child; parentB;) { + if (parentB === a) return assertIsMounted(parentA), fiber; + if (parentB === b) return assertIsMounted(parentA), alternate; + parentB = parentB.sibling; + } + throw Error("Unable to find node on an unmounted component."); + } + if (a.return !== b.return) a = parentA, b = parentB; + else { + for (var didFindChild = !1, _child = parentA.child; _child;) { + if (_child === a) { + didFindChild = !0; + a = parentA; + b = parentB; + break; + } + if (_child === b) { + didFindChild = !0; + b = parentA; + a = parentB; + break; + } + _child = _child.sibling; + } + if (!didFindChild) { + for (_child = parentB.child; _child;) { + if (_child === a) { + didFindChild = !0; + a = parentB; + b = parentA; + break; + } + if (_child === b) { + didFindChild = !0; + b = parentB; + a = parentA; + break; + } + _child = _child.sibling; + } + if (!didFindChild) throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue."); + } + } + if (a.alternate !== b) throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."); + } + if (3 !== a.tag) throw Error("Unable to find node on an unmounted component."); + return a.stateNode.current === a ? fiber : alternate; + } + function findCurrentHostFiberImpl(node) { + var tag = node.tag; + if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node; + for (node = node.child; null !== node;) { + tag = findCurrentHostFiberImpl(node); + if (null !== tag) return tag; + node = node.sibling; + } + return null; + } + function getIteratorFn(maybeIterable) { + if (null === maybeIterable || "object" !== typeof maybeIterable) return null; + maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"]; + return "function" === typeof maybeIterable ? maybeIterable : null; + } + function getComponentNameFromType(type) { + if (null == type) return null; + if ("function" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; + if ("string" === typeof type) return type; + switch (type) { + case REACT_FRAGMENT_TYPE: return "Fragment"; + case REACT_PROFILER_TYPE: return "Profiler"; + case REACT_STRICT_MODE_TYPE: return "StrictMode"; + case REACT_SUSPENSE_TYPE: return "Suspense"; + case REACT_SUSPENSE_LIST_TYPE: return "SuspenseList"; + case REACT_ACTIVITY_TYPE: return "Activity"; + } + if ("object" === typeof type) switch ("number" === typeof type.tag && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) { + case REACT_PORTAL_TYPE: return "Portal"; + case REACT_CONTEXT_TYPE: return type.displayName || "Context"; + case REACT_CONSUMER_TYPE: return (type._context.displayName || "Context") + ".Consumer"; + case REACT_FORWARD_REF_TYPE: + var innerType = type.render; + type = type.displayName; + type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); + return type; + case REACT_MEMO_TYPE: return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; + case REACT_LAZY_TYPE: + innerType = type._payload; + type = type._init; + try { + return getComponentNameFromType(type(innerType)); + } catch (x) {} + } + return null; + } + function getComponentNameFromOwner(owner) { + return "number" === typeof owner.tag ? getComponentNameFromFiber(owner) : "string" === typeof owner.name ? owner.name : null; + } + function getComponentNameFromFiber(fiber) { + var type = fiber.type; + switch (fiber.tag) { + case 31: return "Activity"; + case 24: return "Cache"; + case 9: return (type._context.displayName || "Context") + ".Consumer"; + case 10: return type.displayName || "Context"; + case 18: return "DehydratedFragment"; + case 11: return fiber = type.render, fiber = fiber.displayName || fiber.name || "", type.displayName || ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef"); + case 7: return "Fragment"; + case 26: + case 27: + case 5: return type; + case 4: return "Portal"; + case 3: return "Root"; + case 6: return "Text"; + case 16: return getComponentNameFromType(type); + case 8: return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode"; + case 22: return "Offscreen"; + case 12: return "Profiler"; + case 21: return "Scope"; + case 13: return "Suspense"; + case 19: return "SuspenseList"; + case 25: return "TracingMarker"; + case 1: + case 0: + case 14: + case 15: + if ("function" === typeof type) return type.displayName || type.name || null; + if ("string" === typeof type) return type; + break; + case 29: + type = fiber._debugInfo; + if (null != type) { + for (var i = type.length - 1; 0 <= i; i--) if ("string" === typeof type[i].name) return type[i].name; + } + if (null !== fiber.return) return getComponentNameFromFiber(fiber.return); + } + return null; + } + function createCursor(defaultValue) { + return { current: defaultValue }; + } + function pop(cursor, fiber) { + 0 > index$jscomp$0 ? console.error("Unexpected pop.") : (fiber !== fiberStack[index$jscomp$0] && console.error("Unexpected Fiber popped."), cursor.current = valueStack[index$jscomp$0], valueStack[index$jscomp$0] = null, fiberStack[index$jscomp$0] = null, index$jscomp$0--); + } + function push(cursor, value, fiber) { + index$jscomp$0++; + valueStack[index$jscomp$0] = cursor.current; + fiberStack[index$jscomp$0] = fiber; + cursor.current = value; + } + function requiredContext(c) { + null === c && console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."); + return c; + } + function pushHostContainer(fiber, nextRootInstance) { + push(rootInstanceStackCursor, nextRootInstance, fiber); + push(contextFiberStackCursor, fiber, fiber); + push(contextStackCursor, null, fiber); + var nextRootContext = nextRootInstance.nodeType; + switch (nextRootContext) { + case 9: + case 11: + nextRootContext = 9 === nextRootContext ? "#document" : "#fragment"; + nextRootInstance = (nextRootInstance = nextRootInstance.documentElement) ? (nextRootInstance = nextRootInstance.namespaceURI) ? getOwnHostContext(nextRootInstance) : HostContextNamespaceNone : HostContextNamespaceNone; + break; + default: if (nextRootContext = nextRootInstance.tagName, nextRootInstance = nextRootInstance.namespaceURI) nextRootInstance = getOwnHostContext(nextRootInstance), nextRootInstance = getChildHostContextProd(nextRootInstance, nextRootContext); + else switch (nextRootContext) { + case "svg": + nextRootInstance = HostContextNamespaceSvg; + break; + case "math": + nextRootInstance = HostContextNamespaceMath; + break; + default: nextRootInstance = HostContextNamespaceNone; + } + } + nextRootContext = nextRootContext.toLowerCase(); + nextRootContext = updatedAncestorInfoDev(null, nextRootContext); + nextRootContext = { + context: nextRootInstance, + ancestorInfo: nextRootContext + }; + pop(contextStackCursor, fiber); + push(contextStackCursor, nextRootContext, fiber); + } + function popHostContainer(fiber) { + pop(contextStackCursor, fiber); + pop(contextFiberStackCursor, fiber); + pop(rootInstanceStackCursor, fiber); + } + function getHostContext() { + return requiredContext(contextStackCursor.current); + } + function pushHostContext(fiber) { + null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber, fiber); + var context = requiredContext(contextStackCursor.current); + var type = fiber.type; + var nextContext = getChildHostContextProd(context.context, type); + type = updatedAncestorInfoDev(context.ancestorInfo, type); + nextContext = { + context: nextContext, + ancestorInfo: type + }; + context !== nextContext && (push(contextFiberStackCursor, fiber, fiber), push(contextStackCursor, nextContext, fiber)); + } + function popHostContext(fiber) { + contextFiberStackCursor.current === fiber && (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber)); + hostTransitionProviderCursor.current === fiber && (pop(hostTransitionProviderCursor, fiber), HostTransitionContext._currentValue = NotPendingTransition); + } + function disabledLog() {} + function disableLogs() { + if (0 === disabledDepth) { + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; + var props = { + configurable: !0, + enumerable: !0, + value: disabledLog, + writable: !0 + }; + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + } + disabledDepth++; + } + function reenableLogs() { + disabledDepth--; + if (0 === disabledDepth) { + var props = { + configurable: !0, + enumerable: !0, + writable: !0 + }; + Object.defineProperties(console, { + log: assign({}, props, { value: prevLog }), + info: assign({}, props, { value: prevInfo }), + warn: assign({}, props, { value: prevWarn }), + error: assign({}, props, { value: prevError }), + group: assign({}, props, { value: prevGroup }), + groupCollapsed: assign({}, props, { value: prevGroupCollapsed }), + groupEnd: assign({}, props, { value: prevGroupEnd }) + }); + } + 0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue."); + } + function formatOwnerStack(error) { + var prevPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + error = error.stack; + Error.prepareStackTrace = prevPrepareStackTrace; + error.startsWith("Error: react-stack-top-frame\n") && (error = error.slice(29)); + prevPrepareStackTrace = error.indexOf("\n"); + -1 !== prevPrepareStackTrace && (error = error.slice(prevPrepareStackTrace + 1)); + prevPrepareStackTrace = error.indexOf("react_stack_bottom_frame"); + -1 !== prevPrepareStackTrace && (prevPrepareStackTrace = error.lastIndexOf("\n", prevPrepareStackTrace)); + if (-1 !== prevPrepareStackTrace) error = error.slice(0, prevPrepareStackTrace); + else return ""; + return error; + } + function describeBuiltInComponentFrame(name) { + if (void 0 === prefix) try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ""; + suffix = -1 < x.stack.indexOf("\n at") ? " ()" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : ""; + } + return "\n" + prefix + name + suffix; + } + function describeNativeComponentFrame(fn, construct) { + if (!fn || reentry) return ""; + var frame = componentFrameCache.get(fn); + if (void 0 !== frame) return frame; + reentry = !0; + frame = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + var previousDispatcher = null; + previousDispatcher = ReactSharedInternals.H; + ReactSharedInternals.H = null; + disableLogs(); + try { + var RunInRootFrame = { DetermineComponentFrameRoot: function() { + try { + if (construct) { + var Fake = function() { + throw Error(); + }; + Object.defineProperty(Fake.prototype, "props", { set: function() { + throw Error(); + } }); + if ("object" === typeof Reflect && Reflect.construct) { + try { + Reflect.construct(Fake, []); + } catch (x) { + var control = x; + } + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x$0) { + control = x$0; + } + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x$1) { + control = x$1; + } + (Fake = fn()) && "function" === typeof Fake.catch && Fake.catch(function() {}); + } + } catch (sample) { + if (sample && control && "string" === typeof sample.stack) return [sample.stack, control.stack]; + } + return [null, null]; + } }; + RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; + var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name"); + namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" }); + var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1]; + if (sampleStack && controlStack) { + var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n"); + for (_RunInRootFrame$Deter = namePropDescriptor = 0; namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot");) namePropDescriptor++; + for (; _RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot");) _RunInRootFrame$Deter++; + if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length) for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter];) _RunInRootFrame$Deter--; + for (; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--) if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) { + if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) do + if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) { + var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at "); + fn.displayName && _frame.includes("") && (_frame = _frame.replace("", fn.displayName)); + "function" === typeof fn && componentFrameCache.set(fn, _frame); + return _frame; + } + while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter); + break; + } + } + } finally { + reentry = !1, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame; + } + sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : ""; + "function" === typeof fn && componentFrameCache.set(fn, sampleLines); + return sampleLines; + } + function describeFiber(fiber, childFiber) { + switch (fiber.tag) { + case 26: + case 27: + case 5: return describeBuiltInComponentFrame(fiber.type); + case 16: return describeBuiltInComponentFrame("Lazy"); + case 13: return fiber.child !== childFiber && null !== childFiber ? describeBuiltInComponentFrame("Suspense Fallback") : describeBuiltInComponentFrame("Suspense"); + case 19: return describeBuiltInComponentFrame("SuspenseList"); + case 0: + case 15: return describeNativeComponentFrame(fiber.type, !1); + case 11: return describeNativeComponentFrame(fiber.type.render, !1); + case 1: return describeNativeComponentFrame(fiber.type, !0); + case 31: return describeBuiltInComponentFrame("Activity"); + default: return ""; + } + } + function getStackByFiberInDevAndProd(workInProgress) { + try { + var info = "", previous = null; + do { + info += describeFiber(workInProgress, previous); + var debugInfo = workInProgress._debugInfo; + if (debugInfo) for (var i = debugInfo.length - 1; 0 <= i; i--) { + var entry = debugInfo[i]; + if ("string" === typeof entry.name) { + var JSCompiler_temp_const = info; + a: { + var name = entry.name, env = entry.env, location = entry.debugLocation; + if (null != location) { + var childStack = formatOwnerStack(location), idx = childStack.lastIndexOf("\n"), lastLine = -1 === idx ? childStack : childStack.slice(idx + 1); + if (-1 !== lastLine.indexOf(name)) { + var JSCompiler_inline_result = "\n" + lastLine; + break a; + } + } + JSCompiler_inline_result = describeBuiltInComponentFrame(name + (env ? " [" + env + "]" : "")); + } + info = JSCompiler_temp_const + JSCompiler_inline_result; + } + } + previous = workInProgress; + workInProgress = workInProgress.return; + } while (workInProgress); + return info; + } catch (x) { + return "\nError generating stack: " + x.message + "\n" + x.stack; + } + } + function describeFunctionComponentFrameWithoutLineNumber(fn) { + return (fn = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(fn) : ""; + } + function getCurrentFiberOwnerNameInDevOrNull() { + if (null === current) return null; + var owner = current._debugOwner; + return null != owner ? getComponentNameFromOwner(owner) : null; + } + function getCurrentFiberStackInDev() { + if (null === current) return ""; + var workInProgress = current; + try { + var info = ""; + 6 === workInProgress.tag && (workInProgress = workInProgress.return); + switch (workInProgress.tag) { + case 26: + case 27: + case 5: + info += describeBuiltInComponentFrame(workInProgress.type); + break; + case 13: + info += describeBuiltInComponentFrame("Suspense"); + break; + case 19: + info += describeBuiltInComponentFrame("SuspenseList"); + break; + case 31: + info += describeBuiltInComponentFrame("Activity"); + break; + case 30: + case 0: + case 15: + case 1: + workInProgress._debugOwner || "" !== info || (info += describeFunctionComponentFrameWithoutLineNumber(workInProgress.type)); + break; + case 11: workInProgress._debugOwner || "" !== info || (info += describeFunctionComponentFrameWithoutLineNumber(workInProgress.type.render)); + } + for (; workInProgress;) if ("number" === typeof workInProgress.tag) { + var fiber = workInProgress; + workInProgress = fiber._debugOwner; + var debugStack = fiber._debugStack; + if (workInProgress && debugStack) { + var formattedStack = formatOwnerStack(debugStack); + "" !== formattedStack && (info += "\n" + formattedStack); + } + } else if (null != workInProgress.debugStack) { + var ownerStack = workInProgress.debugStack; + (workInProgress = workInProgress.owner) && ownerStack && (info += "\n" + formatOwnerStack(ownerStack)); + } else break; + var JSCompiler_inline_result = info; + } catch (x) { + JSCompiler_inline_result = "\nError generating stack: " + x.message + "\n" + x.stack; + } + return JSCompiler_inline_result; + } + function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) { + var previousFiber = current; + setCurrentFiber(fiber); + try { + return null !== fiber && fiber._debugTask ? fiber._debugTask.run(callback.bind(null, arg0, arg1, arg2, arg3, arg4)) : callback(arg0, arg1, arg2, arg3, arg4); + } finally { + setCurrentFiber(previousFiber); + } + throw Error("runWithFiberInDEV should never be called in production. This is a bug in React."); + } + function setCurrentFiber(fiber) { + ReactSharedInternals.getCurrentStack = null === fiber ? null : getCurrentFiberStackInDev; + isRendering = !1; + current = fiber; + } + function typeName(value) { + return "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; + } + function willCoercionThrow(value) { + try { + return testStringCoercion(value), !1; + } catch (e) { + return !0; + } + } + function testStringCoercion(value) { + return "" + value; + } + function checkAttributeStringCoercion(value, attributeName) { + if (willCoercionThrow(value)) return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.", attributeName, typeName(value)), testStringCoercion(value); + } + function checkCSSPropertyStringCoercion(value, propName) { + if (willCoercionThrow(value)) return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.", propName, typeName(value)), testStringCoercion(value); + } + function checkFormFieldValueStringCoercion(value) { + if (willCoercionThrow(value)) return console.error("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.", typeName(value)), testStringCoercion(value); + } + function injectInternals(internals) { + if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1; + var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; + if (hook.isDisabled) return !0; + if (!hook.supportsFiber) return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"), !0; + try { + rendererID = hook.inject(internals), injectedHook = hook; + } catch (err) { + console.error("React instrumentation encountered an error: %o.", err); + } + return hook.checkDCE ? !0 : !1; + } + function setIsStrictModeForDevtools(newIsStrictMode) { + "function" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode); + if (injectedHook && "function" === typeof injectedHook.setStrictMode) try { + injectedHook.setStrictMode(rendererID, newIsStrictMode); + } catch (err) { + hasLoggedError || (hasLoggedError = !0, console.error("React instrumentation encountered an error: %o", err)); + } + } + function clz32Fallback(x) { + x >>>= 0; + return 0 === x ? 32 : 31 - (log(x) / LN2 | 0) | 0; + } + function getHighestPriorityLanes(lanes) { + var pendingSyncLanes = lanes & 42; + if (0 !== pendingSyncLanes) return pendingSyncLanes; + switch (lanes & -lanes) { + case 1: return 1; + case 2: return 2; + case 4: return 4; + case 8: return 8; + case 16: return 16; + case 32: return 32; + case 64: return 64; + case 128: return 128; + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: return lanes & 261888; + case 262144: + case 524288: + case 1048576: + case 2097152: return lanes & 3932160; + case 4194304: + case 8388608: + case 16777216: + case 33554432: return lanes & 62914560; + case 67108864: return 67108864; + case 134217728: return 134217728; + case 268435456: return 268435456; + case 536870912: return 536870912; + case 1073741824: return 0; + default: return console.error("Should have found matching lanes. This is a bug in React."), lanes; + } + } + function getNextLanes(root, wipLanes, rootHasPendingCommit) { + var pendingLanes = root.pendingLanes; + if (0 === pendingLanes) return 0; + var nextLanes = 0, suspendedLanes = root.suspendedLanes, pingedLanes = root.pingedLanes; + root = root.warmLanes; + var nonIdlePendingLanes = pendingLanes & 134217727; + 0 !== nonIdlePendingLanes ? (pendingLanes = nonIdlePendingLanes & ~suspendedLanes, 0 !== pendingLanes ? nextLanes = getHighestPriorityLanes(pendingLanes) : (pingedLanes &= nonIdlePendingLanes, 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : rootHasPendingCommit || (rootHasPendingCommit = nonIdlePendingLanes & ~root, 0 !== rootHasPendingCommit && (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))))) : (nonIdlePendingLanes = pendingLanes & ~suspendedLanes, 0 !== nonIdlePendingLanes ? nextLanes = getHighestPriorityLanes(nonIdlePendingLanes) : 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : rootHasPendingCommit || (rootHasPendingCommit = pendingLanes & ~root, 0 !== rootHasPendingCommit && (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))); + return 0 === nextLanes ? 0 : 0 !== wipLanes && wipLanes !== nextLanes && 0 === (wipLanes & suspendedLanes) && (suspendedLanes = nextLanes & -nextLanes, rootHasPendingCommit = wipLanes & -wipLanes, suspendedLanes >= rootHasPendingCommit || 32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)) ? wipLanes : nextLanes; + } + function checkIfRootIsPrerendering(root, renderLanes) { + return 0 === (root.pendingLanes & ~(root.suspendedLanes & ~root.pingedLanes) & renderLanes); + } + function computeExpirationTime(lane, currentTime) { + switch (lane) { + case 1: + case 2: + case 4: + case 8: + case 64: return currentTime + 250; + case 16: + case 32: + case 128: + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: return currentTime + 5e3; + case 4194304: + case 8388608: + case 16777216: + case 33554432: return -1; + case 67108864: + case 134217728: + case 268435456: + case 536870912: + case 1073741824: return -1; + default: return console.error("Should have found matching lanes. This is a bug in React."), -1; + } + } + function claimNextRetryLane() { + var lane = nextRetryLane; + nextRetryLane <<= 1; + 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304); + return lane; + } + function createLaneMap(initial) { + for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial); + return laneMap; + } + function markRootUpdated$1(root, updateLane) { + root.pendingLanes |= updateLane; + 268435456 !== updateLane && (root.suspendedLanes = 0, root.pingedLanes = 0, root.warmLanes = 0); + } + function markRootFinished(root, finishedLanes, remainingLanes, spawnedLane, updatedLanes, suspendedRetryLanes) { + var previouslyPendingLanes = root.pendingLanes; + root.pendingLanes = remainingLanes; + root.suspendedLanes = 0; + root.pingedLanes = 0; + root.warmLanes = 0; + root.expiredLanes &= remainingLanes; + root.entangledLanes &= remainingLanes; + root.errorRecoveryDisabledLanes &= remainingLanes; + root.shellSuspendCounter = 0; + var entanglements = root.entanglements, expirationTimes = root.expirationTimes, hiddenUpdates = root.hiddenUpdates; + for (remainingLanes = previouslyPendingLanes & ~remainingLanes; 0 < remainingLanes;) { + var index = 31 - clz32(remainingLanes), lane = 1 << index; + entanglements[index] = 0; + expirationTimes[index] = -1; + var hiddenUpdatesForLane = hiddenUpdates[index]; + if (null !== hiddenUpdatesForLane) for (hiddenUpdates[index] = null, index = 0; index < hiddenUpdatesForLane.length; index++) { + var update = hiddenUpdatesForLane[index]; + null !== update && (update.lane &= -536870913); + } + remainingLanes &= ~lane; + } + 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0); + 0 !== suspendedRetryLanes && 0 === updatedLanes && 0 !== root.tag && (root.suspendedLanes |= suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes)); + } + function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) { + root.pendingLanes |= spawnedLane; + root.suspendedLanes &= ~spawnedLane; + var spawnedLaneIndex = 31 - clz32(spawnedLane); + root.entangledLanes |= spawnedLane; + root.entanglements[spawnedLaneIndex] = root.entanglements[spawnedLaneIndex] | 1073741824 | entangledLanes & 261930; + } + function markRootEntangled(root, entangledLanes) { + var rootEntangledLanes = root.entangledLanes |= entangledLanes; + for (root = root.entanglements; rootEntangledLanes;) { + var index = 31 - clz32(rootEntangledLanes), lane = 1 << index; + lane & entangledLanes | root[index] & entangledLanes && (root[index] |= entangledLanes); + rootEntangledLanes &= ~lane; + } + } + function getBumpedLaneForHydration(root, renderLanes) { + var renderLane = renderLanes & -renderLanes; + renderLane = 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane); + return 0 !== (renderLane & (root.suspendedLanes | renderLanes)) ? 0 : renderLane; + } + function getBumpedLaneForHydrationByLane(lane) { + switch (lane) { + case 2: + lane = 1; + break; + case 8: + lane = 4; + break; + case 32: + lane = 16; + break; + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: + case 4194304: + case 8388608: + case 16777216: + case 33554432: + lane = 128; + break; + case 268435456: + lane = 134217728; + break; + default: lane = 0; + } + return lane; + } + function addFiberToLanesMap(root, fiber, lanes) { + if (isDevToolsPresent) for (root = root.pendingUpdatersLaneMap; 0 < lanes;) { + var index = 31 - clz32(lanes), lane = 1 << index; + root[index].add(fiber); + lanes &= ~lane; + } + } + function movePendingFibersToMemoized(root, lanes) { + if (isDevToolsPresent) for (var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap, memoizedUpdaters = root.memoizedUpdaters; 0 < lanes;) { + var index = 31 - clz32(lanes); + root = 1 << index; + index = pendingUpdatersLaneMap[index]; + 0 < index.size && (index.forEach(function(fiber) { + var alternate = fiber.alternate; + null !== alternate && memoizedUpdaters.has(alternate) || memoizedUpdaters.add(fiber); + }), index.clear()); + lanes &= ~root; + } + } + function lanesToEventPriority(lanes) { + lanes &= -lanes; + return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes ? 0 !== (lanes & 134217727) ? DefaultEventPriority : IdleEventPriority : ContinuousEventPriority : DiscreteEventPriority; + } + function resolveUpdatePriority() { + var updatePriority = ReactDOMSharedInternals.p; + if (0 !== updatePriority) return updatePriority; + updatePriority = window.event; + return void 0 === updatePriority ? DefaultEventPriority : getEventPriority(updatePriority.type); + } + function runWithPriority(priority, fn) { + var previousPriority = ReactDOMSharedInternals.p; + try { + return ReactDOMSharedInternals.p = priority, fn(); + } finally { + ReactDOMSharedInternals.p = previousPriority; + } + } + function detachDeletedInstance(node) { + delete node[internalInstanceKey]; + delete node[internalPropsKey]; + delete node[internalEventHandlersKey]; + delete node[internalEventHandlerListenersKey]; + delete node[internalEventHandlesSetKey]; + } + function getClosestInstanceFromNode(targetNode) { + var targetInst = targetNode[internalInstanceKey]; + if (targetInst) return targetInst; + for (var parentNode = targetNode.parentNode; parentNode;) { + if (targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey]) { + parentNode = targetInst.alternate; + if (null !== targetInst.child || null !== parentNode && null !== parentNode.child) for (targetNode = getParentHydrationBoundary(targetNode); null !== targetNode;) { + if (parentNode = targetNode[internalInstanceKey]) return parentNode; + targetNode = getParentHydrationBoundary(targetNode); + } + return targetInst; + } + targetNode = parentNode; + parentNode = targetNode.parentNode; + } + return null; + } + function getInstanceFromNode(node) { + if (node = node[internalInstanceKey] || node[internalContainerInstanceKey]) { + var tag = node.tag; + if (5 === tag || 6 === tag || 13 === tag || 31 === tag || 26 === tag || 27 === tag || 3 === tag) return node; + } + return null; + } + function getNodeFromInstance(inst) { + var tag = inst.tag; + if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode; + throw Error("getNodeFromInstance: Invalid argument."); + } + function getResourcesFromRoot(root) { + var resources = root[internalRootNodeResourcesKey]; + resources || (resources = root[internalRootNodeResourcesKey] = { + hoistableStyles: /* @__PURE__ */ new Map(), + hoistableScripts: /* @__PURE__ */ new Map() + }); + return resources; + } + function markNodeAsHoistable(node) { + node[internalHoistableMarker] = !0; + } + function registerTwoPhaseEvent(registrationName, dependencies) { + registerDirectEvent(registrationName, dependencies); + registerDirectEvent(registrationName + "Capture", dependencies); + } + function registerDirectEvent(registrationName, dependencies) { + registrationNameDependencies[registrationName] && console.error("EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.", registrationName); + registrationNameDependencies[registrationName] = dependencies; + var lowerCasedName = registrationName.toLowerCase(); + possibleRegistrationNames[lowerCasedName] = registrationName; + "onDoubleClick" === registrationName && (possibleRegistrationNames.ondblclick = registrationName); + for (registrationName = 0; registrationName < dependencies.length; registrationName++) allNativeEvents.add(dependencies[registrationName]); + } + function checkControlledValueProps(tagName, props) { + hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || null == props.value || ("select" === tagName ? console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.") : console.error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")); + props.onChange || props.readOnly || props.disabled || null == props.checked || console.error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`."); + } + function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) return !0; + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1; + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) return validatedAttributeNameCache[attributeName] = !0; + illegalAttributeNameCache[attributeName] = !0; + console.error("Invalid attribute name: `%s`", attributeName); + return !1; + } + function getValueForAttributeOnCustomComponent(node, name, expected) { + if (isAttributeNameSafe(name)) { + if (!node.hasAttribute(name)) { + switch (typeof expected) { + case "symbol": + case "object": return expected; + case "function": return expected; + case "boolean": if (!1 === expected) return expected; + } + return void 0 === expected ? void 0 : null; + } + node = node.getAttribute(name); + if ("" === node && !0 === expected) return !0; + checkAttributeStringCoercion(expected, name); + return node === "" + expected ? expected : node; + } + } + function setValueForAttribute(node, name, value) { + if (isAttributeNameSafe(name)) if (null === value) node.removeAttribute(name); + else { + switch (typeof value) { + case "undefined": + case "function": + case "symbol": + node.removeAttribute(name); + return; + case "boolean": + var prefix = name.toLowerCase().slice(0, 5); + if ("data-" !== prefix && "aria-" !== prefix) { + node.removeAttribute(name); + return; + } + } + checkAttributeStringCoercion(value, name); + node.setAttribute(name, "" + value); + } + } + function setValueForKnownAttribute(node, name, value) { + if (null === value) node.removeAttribute(name); + else { + switch (typeof value) { + case "undefined": + case "function": + case "symbol": + case "boolean": + node.removeAttribute(name); + return; + } + checkAttributeStringCoercion(value, name); + node.setAttribute(name, "" + value); + } + } + function setValueForNamespacedAttribute(node, namespace, name, value) { + if (null === value) node.removeAttribute(name); + else { + switch (typeof value) { + case "undefined": + case "function": + case "symbol": + case "boolean": + node.removeAttribute(name); + return; + } + checkAttributeStringCoercion(value, name); + node.setAttributeNS(namespace, name, "" + value); + } + } + function getToStringValue(value) { + switch (typeof value) { + case "bigint": + case "boolean": + case "number": + case "string": + case "undefined": return value; + case "object": return checkFormFieldValueStringCoercion(value), value; + default: return ""; + } + } + function isCheckable(elem) { + var type = elem.type; + return (elem = elem.nodeName) && "input" === elem.toLowerCase() && ("checkbox" === type || "radio" === type); + } + function trackValueOnNode(node, valueField, currentValue) { + var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); + if (!node.hasOwnProperty(valueField) && "undefined" !== typeof descriptor && "function" === typeof descriptor.get && "function" === typeof descriptor.set) { + var get = descriptor.get, set = descriptor.set; + Object.defineProperty(node, valueField, { + configurable: !0, + get: function() { + return get.call(this); + }, + set: function(value) { + checkFormFieldValueStringCoercion(value); + currentValue = "" + value; + set.call(this, value); + } + }); + Object.defineProperty(node, valueField, { enumerable: descriptor.enumerable }); + return { + getValue: function() { + return currentValue; + }, + setValue: function(value) { + checkFormFieldValueStringCoercion(value); + currentValue = "" + value; + }, + stopTracking: function() { + node._valueTracker = null; + delete node[valueField]; + } + }; + } + } + function track(node) { + if (!node._valueTracker) { + var valueField = isCheckable(node) ? "checked" : "value"; + node._valueTracker = trackValueOnNode(node, valueField, "" + node[valueField]); + } + } + function updateValueIfChanged(node) { + if (!node) return !1; + var tracker = node._valueTracker; + if (!tracker) return !0; + var lastValue = tracker.getValue(); + var value = ""; + node && (value = isCheckable(node) ? node.checked ? "true" : "false" : node.value); + node = value; + return node !== lastValue ? (tracker.setValue(node), !0) : !1; + } + function getActiveElement(doc) { + doc = doc || ("undefined" !== typeof document ? document : void 0); + if ("undefined" === typeof doc) return null; + try { + return doc.activeElement || doc.body; + } catch (e) { + return doc.body; + } + } + function escapeSelectorAttributeValueInsideDoubleQuotes(value) { + return value.replace(escapeSelectorAttributeValueInsideDoubleQuotesRegex, function(ch) { + return "\\" + ch.charCodeAt(0).toString(16) + " "; + }); + } + function validateInputProps(element, props) { + void 0 === props.checked || void 0 === props.defaultChecked || didWarnCheckedDefaultChecked || (console.error("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", getCurrentFiberOwnerNameInDevOrNull() || "A component", props.type), didWarnCheckedDefaultChecked = !0); + void 0 === props.value || void 0 === props.defaultValue || didWarnValueDefaultValue$1 || (console.error("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", getCurrentFiberOwnerNameInDevOrNull() || "A component", props.type), didWarnValueDefaultValue$1 = !0); + } + function updateInput(element, value, defaultValue, lastDefaultValue, checked, defaultChecked, type, name) { + element.name = ""; + null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type ? (checkAttributeStringCoercion(type, "type"), element.type = type) : element.removeAttribute("type"); + if (null != value) if ("number" === type) { + if (0 === value && "" === element.value || element.value != value) element.value = "" + getToStringValue(value); + } else element.value !== "" + getToStringValue(value) && (element.value = "" + getToStringValue(value)); + else "submit" !== type && "reset" !== type || element.removeAttribute("value"); + null != value ? setDefaultValue(element, type, getToStringValue(value)) : null != defaultValue ? setDefaultValue(element, type, getToStringValue(defaultValue)) : null != lastDefaultValue && element.removeAttribute("value"); + null == checked && null != defaultChecked && (element.defaultChecked = !!defaultChecked); + null != checked && (element.checked = checked && "function" !== typeof checked && "symbol" !== typeof checked); + null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name ? (checkAttributeStringCoercion(name, "name"), element.name = "" + getToStringValue(name)) : element.removeAttribute("name"); + } + function initInput(element, value, defaultValue, checked, defaultChecked, type, name, isHydrating) { + null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type && (checkAttributeStringCoercion(type, "type"), element.type = type); + if (null != value || null != defaultValue) { + if (!("submit" !== type && "reset" !== type || void 0 !== value && null !== value)) { + track(element); + return; + } + defaultValue = null != defaultValue ? "" + getToStringValue(defaultValue) : ""; + value = null != value ? "" + getToStringValue(value) : defaultValue; + isHydrating || value === element.value || (element.value = value); + element.defaultValue = value; + } + checked = null != checked ? checked : defaultChecked; + checked = "function" !== typeof checked && "symbol" !== typeof checked && !!checked; + element.checked = isHydrating ? element.checked : !!checked; + element.defaultChecked = !!checked; + null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name && (checkAttributeStringCoercion(name, "name"), element.name = name); + track(element); + } + function setDefaultValue(node, type, value) { + "number" === type && getActiveElement(node.ownerDocument) === node || node.defaultValue === "" + value || (node.defaultValue = "" + value); + } + function validateOptionProps(element, props) { + props.value ?? ("object" === typeof props.children && null !== props.children ? React.Children.forEach(props.children, function(child) { + null == child || "string" === typeof child || "number" === typeof child || "bigint" === typeof child || didWarnInvalidChild || (didWarnInvalidChild = !0, console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to