Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
2338c292
Commit
2338c292
authored
Jan 22, 2009
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 474249: Add a WebService interface to add a See Also bug link to a bug
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=dkl, a=mkanat
parent
c7b2b765
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
151 additions
and
0 deletions
+151
-0
Bug.pm
Bugzilla/WebService/Bug.pm
+148
-0
Constants.pm
Bugzilla/WebService/Constants.pm
+3
-0
No files found.
Bugzilla/WebService/Bug.pm
View file @
2338c292
...
...
@@ -356,6 +356,53 @@ sub add_comment {
return
{
id
=>
$self
->
type
(
'int'
,
$new_comment_id
)
};
}
sub
update_see_also
{
my
(
$self
,
$params
)
=
@_
;
my
$user
=
Bugzilla
->
login
(
LOGIN_REQUIRED
);
# Check parameters
$params
->
{
ids
}
||
ThrowCodeError
(
'param_required'
,
{
param
=>
'id'
});
my
(
$add
,
$remove
)
=
@$params
{
qw(add remove)
};
(
$add
||
$remove
)
or
ThrowCodeError
(
'params_required'
,
{
params
=>
[
'add'
,
'remove'
]
});
my
@bugs
;
foreach
my
$id
(
@
{
$params
->
{
ids
}
})
{
my
$bug
=
Bugzilla::
Bug
->
check
(
$id
);
$user
->
can_edit_product
(
$bug
->
product_id
)
||
ThrowUserError
(
"product_edit_denied"
,
{
product
=>
$bug
->
product
});
push
(
@bugs
,
$bug
);
if
(
$remove
)
{
$bug
->
remove_see_also
(
$_
)
foreach
@$remove
;
}
if
(
$add
)
{
$bug
->
add_see_also
(
$_
)
foreach
@$add
;
}
}
my
%
changes
;
foreach
my
$bug
(
@bugs
)
{
my
$change
=
$bug
->
update
();
if
(
my
$see_also
=
$change
->
{
see_also
})
{
$changes
{
$bug
->
id
}
=
{
removed
=>
[
split
(
', '
,
$see_also
->
[
0
])],
added
=>
[
split
(
', '
,
$see_also
->
[
1
])],
};
}
else
{
# We still want a changes entry, for API consistency.
$changes
{
$bug
->
id
}
=
{
added
=>
[]
,
removed
=>
[]
};
}
Bugzilla::BugMail::
Send
(
$bug
->
id
,
{
changer
=>
$user
->
login
});
}
return
{
changes
=>
\%
changes
};
}
1
;
__END__
...
...
@@ -1025,4 +1072,105 @@ You did not have the necessary rights to edit the bug.
=back
=item C<update_see_also>
B<UNSTABLE>
=over
=item B<Description>
Adds or removes URLs for the "See Also" field on bugs. These URLs must
point to some valid bug in some Bugzilla installation.
=item B<Params>
=over
=item C<ids>
Array of C<int>s or C<string>s. The ids or aliases of bugs that you want
to modify.
=item C<add>
Array of C<string>s. URLs to Bugzilla bugs. These URLs will be added to
the See Also field. They must be valid URLs to C<show_bug.cgi> in a
Bugzilla installation. If they don't start with C<http://> or C<https://>,
it will be assumed that C<http://> should be added to the beginning of the
string.
It is safe to specify URLs that are already in the "See Also" field on
a bug--they will just be silently ignored.
=item C<remove>
Array of C<string>s. These URLs will be removed from the See Also field.
You must specify the full URL that you want removed. However, matching
is done case-insensitively, so you don't have to specify the URL in
exact case, if you don't want to.
If you specify a URL that is not in the See Also field of a particular bug,
it will just be silently ignored. Invaild URLs are currently silently ignored,
though this may change in some future version of Bugzilla.
=back
NOTE: If you specify the same URL in both C<add> and C<remove>, it will
be I<added>. (That is, C<add> overrides C<remove>.)
=item B<Returns>
C<changes>, a hash where the keys are numeric bug ids and the contents
are a hash with one key, C<see_also>. C<see_also> points to a hash, which
contains two keys, C<added> and C<removed>. These are arrays of strings,
representing the actual changes that were made to the bug.
Here's a diagram of what the return value looks like for updating
bug ids 1 and 2:
{
changes => {
1 => {
added => (an array of bug URLs),
removed => (an array of bug URLs),
},
2 => {
added => (an array of bug URLs),
removed => (an array of bug URLs),
}
}
}
This return value allows you to tell what this method actually did. It is in
this format to be compatible with the return value of a future C<Bug.update>
method.
=item B<Errors>
This method can throw all of the errors that L</get> throws, plus:
=over
=item 108 (Bug Edit Denied)
You did not have the necessary rights to edit the bug.
=item 112 (Invalid Bug URL)
One of the URLs you provided did not look like a valid bug URL.
=back
=item B<History>
=over
=item Added in Bugzilla B<3.4>.
=back
=back
=back
Bugzilla/WebService/Constants.pm
View file @
2338c292
...
...
@@ -84,6 +84,9 @@ use constant WS_ERROR_CODE => {
# Comment-related errors
comment_is_private
=>
110
,
comment_id_invalid
=>
111
,
# See Also errors
bug_url_invalid
=>
112
,
bug_url_too_long
=>
112
,
# Authentication errors are usually 300-400.
invalid_username_or_password
=>
300
,
...
...
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