mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	improve integration test to resue models/fixtures and store git repos with tests (#1627)
* improve integration test to resue models/fixtures and store git repos with source * use gitea-integration-meta dir instead .tar.gz and cleanup every before every test * fix import package name
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -36,6 +36,7 @@ coverage.out
 | 
			
		||||
*.log
 | 
			
		||||
 | 
			
		||||
/gitea
 | 
			
		||||
/integrations.test
 | 
			
		||||
 | 
			
		||||
/bin
 | 
			
		||||
/dist
 | 
			
		||||
@@ -44,4 +45,4 @@ coverage.out
 | 
			
		||||
/indexers
 | 
			
		||||
/log
 | 
			
		||||
/public/img/avatar
 | 
			
		||||
/integrations/gitea-integration*
 | 
			
		||||
/integrations/gitea-integration
 | 
			
		||||
							
								
								
									
										12
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Makefile
									
									
									
									
									
								
							@@ -87,27 +87,21 @@ test-vendor:
 | 
			
		||||
	govendor status +outside +unused  || exit 1
 | 
			
		||||
 | 
			
		||||
.PHONY: test-sqlite
 | 
			
		||||
test-sqlite: integrations.test integrations/gitea-integration
 | 
			
		||||
test-sqlite: integrations.test
 | 
			
		||||
	GITEA_CONF=integrations/sqlite.ini ./integrations.test
 | 
			
		||||
 | 
			
		||||
.PHONY: test-mysql
 | 
			
		||||
test-mysql: integrations.test integrations/gitea-integration
 | 
			
		||||
test-mysql: integrations.test
 | 
			
		||||
	echo "CREATE DATABASE IF NOT EXISTS testgitea" | mysql -u root
 | 
			
		||||
	GITEA_CONF=integrations/mysql.ini ./integrations.test
 | 
			
		||||
 | 
			
		||||
.PHONY: test-pgsql
 | 
			
		||||
test-pgsql: integrations.test integrations/gitea-integration
 | 
			
		||||
test-pgsql: integrations.test
 | 
			
		||||
	GITEA_CONF=integrations/pgsql.ini ./integrations.test
 | 
			
		||||
 | 
			
		||||
integrations.test: $(SOURCES)
 | 
			
		||||
	go test -c code.gitea.io/gitea/integrations -tags 'sqlite'
 | 
			
		||||
 | 
			
		||||
integrations/gitea-integration:
 | 
			
		||||
	curl -L https://github.com/ethantkoenig/gitea-integration/archive/v2.tar.gz > integrations/gitea-integration.tar.gz
 | 
			
		||||
	mkdir -p integrations/gitea-integration
 | 
			
		||||
	tar -xf integrations/gitea-integration.tar.gz -C integrations/gitea-integration --strip-components 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY: check
 | 
			
		||||
check: test
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								integrations/gitea-integration-meta/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								integrations/gitea-integration-meta/LICENSE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2017 Ethan Koenig
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
							
								
								
									
										2
									
								
								integrations/gitea-integration-meta/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								integrations/gitea-integration-meta/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
# gitea-integration
 | 
			
		||||
Gitea integration test environment
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
ref: refs/heads/master
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
[core]
 | 
			
		||||
	repositoryformatversion = 0
 | 
			
		||||
	filemode = true
 | 
			
		||||
	bare = true
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
Unnamed repository; edit this file 'description' to name the repository.
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to check the commit log message taken by
 | 
			
		||||
# applypatch from an e-mail message.
 | 
			
		||||
#
 | 
			
		||||
# The hook should exit with non-zero status after issuing an
 | 
			
		||||
# appropriate message if it wants to stop the commit.  The hook is
 | 
			
		||||
# allowed to edit the commit message file.
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "applypatch-msg".
 | 
			
		||||
 | 
			
		||||
. git-sh-setup
 | 
			
		||||
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
 | 
			
		||||
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
 | 
			
		||||
:
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to check the commit log message.
 | 
			
		||||
# Called by "git commit" with one argument, the name of the file
 | 
			
		||||
# that has the commit message.  The hook should exit with non-zero
 | 
			
		||||
# status after issuing an appropriate message if it wants to stop the
 | 
			
		||||
# commit.  The hook is allowed to edit the commit message file.
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "commit-msg".
 | 
			
		||||
 | 
			
		||||
# Uncomment the below to add a Signed-off-by line to the message.
 | 
			
		||||
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
 | 
			
		||||
# hook is more suited to it.
 | 
			
		||||
#
 | 
			
		||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
 | 
			
		||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
 | 
			
		||||
 | 
			
		||||
# This example catches duplicate Signed-off-by lines.
 | 
			
		||||
 | 
			
		||||
test "" = "$(grep '^Signed-off-by: ' "$1" |
 | 
			
		||||
	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
 | 
			
		||||
	echo >&2 Duplicate Signed-off-by lines.
 | 
			
		||||
	exit 1
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
ORI_DIR=`pwd`
 | 
			
		||||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
 | 
			
		||||
cd "$ORI_DIR"
 | 
			
		||||
for i in `ls "$SHELL_FOLDER/post-receive.d"`; do
 | 
			
		||||
    sh "$SHELL_FOLDER/post-receive.d/$i"
 | 
			
		||||
done
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
"$GITEA_ROOT/gitea" hook --config='integrations/app.ini' post-receive
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to prepare a packed repository for use over
 | 
			
		||||
# dumb transports.
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "post-update".
 | 
			
		||||
 | 
			
		||||
exec git update-server-info
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to verify what is about to be committed
 | 
			
		||||
# by applypatch from an e-mail message.
 | 
			
		||||
#
 | 
			
		||||
# The hook should exit with non-zero status after issuing an
 | 
			
		||||
# appropriate message if it wants to stop the commit.
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "pre-applypatch".
 | 
			
		||||
 | 
			
		||||
. git-sh-setup
 | 
			
		||||
precommit="$(git rev-parse --git-path hooks/pre-commit)"
 | 
			
		||||
test -x "$precommit" && exec "$precommit" ${1+"$@"}
 | 
			
		||||
:
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to verify what is about to be committed.
 | 
			
		||||
# Called by "git commit" with no arguments.  The hook should
 | 
			
		||||
# exit with non-zero status after issuing an appropriate message if
 | 
			
		||||
# it wants to stop the commit.
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "pre-commit".
 | 
			
		||||
 | 
			
		||||
if git rev-parse --verify HEAD >/dev/null 2>&1
 | 
			
		||||
then
 | 
			
		||||
	against=HEAD
 | 
			
		||||
else
 | 
			
		||||
	# Initial commit: diff against an empty tree object
 | 
			
		||||
	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# If you want to allow non-ASCII filenames set this variable to true.
 | 
			
		||||
allownonascii=$(git config --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 --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 --
 | 
			
		||||
@@ -0,0 +1,53 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
# An example hook script to verify what is about to be pushed.  Called by "git
 | 
			
		||||
# push" after it has checked the remote status, but before anything has been
 | 
			
		||||
# pushed.  If this script exits with a non-zero status nothing will be pushed.
 | 
			
		||||
#
 | 
			
		||||
# This hook is called with the following parameters:
 | 
			
		||||
#
 | 
			
		||||
# $1 -- Name of the remote to which the push is being done
 | 
			
		||||
# $2 -- URL to which the push is being done
 | 
			
		||||
#
 | 
			
		||||
# If pushing without using a named remote those arguments will be equal.
 | 
			
		||||
#
 | 
			
		||||
# Information about the commits which are being pushed is supplied as lines to
 | 
			
		||||
# the standard input in the form:
 | 
			
		||||
#
 | 
			
		||||
#   <local ref> <local sha1> <remote ref> <remote sha1>
 | 
			
		||||
#
 | 
			
		||||
# This sample shows how to prevent push of commits where the log message starts
 | 
			
		||||
# with "WIP" (work in progress).
 | 
			
		||||
 | 
			
		||||
remote="$1"
 | 
			
		||||
url="$2"
 | 
			
		||||
 | 
			
		||||
z40=0000000000000000000000000000000000000000
 | 
			
		||||
 | 
			
		||||
while read local_ref local_sha remote_ref remote_sha
 | 
			
		||||
do
 | 
			
		||||
	if [ "$local_sha" = $z40 ]
 | 
			
		||||
	then
 | 
			
		||||
		# Handle delete
 | 
			
		||||
		:
 | 
			
		||||
	else
 | 
			
		||||
		if [ "$remote_sha" = $z40 ]
 | 
			
		||||
		then
 | 
			
		||||
			# New branch, examine all commits
 | 
			
		||||
			range="$local_sha"
 | 
			
		||||
		else
 | 
			
		||||
			# Update to existing branch, examine new commits
 | 
			
		||||
			range="$remote_sha..$local_sha"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		# Check for WIP commit
 | 
			
		||||
		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
 | 
			
		||||
		if [ -n "$commit" ]
 | 
			
		||||
		then
 | 
			
		||||
			echo >&2 "Found WIP commit in $local_ref, not pushing"
 | 
			
		||||
			exit 1
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -0,0 +1,169 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2006, 2008 Junio C Hamano
 | 
			
		||||
#
 | 
			
		||||
# The "pre-rebase" hook is run just before "git rebase" starts doing
 | 
			
		||||
# its job, and can prevent the command from running by exiting with
 | 
			
		||||
# non-zero status.
 | 
			
		||||
#
 | 
			
		||||
# The hook is called with the following parameters:
 | 
			
		||||
#
 | 
			
		||||
# $1 -- the upstream the series was forked from.
 | 
			
		||||
# $2 -- the branch being rebased (or empty when rebasing the current branch).
 | 
			
		||||
#
 | 
			
		||||
# This sample shows how to prevent topic branches that are already
 | 
			
		||||
# merged to 'next' branch from getting rebased, because allowing it
 | 
			
		||||
# would result in rebasing already published history.
 | 
			
		||||
 | 
			
		||||
publish=next
 | 
			
		||||
basebranch="$1"
 | 
			
		||||
if test "$#" = 2
 | 
			
		||||
then
 | 
			
		||||
	topic="refs/heads/$2"
 | 
			
		||||
else
 | 
			
		||||
	topic=`git symbolic-ref HEAD` ||
 | 
			
		||||
	exit 0 ;# we do not interrupt rebasing detached HEAD
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$topic" in
 | 
			
		||||
refs/heads/??/*)
 | 
			
		||||
	;;
 | 
			
		||||
*)
 | 
			
		||||
	exit 0 ;# we do not interrupt others.
 | 
			
		||||
	;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Now we are dealing with a topic branch being rebased
 | 
			
		||||
# on top of master.  Is it OK to rebase it?
 | 
			
		||||
 | 
			
		||||
# Does the topic really exist?
 | 
			
		||||
git show-ref -q "$topic" || {
 | 
			
		||||
	echo >&2 "No such branch $topic"
 | 
			
		||||
	exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Is topic fully merged to master?
 | 
			
		||||
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
 | 
			
		||||
if test -z "$not_in_master"
 | 
			
		||||
then
 | 
			
		||||
	echo >&2 "$topic is fully merged to master; better remove it."
 | 
			
		||||
	exit 1 ;# we could allow it, but there is no point.
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Is topic ever merged to next?  If so you should not be rebasing it.
 | 
			
		||||
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
 | 
			
		||||
only_next_2=`git rev-list ^master           ${publish} | sort`
 | 
			
		||||
if test "$only_next_1" = "$only_next_2"
 | 
			
		||||
then
 | 
			
		||||
	not_in_topic=`git rev-list "^$topic" master`
 | 
			
		||||
	if test -z "$not_in_topic"
 | 
			
		||||
	then
 | 
			
		||||
		echo >&2 "$topic is already up-to-date with master"
 | 
			
		||||
		exit 1 ;# we could allow it, but there is no point.
 | 
			
		||||
	else
 | 
			
		||||
		exit 0
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
 | 
			
		||||
	/usr/bin/perl -e '
 | 
			
		||||
		my $topic = $ARGV[0];
 | 
			
		||||
		my $msg = "* $topic has commits already merged to public branch:\n";
 | 
			
		||||
		my (%not_in_next) = map {
 | 
			
		||||
			/^([0-9a-f]+) /;
 | 
			
		||||
			($1 => 1);
 | 
			
		||||
		} split(/\n/, $ARGV[1]);
 | 
			
		||||
		for my $elem (map {
 | 
			
		||||
				/^([0-9a-f]+) (.*)$/;
 | 
			
		||||
				[$1 => $2];
 | 
			
		||||
			} split(/\n/, $ARGV[2])) {
 | 
			
		||||
			if (!exists $not_in_next{$elem->[0]}) {
 | 
			
		||||
				if ($msg) {
 | 
			
		||||
					print STDERR $msg;
 | 
			
		||||
					undef $msg;
 | 
			
		||||
				}
 | 
			
		||||
				print STDERR " $elem->[1]\n";
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	' "$topic" "$not_in_next" "$not_in_master"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
<<\DOC_END
 | 
			
		||||
 | 
			
		||||
This sample hook safeguards topic branches that have been
 | 
			
		||||
published from being rewound.
 | 
			
		||||
 | 
			
		||||
The workflow assumed here is:
 | 
			
		||||
 | 
			
		||||
 * Once a topic branch forks from "master", "master" is never
 | 
			
		||||
   merged into it again (either directly or indirectly).
 | 
			
		||||
 | 
			
		||||
 * Once a topic branch is fully cooked and merged into "master",
 | 
			
		||||
   it is deleted.  If you need to build on top of it to correct
 | 
			
		||||
   earlier mistakes, a new topic branch is created by forking at
 | 
			
		||||
   the tip of the "master".  This is not strictly necessary, but
 | 
			
		||||
   it makes it easier to keep your history simple.
 | 
			
		||||
 | 
			
		||||
 * Whenever you need to test or publish your changes to topic
 | 
			
		||||
   branches, merge them into "next" branch.
 | 
			
		||||
 | 
			
		||||
The script, being an example, hardcodes the publish branch name
 | 
			
		||||
to be "next", but it is trivial to make it configurable via
 | 
			
		||||
$GIT_DIR/config mechanism.
 | 
			
		||||
 | 
			
		||||
With this workflow, you would want to know:
 | 
			
		||||
 | 
			
		||||
(1) ... if a topic branch has ever been merged to "next".  Young
 | 
			
		||||
    topic branches can have stupid mistakes you would rather
 | 
			
		||||
    clean up before publishing, and things that have not been
 | 
			
		||||
    merged into other branches can be easily rebased without
 | 
			
		||||
    affecting other people.  But once it is published, you would
 | 
			
		||||
    not want to rewind it.
 | 
			
		||||
 | 
			
		||||
(2) ... if a topic branch has been fully merged to "master".
 | 
			
		||||
    Then you can delete it.  More importantly, you should not
 | 
			
		||||
    build on top of it -- other people may already want to
 | 
			
		||||
    change things related to the topic as patches against your
 | 
			
		||||
    "master", so if you need further changes, it is better to
 | 
			
		||||
    fork the topic (perhaps with the same name) afresh from the
 | 
			
		||||
    tip of "master".
 | 
			
		||||
 | 
			
		||||
Let's look at this example:
 | 
			
		||||
 | 
			
		||||
		   o---o---o---o---o---o---o---o---o---o "next"
 | 
			
		||||
		  /       /           /           /
 | 
			
		||||
		 /   a---a---b A     /           /
 | 
			
		||||
		/   /               /           /
 | 
			
		||||
	       /   /   c---c---c---c B         /
 | 
			
		||||
	      /   /   /             \         /
 | 
			
		||||
	     /   /   /   b---b C     \       /
 | 
			
		||||
	    /   /   /   /             \     /
 | 
			
		||||
    ---o---o---o---o---o---o---o---o---o---o---o "master"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
A, B and C are topic branches.
 | 
			
		||||
 | 
			
		||||
 * A has one fix since it was merged up to "next".
 | 
			
		||||
 | 
			
		||||
 * B has finished.  It has been fully merged up to "master" and "next",
 | 
			
		||||
   and is ready to be deleted.
 | 
			
		||||
 | 
			
		||||
 * C has not merged to "next" at all.
 | 
			
		||||
 | 
			
		||||
We would want to allow C to be rebased, refuse A, and encourage
 | 
			
		||||
B to be deleted.
 | 
			
		||||
 | 
			
		||||
To compute (1):
 | 
			
		||||
 | 
			
		||||
	git rev-list ^master ^topic next
 | 
			
		||||
	git rev-list ^master        next
 | 
			
		||||
 | 
			
		||||
	if these match, topic has not merged in next at all.
 | 
			
		||||
 | 
			
		||||
To compute (2):
 | 
			
		||||
 | 
			
		||||
	git rev-list master..topic
 | 
			
		||||
 | 
			
		||||
	if this is empty, it is fully merged to "master".
 | 
			
		||||
 | 
			
		||||
DOC_END
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
ORI_DIR=`pwd`
 | 
			
		||||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
 | 
			
		||||
cd "$ORI_DIR"
 | 
			
		||||
for i in `ls "$SHELL_FOLDER/pre-receive.d"`; do
 | 
			
		||||
    sh "$SHELL_FOLDER/pre-receive.d/$i"
 | 
			
		||||
done
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
"$GITEA_ROOT/gitea" hook --config='integrations/app.ini' pre-receive
 | 
			
		||||
@@ -0,0 +1,36 @@
 | 
			
		||||
#!/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 comments out the
 | 
			
		||||
# "Conflicts:" part of a merge commit.
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
case "$2,$3" in
 | 
			
		||||
  merge,)
 | 
			
		||||
    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
 | 
			
		||||
 | 
			
		||||
# ,|template,)
 | 
			
		||||
#   /usr/bin/perl -i.bak -pe '
 | 
			
		||||
#      print "\n" . `git diff --cached --name-status -r`
 | 
			
		||||
#	 if /^#/ && $first++ == 0' "$1" ;;
 | 
			
		||||
 | 
			
		||||
  *) ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
 | 
			
		||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
ORI_DIR=`pwd`
 | 
			
		||||
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
 | 
			
		||||
cd "$ORI_DIR"
 | 
			
		||||
for i in `ls "$SHELL_FOLDER/update.d"`; do
 | 
			
		||||
    sh "$SHELL_FOLDER/update.d/$i" $1 $2 $3
 | 
			
		||||
done
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
"$GITEA_ROOT/gitea" hook --config='integrations/app.ini' update $1 $2 $3
 | 
			
		||||
@@ -0,0 +1,128 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# An example hook script to block unannotated tags from entering.
 | 
			
		||||
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
 | 
			
		||||
#
 | 
			
		||||
# To enable this hook, rename this file to "update".
 | 
			
		||||
#
 | 
			
		||||
# Config
 | 
			
		||||
# ------
 | 
			
		||||
# hooks.allowunannotated
 | 
			
		||||
#   This boolean sets whether unannotated tags will be allowed into the
 | 
			
		||||
#   repository.  By default they won't be.
 | 
			
		||||
# hooks.allowdeletetag
 | 
			
		||||
#   This boolean sets whether deleting tags will be allowed in the
 | 
			
		||||
#   repository.  By default they won't be.
 | 
			
		||||
# hooks.allowmodifytag
 | 
			
		||||
#   This boolean sets whether a tag may be modified after creation. By default
 | 
			
		||||
#   it won't be.
 | 
			
		||||
# hooks.allowdeletebranch
 | 
			
		||||
#   This boolean sets whether deleting branches will be allowed in the
 | 
			
		||||
#   repository.  By default they won't be.
 | 
			
		||||
# hooks.denycreatebranch
 | 
			
		||||
#   This boolean sets whether remotely creating branches will be denied
 | 
			
		||||
#   in the repository.  By default this is allowed.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# --- Command line
 | 
			
		||||
refname="$1"
 | 
			
		||||
oldrev="$2"
 | 
			
		||||
newrev="$3"
 | 
			
		||||
 | 
			
		||||
# --- Safety check
 | 
			
		||||
if [ -z "$GIT_DIR" ]; then
 | 
			
		||||
	echo "Don't run this script from the command line." >&2
 | 
			
		||||
	echo " (if you want, you could supply GIT_DIR then run" >&2
 | 
			
		||||
	echo "  $0 <ref> <oldrev> <newrev>)" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
 | 
			
		||||
	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# --- Config
 | 
			
		||||
allowunannotated=$(git config --bool hooks.allowunannotated)
 | 
			
		||||
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
 | 
			
		||||
denycreatebranch=$(git config --bool hooks.denycreatebranch)
 | 
			
		||||
allowdeletetag=$(git config --bool hooks.allowdeletetag)
 | 
			
		||||
allowmodifytag=$(git config --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="0000000000000000000000000000000000000000"
 | 
			
		||||
if [ "$newrev" = "$zero" ]; then
 | 
			
		||||
	newrev_type=delete
 | 
			
		||||
else
 | 
			
		||||
	newrev_type=$(git cat-file -t $newrev)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$refname","$newrev_type" in
 | 
			
		||||
	refs/tags/*,commit)
 | 
			
		||||
		# un-annotated tag
 | 
			
		||||
		short_refname=${refname##refs/tags/}
 | 
			
		||||
		if [ "$allowunannotated" != "true" ]; then
 | 
			
		||||
			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&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
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
# git ls-files --others --exclude-from=.git/info/exclude
 | 
			
		||||
# Lines that start with '#' are comments.
 | 
			
		||||
# For a project mostly in C, the following would be a good set of
 | 
			
		||||
# exclude patterns (uncomment them if you want to use them):
 | 
			
		||||
# *.[oa]
 | 
			
		||||
# *~
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
65f1bf27bc3bf70f64657658635e66094edbcb4d	refs/heads/master
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
65f1bf27bc3bf70f64657658635e66094edbcb4d
 | 
			
		||||
@@ -17,6 +17,8 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/routers"
 | 
			
		||||
	"code.gitea.io/gitea/routers/routes"
 | 
			
		||||
 | 
			
		||||
	"github.com/Unknwon/com"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"gopkg.in/macaron.v1"
 | 
			
		||||
	"gopkg.in/testfixtures.v2"
 | 
			
		||||
)
 | 
			
		||||
@@ -48,7 +50,7 @@ func TestMain(m *testing.M) {
 | 
			
		||||
 | 
			
		||||
	err := models.InitFixtures(
 | 
			
		||||
		helper,
 | 
			
		||||
		"integrations/gitea-integration/fixtures/",
 | 
			
		||||
		"models/fixtures/",
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Printf("Error initializing test database: %v\n", err)
 | 
			
		||||
@@ -57,6 +59,12 @@ func TestMain(m *testing.M) {
 | 
			
		||||
	os.Exit(m.Run())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func prepareTestEnv(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, models.LoadFixtures())
 | 
			
		||||
	assert.NoError(t, os.RemoveAll("integrations/gitea-integration"))
 | 
			
		||||
	assert.NoError(t, com.CopyDir("integrations/gitea-integration-meta", "integrations/gitea-integration"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type TestResponseWriter struct {
 | 
			
		||||
	HeaderCode int
 | 
			
		||||
	Writer     io.Writer
 | 
			
		||||
 
 | 
			
		||||
@@ -10,14 +10,14 @@ import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestSignup(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, models.LoadFixtures())
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
 | 
			
		||||
	setting.Service.EnableCaptcha = false
 | 
			
		||||
 | 
			
		||||
	req, err := http.NewRequest("POST", "/user/sign_up",
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,6 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/sdk/gitea"
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +17,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestVersion(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, models.LoadFixtures())
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
 | 
			
		||||
	setting.AppVer = "1.1.0+dev"
 | 
			
		||||
	req, err := http.NewRequest("GET", "/api/v1/version", nil)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,24 +8,22 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestViewRepo(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, models.LoadFixtures())
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
 | 
			
		||||
	req, err := http.NewRequest("GET", "/user1/repo1", nil)
 | 
			
		||||
	req, err := http.NewRequest("GET", "/user2/repo1", nil)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	resp := MakeRequest(req)
 | 
			
		||||
	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestViewUser(t *testing.T) {
 | 
			
		||||
	assert.NoError(t, models.LoadFixtures())
 | 
			
		||||
	prepareTestEnv(t)
 | 
			
		||||
 | 
			
		||||
	req, err := http.NewRequest("GET", "/user1", nil)
 | 
			
		||||
	req, err := http.NewRequest("GET", "/user2", nil)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	resp := MakeRequest(req)
 | 
			
		||||
	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user