Added branch and tag support to the git repository viewer. (#1406)
Many thanks to Adam Soltys and everyone else who tested this patch. * Updated git test repository so it has a branch with some differences from the master branch * Moved redmine diff class into a module so as not to clash with diff-lcs gem which is required by grit * Find changesets from all branches, not just master * Got revision browsing working * Got file actions working properly * Allow browsing by short form of commit identifier * Added a method to retrieve repository branches * Allow browsing by branch names as well as commit numbers * Handle the case where a git repository has no master branch * Expand revision box and handle finding revisions by first 8 characters * Added branches dropdown to repository show page * Combined repository browse and show into a single action. Moved branch/revision navigation into a partial. * Renamed partial navigation -> breadcrumbs * Made it so latest revisions list uses branch and path context * Preserve current path when changing branch or revision * Perform slightly more graceful error handling in the case of invalid repository URLs * Allow branch names to contain periods * Allow dashes in branch names * Sort branches by name * Adding tags dropdown * Need to disable both branches and tags dropdowns before submitting revision form * Support underscores in revision (branch/tag) names * Making file history sensitive to current branch/tag/revision, adding common navigation to changes page * Updated translation files to include labels for 'branch', 'tag', and 'view all revisions' * Reenable fields after submit so they don't look disabled and don't stay disabled on browser back button * Instead of dashes just use empty string for default dropdown value * Individual entry views now sport the upgraded revision navigation * Don't display dropdowns with no entries * Consider all revisions when doing initial load * Fixed bug grabbing changesets. Thanks to Bernhard Furtmueller for catching. * Always check the entire log to find new revisions, rather than trying to go forward from the latest known one * Added some cleverness to avoid selecting the whole changesets table any time someone views the repository root * File copies and renames being detected properly * Return gracefully if no revisions are found in the git log * Applied patch from Babar Le Lapin to improve Windows compatibility git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2840 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -46,22 +46,37 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_browse_root
|
||||
get :browse, :id => 3
|
||||
get :show, :id => 3
|
||||
assert_response :success
|
||||
assert_template 'browse'
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entries)
|
||||
assert_equal 3, assigns(:entries).size
|
||||
assert_equal 6, assigns(:entries).size
|
||||
assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
|
||||
end
|
||||
|
||||
def test_browse_directory
|
||||
get :browse, :id => 3, :path => ['images']
|
||||
|
||||
def test_browse_branch
|
||||
get :show, :id => 3, :rev => 'test_branch'
|
||||
assert_response :success
|
||||
assert_template 'browse'
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entries)
|
||||
assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
|
||||
assert_equal 4, assigns(:entries).size
|
||||
assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
||||
assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
|
||||
end
|
||||
|
||||
def test_browse_directory
|
||||
get :show, :id => 3, :path => ['images']
|
||||
assert_response :success
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entries)
|
||||
assert_equal ['edit.png'], assigns(:entries).collect(&:name)
|
||||
entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
|
||||
assert_not_nil entry
|
||||
assert_equal 'file', entry.kind
|
||||
@@ -69,9 +84,9 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_browse_at_given_revision
|
||||
get :browse, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
|
||||
get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
|
||||
assert_response :success
|
||||
assert_template 'browse'
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entries)
|
||||
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
|
||||
end
|
||||
@@ -89,7 +104,7 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
|
||||
assert_template 'entry'
|
||||
# Line 19
|
||||
assert_tag :tag => 'th',
|
||||
:content => /10/,
|
||||
:content => /11/,
|
||||
:attributes => { :class => /line-num/ },
|
||||
:sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
|
||||
end
|
||||
@@ -104,7 +119,7 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
|
||||
def test_directory_entry
|
||||
get :entry, :id => 3, :path => ['sources']
|
||||
assert_response :success
|
||||
assert_template 'browse'
|
||||
assert_template 'show'
|
||||
assert_not_nil assigns(:entry)
|
||||
assert_equal 'sources', assigns(:entry).name
|
||||
end
|
||||
@@ -127,14 +142,14 @@ class RepositoriesGitControllerTest < Test::Unit::TestCase
|
||||
assert_response :success
|
||||
assert_template 'annotate'
|
||||
# Line 23, changeset 2f9c0091
|
||||
assert_tag :tag => 'th', :content => /23/,
|
||||
assert_tag :tag => 'th', :content => /24/,
|
||||
:sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
|
||||
:sibling => { :tag => 'td', :content => /jsmith/ },
|
||||
:sibling => { :tag => 'td', :content => /watcher =/ }
|
||||
end
|
||||
|
||||
def test_annotate_binary_file
|
||||
get :annotate, :id => 3, :path => ['images', 'delete.png']
|
||||
get :annotate, :id => 3, :path => ['images', 'edit.png']
|
||||
assert_response 500
|
||||
assert_tag :tag => 'div', :attributes => { :class => /error/ },
|
||||
:content => /can not be annotated/
|
||||
|
||||
Reference in New Issue
Block a user