@@ -6,101 +6,71 @@ package git
66import (
77 "testing"
88
9+ "code.gitea.io/gitea/modules/util"
10+
911 "github.com/stretchr/testify/assert"
12+ "github.com/stretchr/testify/require"
1013)
1114
1215func TestFollowLink (t * testing.T ) {
1316 r , err := openRepositoryWithDefaultContext ("tests/repos/repo1_bare" )
14- assert .NoError (t , err )
17+ require .NoError (t , err )
1518 defer r .Close ()
1619
1720 commit , err := r .GetCommit ("37991dec2c8e592043f47155ce4808d4580f9123" )
18- assert .NoError (t , err )
21+ require .NoError (t , err )
1922
2023 // get the symlink
21- lnk , err := commit .Tree .GetTreeEntryByPath ("foo/bar/link_to_hello" )
22- assert .NoError (t , err )
23- assert .True (t , lnk .IsLink ())
24-
25- // should be able to dereference to target
26- target , err := lnk .FollowLink ()
27- assert .NoError (t , err )
28- assert .Equal (t , "hello" , target .Name ())
29- assert .Equal (t , "foo/nar/hello" , target .FullPath ())
30- assert .False (t , target .IsLink ())
31- assert .Equal (t , "b14df6442ea5a1b382985a6549b85d435376c351" , target .ID .String ())
32-
33- // should error when called on normal file
34- target , err = commit .Tree .GetTreeEntryByPath ("file1.txt" )
35- assert .NoError (t , err )
36- _ , err = target .FollowLink ()
37- assert .ErrorAs (t , err , ErrBadLink {})
38-
39- // should error for broken links
40- target , err = commit .Tree .GetTreeEntryByPath ("foo/broken_link" )
41- assert .NoError (t , err )
42- assert .True (t , target .IsLink ())
43- _ , err = target .FollowLink ()
44- assert .ErrorAs (t , err , ErrBadLink {})
45-
46- // should error for external links
47- target , err = commit .Tree .GetTreeEntryByPath ("foo/outside_repo" )
48- assert .NoError (t , err )
49- assert .True (t , target .IsLink ())
50- _ , err = target .FollowLink ()
51- assert .ErrorAs (t , err , ErrBadLink {})
52-
53- // testing fix for short link bug
54- target , err = commit .Tree .GetTreeEntryByPath ("foo/link_short" )
55- assert .NoError (t , err )
56- _ , err = target .FollowLink ()
57- assert .ErrorAs (t , err , ErrBadLink {})
58- }
59-
60- func TestTryFollowingLinks (t * testing.T ) {
61- r , err := openRepositoryWithDefaultContext ("tests/repos/repo1_bare" )
62- assert .NoError (t , err )
63- defer r .Close ()
64-
65- commit , err := r .GetCommit ("37991dec2c8e592043f47155ce4808d4580f9123" )
66- assert .NoError (t , err )
67-
68- // get the symlink
69- list , err := commit .Tree .GetTreeEntryByPath ("foo/bar/link_to_hello" )
70- assert .NoError (t , err )
71- assert .True (t , list .IsLink ())
72-
73- // should be able to dereference to target
74- target := list .TryFollowingLinks ()
75- assert .NotEqual (t , target , list )
76- assert .Equal (t , "hello" , target .Name ())
77- assert .Equal (t , "foo/nar/hello" , target .FullPath ())
78- assert .False (t , target .IsLink ())
79- assert .Equal (t , "b14df6442ea5a1b382985a6549b85d435376c351" , target .ID .String ())
80-
81- // should default to original when called on normal file
82- link , err := commit .Tree .GetTreeEntryByPath ("file1.txt" )
83- assert .NoError (t , err )
84- target = link .TryFollowingLinks ()
85- assert .Same (t , link , target )
86-
87- // should default to original for broken links
88- link , err = commit .Tree .GetTreeEntryByPath ("foo/broken_link" )
89- assert .NoError (t , err )
90- assert .True (t , link .IsLink ())
91- target = link .TryFollowingLinks ()
92- assert .Same (t , link , target )
93-
94- // should default to original for external links
95- link , err = commit .Tree .GetTreeEntryByPath ("foo/outside_repo" )
96- assert .NoError (t , err )
97- assert .True (t , link .IsLink ())
98- target = link .TryFollowingLinks ()
99- assert .Same (t , link , target )
100-
101- // testing fix for short link bug
102- link , err = commit .Tree .GetTreeEntryByPath ("foo/link_short" )
103- assert .NoError (t , err )
104- target = link .TryFollowingLinks ()
105- assert .Same (t , link , target )
24+ {
25+ lnkFullPath := "foo/bar/link_to_hello"
26+ lnk , err := commit .Tree .GetTreeEntryByPath ("foo/bar/link_to_hello" )
27+ require .NoError (t , err )
28+ assert .True (t , lnk .IsLink ())
29+
30+ // should be able to dereference to target
31+ res , err := EntryFollowLink (commit , lnkFullPath , lnk )
32+ require .NoError (t , err )
33+ assert .Equal (t , "hello" , res .TargetEntry .Name ())
34+ assert .Equal (t , "foo/nar/hello" , res .TargetFullPath )
35+ assert .False (t , res .TargetEntry .IsLink ())
36+ assert .Equal (t , "b14df6442ea5a1b382985a6549b85d435376c351" , res .TargetEntry .ID .String ())
37+ }
38+
39+ {
40+ // should error when called on a normal file
41+ entry , err := commit .Tree .GetTreeEntryByPath ("file1.txt" )
42+ require .NoError (t , err )
43+ res , err := EntryFollowLink (commit , "file1.txt" , entry )
44+ assert .ErrorIs (t , err , util .ErrUnprocessableContent )
45+ assert .Nil (t , res )
46+ }
47+
48+ {
49+ // should error for broken links
50+ entry , err := commit .Tree .GetTreeEntryByPath ("foo/broken_link" )
51+ require .NoError (t , err )
52+ assert .True (t , entry .IsLink ())
53+ res , err := EntryFollowLink (commit , "foo/broken_link" , entry )
54+ assert .ErrorIs (t , err , util .ErrNotExist )
55+ assert .Equal (t , "nar/broken_link" , res .SymlinkContent )
56+ }
57+
58+ {
59+ // should error for external links
60+ entry , err := commit .Tree .GetTreeEntryByPath ("foo/outside_repo" )
61+ require .NoError (t , err )
62+ assert .True (t , entry .IsLink ())
63+ res , err := EntryFollowLink (commit , "foo/outside_repo" , entry )
64+ assert .ErrorIs (t , err , util .ErrNotExist )
65+ assert .Equal (t , "../../outside_repo" , res .SymlinkContent )
66+ }
67+
68+ {
69+ // testing fix for short link bug
70+ entry , err := commit .Tree .GetTreeEntryByPath ("foo/link_short" )
71+ require .NoError (t , err )
72+ res , err := EntryFollowLink (commit , "foo/link_short" , entry )
73+ assert .ErrorIs (t , err , util .ErrNotExist )
74+ assert .Equal (t , "a" , res .SymlinkContent )
75+ }
10676}
0 commit comments