Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
f8d34ab5
Commit
f8d34ab5
authored
Aug 07, 2017
by
Robert Speicher
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'wiki_title' into 'master'
add feature rename wiki title Closes #27800 See merge request !10069
parents
7caa37a5
29be4e0f
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
95 additions
and
55 deletions
+95
-55
app/models/project_wiki.rb
app/models/project_wiki.rb
+2
-2
app/models/wiki_page.rb
app/models/wiki_page.rb
+43
-35
app/services/wiki_pages/update_service.rb
app/services/wiki_pages/update_service.rb
+1
-1
app/views/projects/wikis/_form.html.haml
app/views/projects/wikis/_form.html.haml
+4
-1
changelogs/unreleased/wiki_title.yml
changelogs/unreleased/wiki_title.yml
+4
-0
features/steps/project/wiki.rb
features/steps/project/wiki.rb
+1
-1
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
+1
-1
spec/models/project_wiki_spec.rb
spec/models/project_wiki_spec.rb
+12
-2
spec/models/wiki_page_spec.rb
spec/models/wiki_page_spec.rb
+24
-11
spec/services/wiki_pages/update_service_spec.rb
spec/services/wiki_pages/update_service_spec.rb
+3
-1
No files found.
app/models/project_wiki.rb
View file @
f8d34ab5
...
...
@@ -113,10 +113,10 @@ class ProjectWiki
return
false
end
def
update_page
(
page
,
content
,
format
=
:markdown
,
message
=
nil
)
def
update_page
(
page
,
content
:,
title:
nil
,
format: :markdown
,
message:
nil
)
commit
=
commit_details
(
:updated
,
message
,
page
.
title
)
wiki
.
update_page
(
page
,
page
.
name
,
format
.
to_sym
,
content
,
commit
)
wiki
.
update_page
(
page
,
title
||
page
.
name
,
format
.
to_sym
,
content
,
commit
)
update_project_activity
end
...
...
app/models/wiki_page.rb
View file @
f8d34ab5
...
...
@@ -180,31 +180,50 @@ class WikiPage
#
# Returns the String SHA1 of the newly created page
# or False if the save was unsuccessful.
def
create
(
attr
=
{})
@attributes
.
merge!
(
attr
)
def
create
(
attr
s
=
{})
@attributes
.
merge!
(
attr
s
)
save
:create_page
,
title
,
content
,
format
,
message
save
(
page_details:
title
)
do
wiki
.
create_page
(
title
,
content
,
format
,
message
)
end
end
# Updates an existing Wiki Page, creating a new version.
#
# new_content - The raw markup content to replace the existing.
# format - Optional symbol representing the content format.
# See ProjectWiki::MARKUPS Hash for available formats.
# message - Optional commit message to set on the new version.
# last_commit_sha - Optional last commit sha to validate the page unchanged.
# attrs - Hash of attributes to be updated on the page.
# :content - The raw markup content to replace the existing.
# :format - Optional symbol representing the content format.
# See ProjectWiki::MARKUPS Hash for available formats.
# :message - Optional commit message to set on the new version.
# :last_commit_sha - Optional last commit sha to validate the page unchanged.
# :title - The Title to replace existing title
#
# Returns the String SHA1 of the newly created page
# or False if the save was unsuccessful.
def
update
(
new_content
,
format: :markdown
,
message:
nil
,
last_commit_sha:
nil
)
@attributes
[
:content
]
=
new_content
@attributes
[
:format
]
=
format
def
update
(
attrs
=
{})
last_commit_sha
=
attrs
.
delete
(
:last_commit_sha
)
if
last_commit_sha
&&
last_commit_sha
!=
self
.
last_commit_sha
raise
PageChangedError
.
new
(
"You are attempting to update a page that has changed since you started editing it."
)
end
save
:update_page
,
@page
,
content
,
format
,
message
attrs
.
slice!
(
:content
,
:format
,
:message
,
:title
)
@attributes
.
merge!
(
attrs
)
page_details
=
if
title
.
present?
&&
@page
.
title
!=
title
title
else
@page
.
url_path
end
save
(
page_details:
page_details
)
do
wiki
.
update_page
(
@page
,
content:
content
,
format:
format
,
message:
attrs
[
:message
],
title:
title
)
end
end
# Destroys the Wiki Page.
...
...
@@ -236,30 +255,19 @@ class WikiPage
attributes
[
:format
]
=
@page
.
format
end
def
save
(
method
,
*
args
)
saved
=
false
def
save
(
page_details
:
)
return
unless
valid?
project_wiki
=
wiki
if
valid?
&&
project_wiki
.
send
(
method
,
*
args
)
page_details
=
if
method
==
:update_page
# Use url_path instead of path to omit format extension
@page
.
url_path
else
title
end
page_title
,
page_dir
=
project_wiki
.
page_title_and_dir
(
page_details
)
gollum_wiki
=
project_wiki
.
wiki
@page
=
gollum_wiki
.
paged
(
page_title
,
page_dir
)
unless
yield
errors
.
add
(
:base
,
wiki
.
error_message
)
return
false
end
set_attributes
page_title
,
page_dir
=
wiki
.
page_title_and_dir
(
page_details
)
gollum_wiki
=
wiki
.
wiki
@page
=
gollum_wiki
.
paged
(
page_title
,
page_dir
)
@persisted
=
true
saved
=
true
else
errors
.
add
(
:base
,
project_wiki
.
error_message
)
if
project_wiki
.
error_message
end
saved
set_attributes
@persisted
=
errors
.
blank?
end
end
app/services/wiki_pages/update_service.rb
View file @
f8d34ab5
module
WikiPages
class
UpdateService
<
WikiPages
::
BaseService
def
execute
(
page
)
if
page
.
update
(
@params
[
:content
],
format:
@params
[
:format
],
message:
@params
[
:message
],
last_commit_sha:
@params
[
:last_commit_sha
]
)
if
page
.
update
(
@params
)
execute_hooks
(
page
,
'update'
)
end
...
...
app/views/projects/wikis/_form.html.haml
View file @
f8d34ab5
...
...
@@ -3,9 +3,12 @@
=
form_for
[
@project
.
namespace
.
becomes
(
Namespace
),
@project
,
@page
],
method:
@page
.
persisted?
?
:put
:
:post
,
html:
{
class:
'form-horizontal wiki-form common-note-form prepend-top-default js-quick-submit'
}
do
|
f
|
=
form_errors
(
@page
)
=
f
.
hidden_field
:title
,
value:
@page
.
title
-
if
@page
.
persisted?
=
f
.
hidden_field
:last_commit_sha
,
value:
@page
.
last_commit_sha
.form-group
.col-sm-12
=
f
.
label
:title
,
class:
'control-label-full-width'
.col-sm-12
=
f
.
text_field
:title
,
class:
'form-control'
,
value:
@page
.
title
.form-group
.col-sm-12
=
f
.
label
:format
,
class:
'control-label-full-width'
.col-sm-12
...
...
changelogs/unreleased/wiki_title.yml
0 → 100644
View file @
f8d34ab5
---
title
:
Allow wiki pages to be renamed in the UI
merge_request
:
10069
author
:
wendy0402
features/steps/project/wiki.rb
View file @
f8d34ab5
...
...
@@ -63,7 +63,7 @@ class Spinach::Features::ProjectWiki < Spinach::FeatureSteps
end
step
'That page has two revisions'
do
@page
.
update
(
"new content"
,
message:
"second commit"
)
@page
.
update
(
content:
"new content"
,
message:
"second commit"
)
end
step
'I click the History button'
do
...
...
spec/features/projects/wiki/user_updates_wiki_page_spec.rb
View file @
f8d34ab5
...
...
@@ -55,7 +55,7 @@ feature 'Projects > Wiki > User updates wiki page' do
scenario
'page has been updated since the user opened the edit page'
do
click_link
'Edit'
wiki_page
.
update
(
'Update'
)
wiki_page
.
update
(
content:
'Update'
)
click_button
'Save changes'
...
...
spec/models/project_wiki_spec.rb
View file @
f8d34ab5
...
...
@@ -223,7 +223,12 @@ describe ProjectWiki do
before
do
create_page
(
"update-page"
,
"some content"
)
@gollum_page
=
subject
.
wiki
.
paged
(
"update-page"
)
subject
.
update_page
(
@gollum_page
,
"some other content"
,
:markdown
,
"updated page"
)
subject
.
update_page
(
@gollum_page
,
content:
"some other content"
,
format: :markdown
,
message:
"updated page"
)
@page
=
subject
.
pages
.
first
.
page
end
...
...
@@ -240,7 +245,12 @@ describe ProjectWiki do
end
it
'updates project activity'
do
subject
.
update_page
(
@gollum_page
,
'Yet more content'
,
:markdown
,
'Updated page again'
)
subject
.
update_page
(
@gollum_page
,
content:
'Yet more content'
,
format: :markdown
,
message:
'Updated page again'
)
project
.
reload
...
...
spec/models/wiki_page_spec.rb
View file @
f8d34ab5
...
...
@@ -178,12 +178,12 @@ describe WikiPage do
end
it
"updates the content of the page"
do
@page
.
update
(
"new content"
)
@page
.
update
(
content:
"new content"
)
@page
=
wiki
.
find_page
(
title
)
end
it
"returns true"
do
expect
(
@page
.
update
(
"more content"
)).
to
be_truthy
expect
(
@page
.
update
(
content:
"more content"
)).
to
be_truthy
end
end
end
...
...
@@ -195,29 +195,42 @@ describe WikiPage do
end
after
do
destroy_page
(
"Update"
)
destroy_page
(
@page
.
title
)
end
context
"with valid attributes"
do
it
"updates the content of the page"
do
@page
.
update
(
"new content"
)
new_content
=
"new content"
@page
.
update
(
content:
new_content
)
@page
=
wiki
.
find_page
(
"Update"
)
expect
(
@page
.
content
).
to
eq
(
"new content"
)
end
it
"updates the title of the page"
do
new_title
=
"Index v.1.2.4"
@page
.
update
(
title:
new_title
)
@page
=
wiki
.
find_page
(
new_title
)
expect
(
@page
.
title
).
to
eq
(
new_title
)
end
it
"returns true"
do
expect
(
@page
.
update
(
"more content"
)).
to
be_truthy
expect
(
@page
.
update
(
content:
"more content"
)).
to
be_truthy
end
end
context
'with same last commit sha'
do
it
'returns true'
do
expect
(
@page
.
update
(
'more content'
,
last_commit_sha:
@page
.
last_commit_sha
)).
to
be_truthy
expect
(
@page
.
update
(
content:
'more content'
,
last_commit_sha:
@page
.
last_commit_sha
)).
to
be_truthy
end
end
context
'with different last commit sha'
do
it
'raises exception'
do
expect
{
@page
.
update
(
'more content'
,
last_commit_sha:
'xxx'
)
}.
to
raise_error
(
WikiPage
::
PageChangedError
)
expect
{
@page
.
update
(
content:
'more content'
,
last_commit_sha:
'xxx'
)
}.
to
raise_error
(
WikiPage
::
PageChangedError
)
end
end
end
...
...
@@ -249,7 +262,7 @@ describe WikiPage do
end
it
"returns an array of all commits for the page"
do
3
.
times
{
|
i
|
@page
.
update
(
"content
#{
i
}
"
)
}
3
.
times
{
|
i
|
@page
.
update
(
content:
"content
#{
i
}
"
)
}
expect
(
@page
.
versions
.
count
).
to
eq
(
4
)
end
end
...
...
@@ -294,7 +307,7 @@ describe WikiPage do
before
do
create_page
(
'Update'
,
'content'
)
@page
=
wiki
.
find_page
(
'Update'
)
3
.
times
{
|
i
|
@page
.
update
(
"content
#{
i
}
"
)
}
3
.
times
{
|
i
|
@page
.
update
(
content:
"content
#{
i
}
"
)
}
end
after
do
...
...
@@ -338,7 +351,7 @@ describe WikiPage do
end
it
'returns false for updated wiki page'
do
updated_wiki_page
=
original_wiki_page
.
update
(
"Updated content"
)
updated_wiki_page
=
original_wiki_page
.
update
(
content:
"Updated content"
)
expect
(
original_wiki_page
).
not_to
eq
(
updated_wiki_page
)
end
end
...
...
@@ -360,7 +373,7 @@ describe WikiPage do
it
'is changed after page updated'
do
last_commit_sha_before_update
=
@page
.
last_commit_sha
@page
.
update
(
"new content"
)
@page
.
update
(
content:
"new content"
)
@page
=
wiki
.
find_page
(
"Update"
)
expect
(
@page
.
last_commit_sha
).
not_to
eq
last_commit_sha_before_update
...
...
spec/services/wiki_pages/update_service_spec.rb
View file @
f8d34ab5
...
...
@@ -9,7 +9,8 @@ describe WikiPages::UpdateService do
{
content:
'New content for wiki page'
,
format:
'markdown'
,
message:
'New wiki message'
message:
'New wiki message'
,
title:
'New Title'
}
end
...
...
@@ -27,6 +28,7 @@ describe WikiPages::UpdateService do
expect
(
updated_page
.
message
).
to
eq
(
opts
[
:message
])
expect
(
updated_page
.
content
).
to
eq
(
opts
[
:content
])
expect
(
updated_page
.
format
).
to
eq
(
opts
[
:format
].
to_sym
)
expect
(
updated_page
.
title
).
to
eq
(
opts
[
:title
])
end
it
'executes webhooks'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment