mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 07:00:05 +08:00
379 lines
12 KiB
Plaintext
379 lines
12 KiB
Plaintext
Describe gina#core#treeish
|
|
Before all
|
|
let Path = vital#gina#import('System.Filepath')
|
|
let slit1 = Slit(tempname(), 1)
|
|
let slit2 = Slit(tempname(), 1)
|
|
call slit1.write('A/foo.txt', [])
|
|
call slit1.write('B/foo.txt', [])
|
|
call slit1.write('C/foo.txt', [])
|
|
|
|
call slit1.execute('add %s', slit1.path('A/foo.txt'))
|
|
call slit1.execute('commit --quiet -m "First"')
|
|
call slit1.execute('checkout -b develop')
|
|
call slit1.execute('add %s', slit1.path('B/foo.txt'))
|
|
call slit1.execute('commit --quiet -m "Second"')
|
|
call slit1.execute('checkout master')
|
|
call slit1.execute('add %s', slit1.path('C/foo.txt'))
|
|
call slit1.execute('commit --quiet -m "Thrid"')
|
|
|
|
call slit2.write('A/foo.txt', [])
|
|
call slit2.write('B/foo.txt', [])
|
|
call slit2.write('C/foo.txt', [])
|
|
|
|
call slit2.execute('add %s', slit2.path('A/foo.txt'))
|
|
call slit2.execute('commit --quiet -m "First"')
|
|
call slit2.execute('checkout -b develop')
|
|
call slit2.execute('add %s', slit2.path('B/foo.txt'))
|
|
call slit2.execute('commit --quiet -m "Second"')
|
|
call slit2.execute('checkout master')
|
|
call slit2.execute('add %s', slit2.path('C/foo.txt'))
|
|
call slit2.execute('commit --quiet -m "Thrid"')
|
|
" Call git gc to remove traditional refs
|
|
call slit2.execute('gc')
|
|
End
|
|
|
|
After all
|
|
%bwipeout!
|
|
End
|
|
|
|
Before
|
|
%bwipeout!
|
|
End
|
|
|
|
Describe #parse({treeish})
|
|
" NOTE:
|
|
" The spec follows https://git-scm.com/docs/gitrevisions
|
|
It parses <sha1> and returns [<rev>, v:null]
|
|
let rev = 'dae86e1950b1277e545cee180551750029cfe735'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'dae86e'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <describeOutput> and return [<rev>, v:null]
|
|
let rev = 'v1.7.4.2-679-g3bee7fb'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <refname> and return [<rev>, v:null]
|
|
let rev = 'master'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'heads/master'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'refs/heads/master'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses @ and return [<rev>, v:null]
|
|
let rev = '@'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <refname>@{<date>} and return [<rev>, v:null]
|
|
let rev = 'master@{yesterday}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'HEAD@{5 minutes ago}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <refname>@{<n>} and return [<rev>, v:null]
|
|
let rev = 'master@{1}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses @{<n>} and return [<rev>, v:null]
|
|
let rev = '@{1}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses @{-<n>} and return [<rev>, v:null]
|
|
let rev = '@{-1}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <branchname>@{upstream} and return [<rev>, v:null]
|
|
let rev = 'master@{upstream}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = '@{u}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <branchname>@{push} and return [<rev>, v:null]
|
|
let rev = 'master@{push}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = '@{push}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>^ and return [<rev>, v:null]
|
|
let rev = 'HEAD^'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'v1.5.1^0'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>~<n> and return [<rev>, v:null]
|
|
let rev = 'master~3'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>^{<type>} and return [<rev>, v:null]
|
|
let rev = 'v0.99.8^{commit}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>^{} and return [<rev>, v:null]
|
|
let rev = 'v0.99.8^{}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>^{/<text>} and return [<rev>, v:null]
|
|
let rev = 'HEAD^{/fix nasty bug}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = 'HEAD^{/Warning: Something}'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses :/<text> and return [<rev>, v:null]
|
|
let rev = ':/fix nasty bug'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
|
|
let rev = ':/Warning: Something'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
|
|
It parses <rev>:<path> and return [<rev>, <path>]
|
|
let rev = 'HEAD:README'
|
|
Assert Equals(gina#core#treeish#parse(rev), ['HEAD', 'README'])
|
|
|
|
let rev = ':README'
|
|
Assert Equals(gina#core#treeish#parse(rev), ['', 'README'])
|
|
|
|
let rev = 'master:./README'
|
|
Assert Equals(gina#core#treeish#parse(rev), ['master', './README'])
|
|
|
|
let rev = 'master:'
|
|
Assert Equals(gina#core#treeish#parse(rev), ['master', ''])
|
|
End
|
|
|
|
It parses :<n>:<path> and return [<rev>, <path>]
|
|
let rev = ':0:README'
|
|
Assert Equals(gina#core#treeish#parse(rev), [':0', 'README'])
|
|
|
|
let rev = ':0:'
|
|
Assert Equals(gina#core#treeish#parse(rev), [':0', ''])
|
|
End
|
|
|
|
It parses :<n> and return [<rev>, v:null]
|
|
let rev = ':0'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, ''])
|
|
|
|
let rev = ':1'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, ''])
|
|
|
|
let rev = ':2'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, ''])
|
|
|
|
let rev = ':3'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, ''])
|
|
End
|
|
|
|
It fails to parse :<abspath> while it conflicts with :/<text>
|
|
let rev = '/some/absolute/path'
|
|
Assert Equals(gina#core#treeish#parse(rev), [rev, v:null])
|
|
End
|
|
End
|
|
|
|
Describe #build({rev}, {path})
|
|
It builds a treeish from {rev} and v:null and return {rev}
|
|
let rev = 'master'
|
|
Assert Equals(gina#core#treeish#build(rev, v:null), rev)
|
|
End
|
|
|
|
It builds a treeish from {rev} and {path} and return {rev}:{path}
|
|
Assert Equals(gina#core#treeish#build('master', 'README'), 'master:README')
|
|
Assert Equals(gina#core#treeish#build('', 'README'), ':README')
|
|
Assert Equals(gina#core#treeish#build('master', ''), 'master:')
|
|
End
|
|
|
|
It builds a treeish from v:null and {path} and return :0:{path}
|
|
Assert Equals(gina#core#treeish#build(v:null, 'README'), ':0:README')
|
|
Assert Equals(gina#core#treeish#build(v:null, ''), ':0:')
|
|
End
|
|
|
|
It builds a treeish from v:null and v:null and return :0
|
|
Assert Equals(gina#core#treeish#build(v:null, v:null), ':0')
|
|
End
|
|
|
|
It translate a {path} to an Unix-style path and return
|
|
Assert Equals(gina#core#treeish#build(v:null, 'foo/bar'), ':0:foo/bar')
|
|
Assert Equals(gina#core#treeish#build(v:null, 'foo\bar'), ':0:foo/bar')
|
|
End
|
|
End
|
|
|
|
Describe #sha1({git}, {rev})
|
|
Before
|
|
let git = gina#core#get({
|
|
\ 'expr': slit1.worktree,
|
|
\})
|
|
End
|
|
|
|
It returns <sha1> of 'HEAD'
|
|
Assert Match(gina#core#treeish#sha1(git, 'HEAD'), '^\w\{40}$')
|
|
End
|
|
|
|
It returns <sha1> of 'heads/master'
|
|
Assert Match(gina#core#treeish#sha1(git, 'heads/master'), '^\w\{40}$')
|
|
End
|
|
|
|
It returns <sha1> of 'HEAD@{2 lays ago}'
|
|
Assert Match(gina#core#treeish#sha1(git, 'HEAD@{2 days ago}'), '^\w\{40}$')
|
|
Assert Match(gina#core#treeish#sha1(git, 'HEAD@{2.days.ago}'), '^\w\{40}$')
|
|
End
|
|
End
|
|
|
|
Describe #split({rev})
|
|
It splits 'HEAD' into ['HEAD', '']
|
|
let revs = gina#core#treeish#split('HEAD')
|
|
Assert Equals(revs[0], 'HEAD')
|
|
Assert Equals(revs[1], '')
|
|
End
|
|
|
|
It splits 'HEAD@{2.days.ago}' into ['HEAD@{2.days.ago}', '']
|
|
let revs = gina#core#treeish#split('HEAD@{2.days.ago}')
|
|
Assert Equals(revs[0], 'HEAD@{2.days.ago}')
|
|
Assert Equals(revs[1], '')
|
|
End
|
|
|
|
It splits 'HEAD..HEAD~' into ['HEAD', 'HEAD~']
|
|
let revs = gina#core#treeish#split('HEAD..HEAD~')
|
|
Assert Equals(revs[0], 'HEAD')
|
|
Assert Equals(revs[1], 'HEAD~')
|
|
End
|
|
|
|
It splits 'HEAD...HEAD~' into ['HEAD...HEAD~', 'HEAD~']
|
|
let revs = gina#core#treeish#split('HEAD...HEAD~')
|
|
Assert Equals(revs[0], 'HEAD...HEAD~')
|
|
Assert Equals(revs[1], 'HEAD~')
|
|
End
|
|
|
|
It splits '..' into ['HEAD', 'HEAD']
|
|
let revs = gina#core#treeish#split('..')
|
|
Assert Equals(revs[0], 'HEAD')
|
|
Assert Equals(revs[1], 'HEAD')
|
|
End
|
|
|
|
It splits '...' into ['HEAD...HEAD', 'HEAD']
|
|
let revs = gina#core#treeish#split('...')
|
|
Assert Equals(revs[0], 'HEAD...HEAD')
|
|
Assert Equals(revs[1], 'HEAD')
|
|
End
|
|
End
|
|
|
|
Describe #resolve({git}, {rev})
|
|
Context with traditional refs
|
|
Before
|
|
let git = gina#core#get({
|
|
\ 'expr': slit1.worktree,
|
|
\})
|
|
End
|
|
|
|
It resolves 'HEAD' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves 'HEAD@{2.days.ago}' to 'HEAD@{2.days.ago}'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD@{2.days.ago}')
|
|
Assert Equals(rev, 'HEAD@{2.days.ago}')
|
|
End
|
|
|
|
It resolves 'HEAD..HEAD~' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD..HEAD~')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves 'HEAD...HEAD~' to <common ancestor>
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD...HEAD~')
|
|
Assert Match(rev, '^\w\{40}$')
|
|
End
|
|
|
|
It resolves '..' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, '..')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves '...' to <common ancestor>
|
|
let rev = gina#core#treeish#resolve(git, '...')
|
|
Assert Match(rev, '^\w\{40}$')
|
|
End
|
|
|
|
It resolves 'HEAD' to 'master' when aggressive is 1
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD', 1)
|
|
Assert Equals(rev, 'master')
|
|
End
|
|
|
|
It resolves 'master' to 'master' when aggressive is 1
|
|
let rev = gina#core#treeish#resolve(git, 'master', 1)
|
|
Assert Equals(rev, 'master')
|
|
End
|
|
End
|
|
|
|
Context with packed refs
|
|
Before
|
|
let git = gina#core#get({
|
|
\ 'expr': slit2.worktree,
|
|
\})
|
|
End
|
|
|
|
It resolves 'HEAD' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves 'HEAD@{2.days.ago}' to 'HEAD@{2.days.ago}'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD@{2.days.ago}')
|
|
Assert Equals(rev, 'HEAD@{2.days.ago}')
|
|
End
|
|
|
|
It resolves 'HEAD..HEAD~' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD..HEAD~')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves 'HEAD...HEAD~' to <common ancestor>
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD...HEAD~')
|
|
Assert Match(rev, '^\w\{40}$')
|
|
End
|
|
|
|
It resolves '..' to 'HEAD'
|
|
let rev = gina#core#treeish#resolve(git, '..')
|
|
Assert Equals(rev, 'HEAD')
|
|
End
|
|
|
|
It resolves '...' to <common ancestor>
|
|
let rev = gina#core#treeish#resolve(git, '...')
|
|
Assert Match(rev, '^\w\{40}$')
|
|
End
|
|
|
|
It resolves 'HEAD' to 'master' when aggressive is 1
|
|
let rev = gina#core#treeish#resolve(git, 'HEAD', 1)
|
|
Assert Equals(rev, 'master')
|
|
End
|
|
|
|
It resolves 'master' to 'master' when aggressive is 1
|
|
let rev = gina#core#treeish#resolve(git, 'master', 1)
|
|
Assert Equals(rev, 'master')
|
|
End
|
|
End
|
|
End
|
|
End
|