Return-Path: X-Original-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9BB4E10CA7 for ; Fri, 13 Sep 2013 02:18:54 +0000 (UTC) Received: (qmail 79480 invoked by uid 500); 12 Sep 2013 20:52:30 -0000 Delivered-To: apmail-incubator-allura-commits-archive@incubator.apache.org Received: (qmail 78605 invoked by uid 500); 12 Sep 2013 20:52:03 -0000 Mailing-List: contact allura-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: allura-dev@incubator.apache.org Delivered-To: mailing list allura-commits@incubator.apache.org Received: (qmail 78079 invoked by uid 99); 12 Sep 2013 20:51:53 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Sep 2013 20:51:53 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 222B516614; Thu, 12 Sep 2013 20:51:52 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: tvansteenburgh@apache.org To: allura-commits@incubator.apache.org Date: Thu, 12 Sep 2013 20:51:58 -0000 Message-Id: In-Reply-To: <1a519fc425a04cefafad0bdff9ac2877@git.apache.org> References: <1a519fc425a04cefafad0bdff9ac2877@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [08/29] git commit: [5775] ticket:401 added tests for renaming [5775] ticket:401 added tests for renaming Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/cee60059 Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/cee60059 Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/cee60059 Branch: refs/heads/tv/6457 Commit: cee60059cbd356722eb06f1742bdf60a0f2cadca Parents: 385611c Author: Anton Kasyanov Authored: Thu Aug 1 17:42:51 2013 +0300 Committer: Tim Van Steenburgh Committed: Thu Aug 29 19:00:44 2013 +0000 ---------------------------------------------------------------------- Allura/allura/templates/widgets/repo/log.html | 2 +- ForgeGit/forgegit/model/git_repo.py | 1 - .../data/testrename.git/.SOURCEFORGE-REPOSITORY | 1 + .../forgegit/tests/data/testrename.git/HEAD | 1 + .../forgegit/tests/data/testrename.git/config | 7 + .../tests/data/testrename.git/description | 1 + .../testrename.git/hooks/applypatch-msg.sample | 15 ++ .../data/testrename.git/hooks/commit-msg.sample | 24 +++ .../data/testrename.git/hooks/post-receive | 9 + .../testrename.git/hooks/post-update.sample | 8 + .../testrename.git/hooks/pre-applypatch.sample | 14 ++ .../data/testrename.git/hooks/pre-commit.sample | 50 ++++++ .../data/testrename.git/hooks/pre-rebase.sample | 169 +++++++++++++++++++ .../hooks/prepare-commit-msg.sample | 36 ++++ .../data/testrename.git/hooks/update.sample | 128 ++++++++++++++ .../tests/data/testrename.git/info/exclude | 6 + .../25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 | 2 + .../25/ac990c253975ab297e9955825e4ef9dc515d82 | Bin 0 -> 35 bytes .../72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 | Bin 0 -> 43 bytes .../7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 | Bin 0 -> 26 bytes .../7c/09182e61af959e4f1fb0e354bab49f14ef810d | Bin 0 -> 133 bytes .../89/b97e3324e20b57543ae48ced731e31a052548c | Bin 0 -> 49 bytes .../9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 | Bin 0 -> 50 bytes .../b1/20505a61225e6c14bee3e5b5862db81628c35c | Bin 0 -> 160 bytes .../c5/5a64046f8618a4c84c74dc834eb5722dabd58a | Bin 0 -> 51 bytes .../dd/633a6dd42e52a66b277324fb75d83295d20f98 | Bin 0 -> 50 bytes .../fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 | Bin 0 -> 168 bytes .../tests/data/testrename.git/refs/heads/master | 1 + .../tests/functional/test_controllers.py | 24 +++ .../forgegit/tests/model/test_repository.py | 35 ++++ 30 files changed, 532 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/Allura/allura/templates/widgets/repo/log.html ---------------------------------------------------------------------- diff --git a/Allura/allura/templates/widgets/repo/log.html b/Allura/allura/templates/widgets/repo/log.html index b54685f..c3ced6f 100644 --- a/Allura/allura/templates/widgets/repo/log.html +++ b/Allura/allura/templates/widgets/repo/log.html @@ -56,7 +56,7 @@ {{g.markdown.convert(commit.message)}} {% if commit.renamed_from %}
- renamed from  + renamed from {{ commit.renamed_from['path'] }} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/model/git_repo.py ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py index cee505f..fc7be67 100644 --- a/ForgeGit/forgegit/model/git_repo.py +++ b/ForgeGit/forgegit/model/git_repo.py @@ -335,7 +335,6 @@ class GitImplementation(M.RepositoryImplementation): os.path.dirname(path), deleted_diff.b_blob.name, ) - renamed_from['commit_id'] = ci.hexsha renamed_from['commit_url'] = self._repo.url_for_commit( ci.hexsha ) http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY b/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY new file mode 100644 index 0000000..0899c29 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/.SOURCEFORGE-REPOSITORY @@ -0,0 +1 @@ +git \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/HEAD ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/HEAD b/ForgeGit/forgegit/tests/data/testrename.git/HEAD new file mode 100644 index 0000000..cb089cd --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/config ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/config b/ForgeGit/forgegit/tests/data/testrename.git/config new file mode 100644 index 0000000..164a3ce --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/config @@ -0,0 +1,7 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = true + sharedrepository = 2 +[receive] + denyNonFastforwards = true http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/description ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/description b/ForgeGit/forgegit/tests/data/testrename.git/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample new file mode 100755 index 0000000..8b2a2fe --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && + exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive new file mode 100755 index 0000000..3ab92f5 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-receive @@ -0,0 +1,9 @@ +#!/bin/bash +# The following is required for site integration, do not remove/modify. +# Place user hook code in post-receive-user and it will be called from here. +curl -s http://localhost:8080/auth/refresh_repo/p/test2/code/ + +DIR="$(dirname "${BASH_SOURCE[0]}")" +if [ -x $DIR/post-receive-user ]; then + exec $DIR/post-receive-user +fi \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample new file mode 100755 index 0000000..b1f187c --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample new file mode 100755 index 0000000..18c4829 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-commit.sample @@ -0,0 +1,50 @@ +#!/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 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 + echo "Error: Attempt to add a non-ascii file name." + echo + echo "This can cause problems if you want to work" + echo "with people on other platforms." + echo + echo "To be portable it is advisable to rename the file ..." + echo + echo "If you know what you are doing you can disable this" + echo "check using:" + echo + echo " git config hooks.allownonascii true" + echo + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample new file mode 100755 index 0000000..33730ca --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up-to-date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..f093a02 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/prepare-commit-msg.sample @@ -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" http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample b/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample new file mode 100755 index 0000000..71ab04e --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks 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 --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 http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/info/exclude ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/info/exclude b/ForgeGit/forgegit/tests/data/testrename.git/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 new file mode 100644 index 0000000..c2ab918 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/9c77dd6ee0e6091d11e429b56c44ccbf1e64a3 @@ -0,0 +1,2 @@ +x��Kj1��)z��� &�k���j�,)�(���:C����I�u��Ʈ +��)ژ� q���"�f\�/� �޵ ��[��qޣ&q1�Ō�|��' (�ǣ�pm�7���ǭ��R�V\�c���Vޞ�����`H�X���Z3��sR�.�C���ඪy|2K� \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82 b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82 new file mode 100644 index 0000000..3fabb2c Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/25/ac990c253975ab297e9955825e4ef9dc515d82 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 b/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 new file mode 100644 index 0000000..d7cc85e Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/72/68e74cd78a7c34f1a4a6dfb6ce861e35f571d4 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 b/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 new file mode 100644 index 0000000..71d6c5a Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/7b/57bd29ea8afbdeb9bac64cf7074f4b531492a8 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d b/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d new file mode 100644 index 0000000..7d51fe9 Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/7c/09182e61af959e4f1fb0e354bab49f14ef810d differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c b/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c new file mode 100644 index 0000000..8c65cdd Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/89/b97e3324e20b57543ae48ced731e31a052548c differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 b/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 new file mode 100644 index 0000000..c2eeea8 Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/9a/cb8ca3e5703fa90f1cdc708dd070c17d0c26d8 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c b/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c new file mode 100644 index 0000000..c1249a0 Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/b1/20505a61225e6c14bee3e5b5862db81628c35c differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a b/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a new file mode 100644 index 0000000..5068b35 Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/c5/5a64046f8618a4c84c74dc834eb5722dabd58a differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98 b/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98 new file mode 100644 index 0000000..297abfc Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/dd/633a6dd42e52a66b277324fb75d83295d20f98 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 b/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 new file mode 100644 index 0000000..4eef534 Binary files /dev/null and b/ForgeGit/forgegit/tests/data/testrename.git/objects/fb/b0644603bb6ecee3ebb62efe8c86efc9b84ee6 differ http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master b/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master new file mode 100644 index 0000000..e83ab53 --- /dev/null +++ b/ForgeGit/forgegit/tests/data/testrename.git/refs/heads/master @@ -0,0 +1 @@ +259c77dd6ee0e6091d11e429b56c44ccbf1e64a3 http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/functional/test_controllers.py ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py index c05ef94..638fd90 100644 --- a/ForgeGit/forgegit/tests/functional/test_controllers.py +++ b/ForgeGit/forgegit/tests/functional/test_controllers.py @@ -566,3 +566,27 @@ class TestDiff(TestController): r = self.app.get('/src-git/ci/d961abbbf10341ee18a668c975842c35cfc0bef2/tree/1.png?diff=2ce83a24e52c21e8d2146b1a04a20717c0bb08d7') assert 'alt="2ce83a2..."' in r assert 'alt="d961abb..."' in r + +class TestGitRename(TestController): + + def setUp(self): + super(TestGitRename, self).setUp() + self.setup_with_tools() + + @with_git + def setup_with_tools(self): + h.set_context('test', 'src-git', neighborhood='Projects') + repo_dir = pkg_resources.resource_filename( + 'forgegit', 'tests/data') + c.app.repo.fs_path = repo_dir + c.app.repo.status = 'ready' + c.app.repo.name = 'testrename.git' + ThreadLocalORMSession.flush_all() + h.set_context('test', 'src-git', neighborhood='Projects') + c.app.repo.refresh() + ThreadLocalORMSession.flush_all() + + def test_log(self): + resp = self.app.get('/src-git/ci/259c77dd6ee0e6091d11e429b56c44ccbf1e64a3/log/?path=/f2.txt') + assert 'renamed from' in resp + assert '/f.txt' in resp http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/cee60059/ForgeGit/forgegit/tests/model/test_repository.py ---------------------------------------------------------------------- diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py index 7d7f69b..15527f7 100644 --- a/ForgeGit/forgegit/tests/model/test_repository.py +++ b/ForgeGit/forgegit/tests/model/test_repository.py @@ -540,3 +540,38 @@ class TestGitHtmlView(unittest.TestCase): assert b.has_html_view b = self.rev.tree.get_blob_by_path('test.spec.in') assert b.has_html_view + + +class TestGitRename(unittest.TestCase): + + def setUp(self): + setup_basic_test() + self.setup_with_tools() + + @with_git + def setup_with_tools(self): + setup_global_objects() + h.set_context('test', 'src-git', neighborhood='Projects') + repo_dir = pkg_resources.resource_filename( + 'forgegit', 'tests/data') + self.repo = GM.Repository( + name='testrename.git', + fs_path=repo_dir, + url_path='/test/', + tool='git', + status='creating') + self.repo.refresh() + self.rev = self.repo.commit('HEAD') + ThreadLocalORMSession.flush_all() + ThreadLocalORMSession.close_all() + + def test_file_commits(self): + # There was a file f.txt, then it was renamed to f2.txt. + commits = list(self.repo.log(id_only=False, path='/f2.txt')) + self.assertEqual(len(commits), 2) + rename_commit = commits[1] + self.assertEqual(rename_commit['renamed_from']['path'], '/f.txt') + self.assertEqual( + rename_commit['renamed_from']['commit_url'], + self.repo.url_for_commit(rename_commit['id']) + ) \ No newline at end of file