THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Bladeren bron

Symlink icons (#1416) (#3826)

* Updated vendor code for code.gitea.io/git

* Display symlinks correctly for files and directories

* Added symlink tests

* Applied silverwinds stylesheet patch

Signed-off-by: Tris Forster <tris.git@shoddynet.org>
tags/v1.5.0-dev
Tris Forster 1 jaar geleden
bovenliggende
commit
85d14cc229
51 gewijzigde bestanden met toevoegingen van 837 en 33 verwijderingen
  1. 1
    0
      integrations/gitea-repositories-meta/user2/repo20.git/HEAD
  2. 4
    0
      integrations/gitea-repositories-meta/user2/repo20.git/config
  3. 1
    0
      integrations/gitea-repositories-meta/user2/repo20.git/description
  4. 15
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/applypatch-msg.sample
  5. 24
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/commit-msg.sample
  6. 114
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/fsmonitor-watchman.sample
  7. 15
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive
  8. 2
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea
  9. 8
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-update.sample
  10. 14
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-applypatch.sample
  11. 49
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-commit.sample
  12. 53
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-push.sample
  13. 169
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-rebase.sample
  14. 15
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive
  15. 2
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea
  16. 24
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.sample
  17. 42
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/prepare-commit-msg.sample
  18. 14
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/update
  19. 2
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea
  20. 128
    0
      integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.sample
  21. 6
    0
      integrations/gitea-repositories-meta/user2/repo20.git/info/exclude
  22. 1
    0
      integrations/gitea-repositories-meta/user2/repo20.git/info/refs
  23. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5
  24. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604
  25. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5
  26. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2
  27. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4
  28. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee
  29. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530
  30. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9
  31. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6
  32. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d
  33. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf
  34. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
  35. BIN
      integrations/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415
  36. 1
    0
      integrations/gitea-repositories-meta/user2/repo20.git/objects/info/packs
  37. 1
    0
      integrations/gitea-repositories-meta/user2/repo20.git/refs/heads/master
  38. 25
    0
      integrations/repo_test.go
  39. 7
    0
      models/fixtures/repo_unit.yml
  40. 11
    1
      models/fixtures/repository.yml
  41. 2
    2
      models/fixtures/user.yml
  42. 23
    0
      modules/base/tool.go
  43. 1
    0
      modules/templates/helper.go
  44. 1
    1
      public/css/index.css
  45. 2
    1
      public/less/_repository.less
  46. 1
    1
      templates/repo/view_list.tmpl
  47. 1
    0
      vendor/code.gitea.io/git/MAINTAINERS
  48. 10
    0
      vendor/code.gitea.io/git/error.go
  49. 5
    24
      vendor/code.gitea.io/git/sha1.go
  50. 40
    0
      vendor/code.gitea.io/git/tree_entry.go
  51. 3
    3
      vendor/vendor.json

+ 1
- 0
integrations/gitea-repositories-meta/user2/repo20.git/HEAD Bestand weergeven

@@ -0,0 +1 @@
1
+ref: refs/heads/master

+ 4
- 0
integrations/gitea-repositories-meta/user2/repo20.git/config Bestand weergeven

@@ -0,0 +1,4 @@
1
+[core]
2
+	repositoryformatversion = 0
3
+	filemode = true
4
+	bare = true

+ 1
- 0
integrations/gitea-repositories-meta/user2/repo20.git/description Bestand weergeven

@@ -0,0 +1 @@
1
+Unnamed repository; edit this file 'description' to name the repository.

+ 15
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/applypatch-msg.sample Bestand weergeven

@@ -0,0 +1,15 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to check the commit log message taken by
4
+# applypatch from an e-mail message.
5
+#
6
+# The hook should exit with non-zero status after issuing an
7
+# appropriate message if it wants to stop the commit.  The hook is
8
+# allowed to edit the commit message file.
9
+#
10
+# To enable this hook, rename this file to "applypatch-msg".
11
+
12
+. git-sh-setup
13
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
14
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
15
+:

+ 24
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/commit-msg.sample Bestand weergeven

@@ -0,0 +1,24 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to check the commit log message.
4
+# Called by "git commit" with one argument, the name of the file
5
+# that has the commit message.  The hook should exit with non-zero
6
+# status after issuing an appropriate message if it wants to stop the
7
+# commit.  The hook is allowed to edit the commit message file.
8
+#
9
+# To enable this hook, rename this file to "commit-msg".
10
+
11
+# Uncomment the below to add a Signed-off-by line to the message.
12
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
13
+# hook is more suited to it.
14
+#
15
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
16
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
17
+
18
+# This example catches duplicate Signed-off-by lines.
19
+
20
+test "" = "$(grep '^Signed-off-by: ' "$1" |
21
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
22
+	echo >&2 Duplicate Signed-off-by lines.
23
+	exit 1
24
+}

+ 114
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/fsmonitor-watchman.sample Bestand weergeven

@@ -0,0 +1,114 @@
1
+#!/usr/bin/perl
2
+
3
+use strict;
4
+use warnings;
5
+use IPC::Open2;
6
+
7
+# An example hook script to integrate Watchman
8
+# (https://facebook.github.io/watchman/) with git to speed up detecting
9
+# new and modified files.
10
+#
11
+# The hook is passed a version (currently 1) and a time in nanoseconds
12
+# formatted as a string and outputs to stdout all files that have been
13
+# modified since the given time. Paths must be relative to the root of
14
+# the working tree and separated by a single NUL.
15
+#
16
+# To enable this hook, rename this file to "query-watchman" and set
17
+# 'git config core.fsmonitor .git/hooks/query-watchman'
18
+#
19
+my ($version, $time) = @ARGV;
20
+
21
+# Check the hook interface version
22
+
23
+if ($version == 1) {
24
+	# convert nanoseconds to seconds
25
+	$time = int $time / 1000000000;
26
+} else {
27
+	die "Unsupported query-fsmonitor hook version '$version'.\n" .
28
+	    "Falling back to scanning...\n";
29
+}
30
+
31
+my $git_work_tree;
32
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
33
+	$git_work_tree = Win32::GetCwd();
34
+	$git_work_tree =~ tr/\\/\//;
35
+} else {
36
+	require Cwd;
37
+	$git_work_tree = Cwd::cwd();
38
+}
39
+
40
+my $retry = 1;
41
+
42
+launch_watchman();
43
+
44
+sub launch_watchman {
45
+
46
+	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
47
+	    or die "open2() failed: $!\n" .
48
+	    "Falling back to scanning...\n";
49
+
50
+	# In the query expression below we're asking for names of files that
51
+	# changed since $time but were not transient (ie created after
52
+	# $time but no longer exist).
53
+	#
54
+	# To accomplish this, we're using the "since" generator to use the
55
+	# recency index to select candidate nodes and "fields" to limit the
56
+	# output to file names only. Then we're using the "expression" term to
57
+	# further constrain the results.
58
+	#
59
+	# The category of transient files that we want to ignore will have a
60
+	# creation clock (cclock) newer than $time_t value and will also not
61
+	# currently exist.
62
+
63
+	my $query = <<"	END";
64
+		["query", "$git_work_tree", {
65
+			"since": $time,
66
+			"fields": ["name"],
67
+			"expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
68
+		}]
69
+	END
70
+
71
+	print CHLD_IN $query;
72
+	close CHLD_IN;
73
+	my $response = do {local $/; <CHLD_OUT>};
74
+
75
+	die "Watchman: command returned no output.\n" .
76
+	    "Falling back to scanning...\n" if $response eq "";
77
+	die "Watchman: command returned invalid output: $response\n" .
78
+	    "Falling back to scanning...\n" unless $response =~ /^\{/;
79
+
80
+	my $json_pkg;
81
+	eval {
82
+		require JSON::XS;
83
+		$json_pkg = "JSON::XS";
84
+		1;
85
+	} or do {
86
+		require JSON::PP;
87
+		$json_pkg = "JSON::PP";
88
+	};
89
+
90
+	my $o = $json_pkg->new->utf8->decode($response);
91
+
92
+	if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
93
+		print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
94
+		$retry--;
95
+		qx/watchman watch "$git_work_tree"/;
96
+		die "Failed to make watchman watch '$git_work_tree'.\n" .
97
+		    "Falling back to scanning...\n" if $? != 0;
98
+
99
+		# Watchman will always return all files on the first query so
100
+		# return the fast "everything is dirty" flag to git and do the
101
+		# Watchman query just to get it over with now so we won't pay
102
+		# the cost in git to look up each individual file.
103
+		print "/\0";
104
+		eval { launch_watchman() };
105
+		exit 0;
106
+	}
107
+
108
+	die "Watchman: $o->{error}.\n" .
109
+	    "Falling back to scanning...\n" if $o->{error};
110
+
111
+	binmode STDOUT, ":utf8";
112
+	local $, = "\0";
113
+	print @{$o->{files}};
114
+}

+ 15
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive Bestand weergeven

@@ -0,0 +1,15 @@
1
+#!/usr/bin/env bash
2
+data=$(cat)
3
+exitcodes=""
4
+hookname=$(basename $0)
5
+GIT_DIR=${GIT_DIR:-$(dirname $0)}
6
+
7
+for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8
+test -x "${hook}" || continue
9
+echo "${data}" | "${hook}"
10
+exitcodes="${exitcodes} $?"
11
+done
12
+
13
+for i in ${exitcodes}; do
14
+[ ${i} -eq 0 ] || exit ${i}
15
+done

+ 2
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea Bestand weergeven

@@ -0,0 +1,2 @@
1
+#!/usr/bin/env bash
2
+"/home/tris/Projects/go/src/code.gitea.io/gitea/gitea" hook --config='/home/tris/Projects/go/src/code.gitea.io/gitea/custom/conf/app.ini' post-receive

+ 8
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-update.sample Bestand weergeven

@@ -0,0 +1,8 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to prepare a packed repository for use over
4
+# dumb transports.
5
+#
6
+# To enable this hook, rename this file to "post-update".
7
+
8
+exec git update-server-info

+ 14
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-applypatch.sample Bestand weergeven

@@ -0,0 +1,14 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to verify what is about to be committed
4
+# by applypatch from an e-mail message.
5
+#
6
+# The hook should exit with non-zero status after issuing an
7
+# appropriate message if it wants to stop the commit.
8
+#
9
+# To enable this hook, rename this file to "pre-applypatch".
10
+
11
+. git-sh-setup
12
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
13
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
14
+:

+ 49
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-commit.sample Bestand weergeven

@@ -0,0 +1,49 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to verify what is about to be committed.
4
+# Called by "git commit" with no arguments.  The hook should
5
+# exit with non-zero status after issuing an appropriate message if
6
+# it wants to stop the commit.
7
+#
8
+# To enable this hook, rename this file to "pre-commit".
9
+
10
+if git rev-parse --verify HEAD >/dev/null 2>&1
11
+then
12
+	against=HEAD
13
+else
14
+	# Initial commit: diff against an empty tree object
15
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
16
+fi
17
+
18
+# If you want to allow non-ASCII filenames set this variable to true.
19
+allownonascii=$(git config --bool hooks.allownonascii)
20
+
21
+# Redirect output to stderr.
22
+exec 1>&2
23
+
24
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
25
+# them from being added to the repository. We exploit the fact that the
26
+# printable range starts at the space character and ends with tilde.
27
+if [ "$allownonascii" != "true" ] &&
28
+	# Note that the use of brackets around a tr range is ok here, (it's
29
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
30
+	# the square bracket bytes happen to fall in the designated range.
31
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
32
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
33
+then
34
+	cat <<\EOF
35
+Error: Attempt to add a non-ASCII file name.
36
+
37
+This can cause problems if you want to work with people on other platforms.
38
+
39
+To be portable it is advisable to rename the file.
40
+
41
+If you know what you are doing you can disable this check using:
42
+
43
+  git config hooks.allownonascii true
44
+EOF
45
+	exit 1
46
+fi
47
+
48
+# If there are whitespace errors, print the offending file names and fail.
49
+exec git diff-index --check --cached $against --

+ 53
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-push.sample Bestand weergeven

@@ -0,0 +1,53 @@
1
+#!/bin/sh
2
+
3
+# An example hook script to verify what is about to be pushed.  Called by "git
4
+# push" after it has checked the remote status, but before anything has been
5
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
6
+#
7
+# This hook is called with the following parameters:
8
+#
9
+# $1 -- Name of the remote to which the push is being done
10
+# $2 -- URL to which the push is being done
11
+#
12
+# If pushing without using a named remote those arguments will be equal.
13
+#
14
+# Information about the commits which are being pushed is supplied as lines to
15
+# the standard input in the form:
16
+#
17
+#   <local ref> <local sha1> <remote ref> <remote sha1>
18
+#
19
+# This sample shows how to prevent push of commits where the log message starts
20
+# with "WIP" (work in progress).
21
+
22
+remote="$1"
23
+url="$2"
24
+
25
+z40=0000000000000000000000000000000000000000
26
+
27
+while read local_ref local_sha remote_ref remote_sha
28
+do
29
+	if [ "$local_sha" = $z40 ]
30
+	then
31
+		# Handle delete
32
+		:
33
+	else
34
+		if [ "$remote_sha" = $z40 ]
35
+		then
36
+			# New branch, examine all commits
37
+			range="$local_sha"
38
+		else
39
+			# Update to existing branch, examine new commits
40
+			range="$remote_sha..$local_sha"
41
+		fi
42
+
43
+		# Check for WIP commit
44
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
45
+		if [ -n "$commit" ]
46
+		then
47
+			echo >&2 "Found WIP commit in $local_ref, not pushing"
48
+			exit 1
49
+		fi
50
+	fi
51
+done
52
+
53
+exit 0

+ 169
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-rebase.sample Bestand weergeven

@@ -0,0 +1,169 @@
1
+#!/bin/sh
2
+#
3
+# Copyright (c) 2006, 2008 Junio C Hamano
4
+#
5
+# The "pre-rebase" hook is run just before "git rebase" starts doing
6
+# its job, and can prevent the command from running by exiting with
7
+# non-zero status.
8
+#
9
+# The hook is called with the following parameters:
10
+#
11
+# $1 -- the upstream the series was forked from.
12
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
13
+#
14
+# This sample shows how to prevent topic branches that are already
15
+# merged to 'next' branch from getting rebased, because allowing it
16
+# would result in rebasing already published history.
17
+
18
+publish=next
19
+basebranch="$1"
20
+if test "$#" = 2
21
+then
22
+	topic="refs/heads/$2"
23
+else
24
+	topic=`git symbolic-ref HEAD` ||
25
+	exit 0 ;# we do not interrupt rebasing detached HEAD
26
+fi
27
+
28
+case "$topic" in
29
+refs/heads/??/*)
30
+	;;
31
+*)
32
+	exit 0 ;# we do not interrupt others.
33
+	;;
34
+esac
35
+
36
+# Now we are dealing with a topic branch being rebased
37
+# on top of master.  Is it OK to rebase it?
38
+
39
+# Does the topic really exist?
40
+git show-ref -q "$topic" || {
41
+	echo >&2 "No such branch $topic"
42
+	exit 1
43
+}
44
+
45
+# Is topic fully merged to master?
46
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
47
+if test -z "$not_in_master"
48
+then
49
+	echo >&2 "$topic is fully merged to master; better remove it."
50
+	exit 1 ;# we could allow it, but there is no point.
51
+fi
52
+
53
+# Is topic ever merged to next?  If so you should not be rebasing it.
54
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
55
+only_next_2=`git rev-list ^master           ${publish} | sort`
56
+if test "$only_next_1" = "$only_next_2"
57
+then
58
+	not_in_topic=`git rev-list "^$topic" master`
59
+	if test -z "$not_in_topic"
60
+	then
61
+		echo >&2 "$topic is already up to date with master"
62
+		exit 1 ;# we could allow it, but there is no point.
63
+	else
64
+		exit 0
65
+	fi
66
+else
67
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
68
+	/usr/bin/perl -e '
69
+		my $topic = $ARGV[0];
70
+		my $msg = "* $topic has commits already merged to public branch:\n";
71
+		my (%not_in_next) = map {
72
+			/^([0-9a-f]+) /;
73
+			($1 => 1);
74
+		} split(/\n/, $ARGV[1]);
75
+		for my $elem (map {
76
+				/^([0-9a-f]+) (.*)$/;
77
+				[$1 => $2];
78
+			} split(/\n/, $ARGV[2])) {
79
+			if (!exists $not_in_next{$elem->[0]}) {
80
+				if ($msg) {
81
+					print STDERR $msg;
82
+					undef $msg;
83
+				}
84
+				print STDERR " $elem->[1]\n";
85
+			}
86
+		}
87
+	' "$topic" "$not_in_next" "$not_in_master"
88
+	exit 1
89
+fi
90
+
91
+<<\DOC_END
92
+
93
+This sample hook safeguards topic branches that have been
94
+published from being rewound.
95
+
96
+The workflow assumed here is:
97
+
98
+ * Once a topic branch forks from "master", "master" is never
99
+   merged into it again (either directly or indirectly).
100
+
101
+ * Once a topic branch is fully cooked and merged into "master",
102
+   it is deleted.  If you need to build on top of it to correct
103
+   earlier mistakes, a new topic branch is created by forking at
104
+   the tip of the "master".  This is not strictly necessary, but
105
+   it makes it easier to keep your history simple.
106
+
107
+ * Whenever you need to test or publish your changes to topic
108
+   branches, merge them into "next" branch.
109
+
110
+The script, being an example, hardcodes the publish branch name
111
+to be "next", but it is trivial to make it configurable via
112
+$GIT_DIR/config mechanism.
113
+
114
+With this workflow, you would want to know:
115
+
116
+(1) ... if a topic branch has ever been merged to "next".  Young
117
+    topic branches can have stupid mistakes you would rather
118
+    clean up before publishing, and things that have not been
119
+    merged into other branches can be easily rebased without
120
+    affecting other people.  But once it is published, you would
121
+    not want to rewind it.
122
+
123
+(2) ... if a topic branch has been fully merged to "master".
124
+    Then you can delete it.  More importantly, you should not
125
+    build on top of it -- other people may already want to
126
+    change things related to the topic as patches against your
127
+    "master", so if you need further changes, it is better to
128
+    fork the topic (perhaps with the same name) afresh from the
129
+    tip of "master".
130
+
131
+Let's look at this example:
132
+
133
+		   o---o---o---o---o---o---o---o---o---o "next"
134
+		  /       /           /           /
135
+		 /   a---a---b A     /           /
136
+		/   /               /           /
137
+	       /   /   c---c---c---c B         /
138
+	      /   /   /             \         /
139
+	     /   /   /   b---b C     \       /
140
+	    /   /   /   /             \     /
141
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
142
+
143
+
144
+A, B and C are topic branches.
145
+
146
+ * A has one fix since it was merged up to "next".
147
+
148
+ * B has finished.  It has been fully merged up to "master" and "next",
149
+   and is ready to be deleted.
150
+
151
+ * C has not merged to "next" at all.
152
+
153
+We would want to allow C to be rebased, refuse A, and encourage
154
+B to be deleted.
155
+
156
+To compute (1):
157
+
158
+	git rev-list ^master ^topic next
159
+	git rev-list ^master        next
160
+
161
+	if these match, topic has not merged in next at all.
162
+
163
+To compute (2):
164
+
165
+	git rev-list master..topic
166
+
167
+	if this is empty, it is fully merged to "master".
168
+
169
+DOC_END

+ 15
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive Bestand weergeven

@@ -0,0 +1,15 @@
1
+#!/usr/bin/env bash
2
+data=$(cat)
3
+exitcodes=""
4
+hookname=$(basename $0)
5
+GIT_DIR=${GIT_DIR:-$(dirname $0)}
6
+
7
+for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
8
+test -x "${hook}" || continue
9
+echo "${data}" | "${hook}"
10
+exitcodes="${exitcodes} $?"
11
+done
12
+
13
+for i in ${exitcodes}; do
14
+[ ${i} -eq 0 ] || exit ${i}
15
+done

+ 2
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea Bestand weergeven

@@ -0,0 +1,2 @@
1
+#!/usr/bin/env bash
2
+"/home/tris/Projects/go/src/code.gitea.io/gitea/gitea" hook --config='/home/tris/Projects/go/src/code.gitea.io/gitea/custom/conf/app.ini' pre-receive

+ 24
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.sample Bestand weergeven

@@ -0,0 +1,24 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to make use of push options.
4
+# The example simply echoes all push options that start with 'echoback='
5
+# and rejects all pushes when the "reject" push option is used.
6
+#
7
+# To enable this hook, rename this file to "pre-receive".
8
+
9
+if test -n "$GIT_PUSH_OPTION_COUNT"
10
+then
11
+	i=0
12
+	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
13
+	do
14
+		eval "value=\$GIT_PUSH_OPTION_$i"
15
+		case "$value" in
16
+		echoback=*)
17
+			echo "echo from the pre-receive-hook: ${value#*=}" >&2
18
+			;;
19
+		reject)
20
+			exit 1
21
+		esac
22
+		i=$((i + 1))
23
+	done
24
+fi

+ 42
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/prepare-commit-msg.sample Bestand weergeven

@@ -0,0 +1,42 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to prepare the commit log message.
4
+# Called by "git commit" with the name of the file that has the
5
+# commit message, followed by the description of the commit
6
+# message's source.  The hook's purpose is to edit the commit
7
+# message file.  If the hook fails with a non-zero status,
8
+# the commit is aborted.
9
+#
10
+# To enable this hook, rename this file to "prepare-commit-msg".
11
+
12
+# This hook includes three examples. The first one removes the
13
+# "# Please enter the commit message..." help message.
14
+#
15
+# The second includes the output of "git diff --name-status -r"
16
+# into the message, just before the "git status" output.  It is
17
+# commented because it doesn't cope with --amend or with squashed
18
+# commits.
19
+#
20
+# The third example adds a Signed-off-by line to the message, that can
21
+# still be edited.  This is rarely a good idea.
22
+
23
+COMMIT_MSG_FILE=$1
24
+COMMIT_SOURCE=$2
25
+SHA1=$3
26
+
27
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
28
+
29
+# case "$COMMIT_SOURCE,$SHA1" in
30
+#  ,|template,)
31
+#    /usr/bin/perl -i.bak -pe '
32
+#       print "\n" . `git diff --cached --name-status -r`
33
+# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
34
+#  *) ;;
35
+# esac
36
+
37
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
38
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
39
+# if test -z "$COMMIT_SOURCE"
40
+# then
41
+#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
42
+# fi

+ 14
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/update Bestand weergeven

@@ -0,0 +1,14 @@
1
+#!/usr/bin/env bash
2
+exitcodes=""
3
+hookname=$(basename $0)
4
+GIT_DIR=${GIT_DIR:-$(dirname $0)}
5
+
6
+for hook in ${GIT_DIR}/hooks/${hookname}.d/*; do
7
+test -x "${hook}" || continue
8
+"${hook}" $1 $2 $3
9
+exitcodes="${exitcodes} $?"
10
+done
11
+
12
+for i in ${exitcodes}; do
13
+[ ${i} -eq 0 ] || exit ${i}
14
+done

+ 2
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea Bestand weergeven

@@ -0,0 +1,2 @@
1
+#!/usr/bin/env bash
2
+"/home/tris/Projects/go/src/code.gitea.io/gitea/gitea" hook --config='/home/tris/Projects/go/src/code.gitea.io/gitea/custom/conf/app.ini' update $1 $2 $3

+ 128
- 0
integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.sample Bestand weergeven

@@ -0,0 +1,128 @@
1
+#!/bin/sh
2
+#
3
+# An example hook script to block unannotated tags from entering.
4
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
5
+#
6
+# To enable this hook, rename this file to "update".
7
+#
8
+# Config
9
+# ------
10
+# hooks.allowunannotated
11
+#   This boolean sets whether unannotated tags will be allowed into the
12
+#   repository.  By default they won't be.
13
+# hooks.allowdeletetag
14
+#   This boolean sets whether deleting tags will be allowed in the
15
+#   repository.  By default they won't be.
16
+# hooks.allowmodifytag
17
+#   This boolean sets whether a tag may be modified after creation. By default
18
+#   it won't be.
19
+# hooks.allowdeletebranch
20
+#   This boolean sets whether deleting branches will be allowed in the
21
+#   repository.  By default they won't be.
22
+# hooks.denycreatebranch
23
+#   This boolean sets whether remotely creating branches will be denied
24
+#   in the repository.  By default this is allowed.
25
+#
26
+
27
+# --- Command line
28
+refname="$1"
29
+oldrev="$2"
30
+newrev="$3"
31
+
32
+# --- Safety check
33
+if [ -z "$GIT_DIR" ]; then
34
+	echo "Don't run this script from the command line." >&2
35
+	echo " (if you want, you could supply GIT_DIR then run" >&2
36
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
37
+	exit 1
38
+fi
39
+
40
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
41
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
42
+	exit 1
43
+fi
44
+
45
+# --- Config
46
+allowunannotated=$(git config --bool hooks.allowunannotated)
47
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
48
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
49
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
50
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
51
+
52
+# check for no description
53
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
54
+case "$projectdesc" in
55
+"Unnamed repository"* | "")
56
+	echo "*** Project description file hasn't been set" >&2
57
+	exit 1
58
+	;;
59
+esac
60
+
61
+# --- Check types
62
+# if $newrev is 0000...0000, it's a commit to delete a ref.
63
+zero="0000000000000000000000000000000000000000"
64
+if [ "$newrev" = "$zero" ]; then
65
+	newrev_type=delete
66
+else
67
+	newrev_type=$(git cat-file -t $newrev)
68
+fi
69
+
70
+case "$refname","$newrev_type" in
71
+	refs/tags/*,commit)
72
+		# un-annotated tag
73
+		short_refname=${refname##refs/tags/}
74
+		if [ "$allowunannotated" != "true" ]; then
75
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
76
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
77
+			exit 1
78
+		fi
79
+		;;
80
+	refs/tags/*,delete)
81
+		# delete tag
82
+		if [ "$allowdeletetag" != "true" ]; then
83
+			echo "*** Deleting a tag is not allowed in this repository" >&2
84
+			exit 1
85
+		fi
86
+		;;
87
+	refs/tags/*,tag)
88
+		# annotated tag
89
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
90
+		then
91
+			echo "*** Tag '$refname' already exists." >&2
92
+			echo "*** Modifying a tag is not allowed in this repository." >&2
93
+			exit 1
94
+		fi
95
+		;;
96
+	refs/heads/*,commit)
97
+		# branch
98
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
99
+			echo "*** Creating a branch is not allowed in this repository" >&2
100
+			exit 1
101
+		fi
102
+		;;
103
+	refs/heads/*,delete)
104
+		# delete branch
105
+		if [ "$allowdeletebranch" != "true" ]; then
106
+			echo "*** Deleting a branch is not allowed in this repository" >&2
107
+			exit 1
108
+		fi
109
+		;;
110
+	refs/remotes/*,commit)
111
+		# tracking branch
112
+		;;
113
+	refs/remotes/*,delete)
114
+		# delete tracking branch
115
+		if [ "$allowdeletebranch" != "true" ]; then
116
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
117
+			exit 1
118
+		fi
119
+		;;
120
+	*)
121
+		# Anything else (is there anything else?)
122
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
123
+		exit 1
124
+		;;
125
+esac
126
+
127
+# --- Finished
128
+exit 0

+ 6
- 0
integrations/gitea-repositories-meta/user2/repo20.git/info/exclude Bestand weergeven

@@ -0,0 +1,6 @@
1
+# git ls-files --others --exclude-from=.git/info/exclude
2
+# Lines that start with '#' are comments.
3
+# For a project mostly in C, the following would be a good set of
4
+# exclude patterns (uncomment them if you want to use them):
5
+# *.[oa]
6
+# *~

+ 1
- 0
integrations/gitea-repositories-meta/user2/repo20.git/info/refs Bestand weergeven

@@ -0,0 +1 @@
1
+808038d2f71b0ab020991439cffd24309c7bc530	refs/heads/master

BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a Bestand weergeven


BIN
integrations/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 Bestand weergeven


+ 1
- 0
integrations/gitea-repositories-meta/user2/repo20.git/objects/info/packs Bestand weergeven

@@ -0,0 +1 @@
1
+

+ 1
- 0
integrations/gitea-repositories-meta/user2/repo20.git/refs/heads/master Bestand weergeven

@@ -0,0 +1 @@
1
+808038d2f71b0ab020991439cffd24309c7bc530

+ 25
- 0
integrations/repo_test.go Bestand weergeven

@@ -7,10 +7,12 @@ package integrations
7 7
 import (
8 8
 	"fmt"
9 9
 	"net/http"
10
+	"strings"
10 11
 	"testing"
11 12
 
12 13
 	"code.gitea.io/gitea/modules/setting"
13 14
 
15
+	"github.com/PuerkitoBio/goquery"
14 16
 	"github.com/stretchr/testify/assert"
15 17
 )
16 18
 
@@ -74,3 +76,26 @@ func TestViewRepo1CloneLinkAuthorized(t *testing.T) {
74 76
 	sshURL := fmt.Sprintf("ssh://%s@%s:%d/user2/repo1.git", setting.RunUser, setting.SSH.Domain, setting.SSH.Port)
75 77
 	assert.Equal(t, sshURL, link)
76 78
 }
79
+
80
+func TestViewRepoWithSymlinks(t *testing.T) {
81
+	prepareTestEnv(t)
82
+
83
+	session := loginUser(t, "user2")
84
+
85
+	req := NewRequest(t, "GET", "/user2/repo20.git")
86
+	resp := session.MakeRequest(t, req, http.StatusOK)
87
+
88
+	htmlDoc := NewHTMLParser(t, resp.Body)
89
+	files := htmlDoc.doc.Find("#repo-files-table > TBODY > TR > TD.name")
90
+	items := files.Map(func(i int, s *goquery.Selection) string {
91
+		cls, _ := s.Find("SPAN").Attr("class")
92
+		file := strings.Trim(s.Find("A").Text(), " \t\n")
93
+		return fmt.Sprintf("%s: %s", file, cls)
94
+	})
95
+	assert.Equal(t, len(items), 5)
96
+	assert.Equal(t, items[0], "a: octicon octicon-file-directory")
97
+	assert.Equal(t, items[1], "link_b: octicon octicon-file-symlink-directory")
98
+	assert.Equal(t, items[2], "link_d: octicon octicon-file-symlink-file")
99
+	assert.Equal(t, items[3], "link_hi: octicon octicon-file-symlink-file")
100
+	assert.Equal(t, items[4], "link_link: octicon octicon-file-symlink-file")
101
+}

+ 7
- 0
models/fixtures/repo_unit.yml Bestand weergeven

@@ -67,3 +67,10 @@
67 67
   type: 5
68 68
   config: "{}"
69 69
   created_unix: 946684810
70
+
71
+-
72
+  id: 11
73
+  repo_id: 31
74
+  type: 1
75
+  config: "{}"
76
+  created_unix: 1524304355

+ 11
- 1
models/fixtures/repository.yml Bestand weergeven

@@ -378,4 +378,14 @@
378 378
   num_pulls: 0
379 379
   num_closed_pulls: 0
380 380
   is_mirror: false
381
-  is_fork: true
381
+  is_fork: true
382
+
383
+-
384
+  id: 31
385
+  owner_id: 2
386
+  lower_name: repo20
387
+  name: repo20
388
+  num_stars: 0
389
+  num_forks: 0
390
+  num_issues: 0
391
+  is_mirror: false

+ 2
- 2
models/fixtures/user.yml Bestand weergeven

@@ -27,7 +27,7 @@
27 27
   is_admin: false
28 28
   avatar: avatar2
29 29
   avatar_email: user2@example.com
30
-  num_repos: 4
30
+  num_repos: 5
31 31
   num_stars: 2
32 32
   num_followers: 2
33 33
   num_following: 1
@@ -313,4 +313,4 @@
313 313
   avatar: avatar20
314 314
   avatar_email: user20@example.com
315 315
   num_repos: 4
316
-  is_active: true
316
+  is_active: true

+ 23
- 0
modules/base/tool.go Bestand weergeven

@@ -23,6 +23,7 @@ import (
23 23
 	"unicode"
24 24
 	"unicode/utf8"
25 25
 
26
+	"code.gitea.io/git"
26 27
 	"code.gitea.io/gitea/modules/log"
27 28
 	"code.gitea.io/gitea/modules/setting"
28 29
 	"code.gitea.io/gitea/modules/util"
@@ -559,3 +560,25 @@ func IsPDFFile(data []byte) bool {
559 560
 func IsVideoFile(data []byte) bool {
560 561
 	return strings.Index(http.DetectContentType(data), "video/") != -1
561 562
 }
563
+
564
+// EntryIcon returns the octicon class for displaying files/directories
565
+func EntryIcon(entry *git.TreeEntry) string {
566
+	switch {
567
+	case entry.IsLink():
568
+		te, err := entry.FollowLink()
569
+		if err != nil {
570
+			log.Debug(err.Error())
571
+			return "file-symlink-file"
572
+		}
573
+		if te.IsDir() {
574
+			return "file-symlink-directory"
575
+		}
576
+		return "file-symlink-file"
577
+	case entry.IsDir():
578
+		return "file-directory"
579
+	case entry.IsSubModule():
580
+		return "file-submodule"
581
+	}
582
+
583
+	return "file-text"
584
+}

+ 1
- 0
modules/templates/helper.go Bestand weergeven

@@ -75,6 +75,7 @@ func NewFuncMap() []template.FuncMap {
75 75
 		"RawTimeSince":  base.RawTimeSince,
76 76
 		"FileSize":      base.FileSize,
77 77
 		"Subtract":      base.Subtract,
78
+		"EntryIcon":     base.EntryIcon,
78 79
 		"Add": func(a, b int) int {
79 80
 			return a + b
80 81
 		},

+ 1
- 1
public/css/index.css
Diff onderdrukt omdat het te groot bestand
Bestand weergeven


+ 2
- 1
public/less/_repository.less Bestand weergeven

@@ -237,7 +237,8 @@
237 237
                     &.octicon-mail-reply {
238 238
                         margin-right: 10px;
239 239
                     }
240
-                    &.octicon-file-directory, &.octicon-file-submodule {
240
+                    &.octicon-file-directory, &.octicon-file-submodule,
241
+                    &.octicon-file-symlink-directory {
241 242
                         color: #1e70bf;
242 243
                     }
243 244
                 }

+ 1
- 1
templates/repo/view_list.tmpl Bestand weergeven

@@ -73,7 +73,7 @@
73 73
 								{{end}}
74 74
 							</a>
75 75
 						{{else}}
76
-							<span class="octicon octicon-file-text"></span>
76
+							<span class="octicon octicon-{{EntryIcon $entry}}"></span>
77 77
 							<a href="{{EscapePound $.TreeLink}}/{{EscapePound $entry.Name}}">{{$entry.Name}}</a>
78 78
 						{{end}}
79 79
 					</td>

+ 1
- 0
vendor/code.gitea.io/git/MAINTAINERS Bestand weergeven

@@ -18,3 +18,4 @@ Antoine Girard <sapk@sapk.fr> (@sapk)
18 18
 Jonas Östanbäck <jonas.ostanback@gmail.com> (@cez81)
19 19
 David Schneiderbauer <dschneiderbauer@gmail.com> (@daviian)
20 20
 Peter Žeby <morlinest@gmail.com> (@morlinest)
21
+Jonas Franz <info@jonasfranz.software> (@JonasFranzDEV)

+ 10
- 0
vendor/code.gitea.io/git/error.go Bestand weergeven

@@ -40,6 +40,16 @@ func (err ErrNotExist) Error() string {
40 40
 	return fmt.Sprintf("object does not exist [id: %s, rel_path: %s]", err.ID, err.RelPath)
41 41
 }
42 42
 
43
+// ErrBadLink entry.FollowLink error
44
+type ErrBadLink struct {
45
+	Name    string
46
+	Message string
47
+}
48
+
49
+func (err ErrBadLink) Error() string {
50
+	return fmt.Sprintf("%s: %s", err.Name, err.Message)
51
+}
52
+
43 53
 // ErrUnsupportedVersion error when required git version not matched
44 54
 type ErrUnsupportedVersion struct {
45 55
 	Required string

+ 5
- 24
vendor/code.gitea.io/git/sha1.go Bestand weergeven

@@ -5,6 +5,7 @@
5 5
 package git
6 6
 
7 7
 import (
8
+	"bytes"
8 9
 	"encoding/hex"
9 10
 	"fmt"
10 11
 	"strings"
@@ -26,43 +27,23 @@ func (id SHA1) Equal(s2 interface{}) bool {
26 27
 		}
27 28
 		return v == id.String()
28 29
 	case []byte:
29
-		if len(v) != 20 {
30
-			return false
31
-		}
32
-		for i, v := range v {
33
-			if id[i] != v {
34
-				return false
35
-			}
36
-		}
30
+		return bytes.Equal(v, id[:])
37 31
 	case SHA1:
38
-		for i, v := range v {
39
-			if id[i] != v {
40
-				return false
41
-			}
42
-		}
32
+		return v == id
43 33
 	default:
44 34
 		return false
45 35
 	}
46
-	return true
47 36
 }
48 37
 
49 38
 // String returns string (hex) representation of the Oid.
50 39
 func (id SHA1) String() string {
51
-	result := make([]byte, 0, 40)
52
-	hexvalues := []byte("0123456789abcdef")
53
-	for i := 0; i < 20; i++ {
54
-		result = append(result, hexvalues[id[i]>>4])
55
-		result = append(result, hexvalues[id[i]&0xf])
56
-	}
57
-	return string(result)
40
+	return hex.EncodeToString(id[:])
58 41
 }
59 42
 
60 43
 // MustID always creates a new SHA1 from a [20]byte array with no validation of input.
61 44
 func MustID(b []byte) SHA1 {
62 45
 	var id SHA1
63
-	for i := 0; i < 20; i++ {
64
-		id[i] = b[i]
65
-	}
46
+	copy(id[:], b)
66 47
 	return id
67 48
 }
68 49
 

+ 40
- 0
vendor/code.gitea.io/git/tree_entry.go Bestand weergeven

@@ -5,6 +5,7 @@
5 5
 package git
6 6
 
7 7
 import (
8
+	"io"
8 9
 	"sort"
9 10
 	"strconv"
10 11
 	"strings"
@@ -90,6 +91,45 @@ func (te *TreeEntry) Blob() *Blob {
90 91
 	}
91 92
 }
92 93
 
94
+// FollowLink returns the entry pointed to by a symlink
95
+func (te *TreeEntry) FollowLink() (*TreeEntry, error) {
96
+	if !te.IsLink() {
97
+		return nil, ErrBadLink{te.Name(), "not a symlink"}
98
+	}
99
+
100
+	// read the link
101
+	r, err := te.Blob().Data()
102
+	if err != nil {
103
+		return nil, err
104
+	}
105
+	buf := make([]byte, te.Size())
106
+	_, err = io.ReadFull(r, buf)
107
+	if err != nil {
108
+		return nil, err
109
+	}
110
+
111
+	lnk := string(buf)
112
+	t := te.ptree
113
+
114
+	// traverse up directories
115
+	for ; t != nil && strings.HasPrefix(lnk, "../"); lnk = lnk[3:] {
116
+		t = t.ptree
117
+	}
118
+
119
+	if t == nil {
120
+		return nil, ErrBadLink{te.Name(), "points outside of repo"}
121
+	}
122
+
123
+	target, err := t.GetTreeEntryByPath(lnk)
124
+	if err != nil {
125
+		if IsErrNotExist(err) {
126
+			return nil, ErrBadLink{te.Name(), "broken link"}
127
+		}
128
+		return nil, err
129
+	}
130
+	return target, nil
131
+}
132
+
93 133
 // GetSubJumpablePathName return the full path of subdirectory jumpable ( contains only one directory )
94 134
 func (te *TreeEntry) GetSubJumpablePathName() string {
95 135
 	if te.IsSubModule() || !te.IsDir() {

+ 3
- 3
vendor/vendor.json Bestand weergeven

@@ -3,10 +3,10 @@
3 3
 	"ignore": "test appengine",
4 4
 	"package": [
5 5
 		{
6
-			"checksumSHA1": "j6YyQxuOYRs94MVEamvnbE6ZtD0=",
6
+			"checksumSHA1": "BfL4Z7P1alyUUNspKJu7Q4GPCNs=",
7 7
 			"path": "code.gitea.io/git",
8
-			"revision": "827f97aaaa6a4ab5c31b1b799c56687a8cf6aade",
9
-			"revisionTime": "2018-02-10T03:05:43Z"
8
+			"revision": "f1ecc138bebcffed32be1a574ed0c2701b33733f",
9
+			"revisionTime": "2018-04-21T01:08:19Z"
10 10
 		},
11 11
 		{
12 12
 			"checksumSHA1": "PWaIU7g1YSkETxka2DIS1EYsPK0=",

Laden…
Annuleren
Opslaan