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
0
Merge Requests
0
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
Jérome Perrin
gitlab-ce
Commits
29be4e0f
Commit
29be4e0f
authored
Jul 23, 2017
by
wendy0402
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow wiki pages to be renamed in the UI
parent
43c01547
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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
---
title
:
Allow wiki pages to be renamed in the UI
merge_request
:
10069
author
:
wendy0402
features/steps/project/wiki.rb
View file @
29be4e0f
...
...
@@ -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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
...
...
@@ -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 @
29be4e0f
...
...
@@ -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