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
e010fd6a
Commit
e010fd6a
authored
Aug 25, 2006
by
lpsolit%gmail.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 274802: Save flags having the same name on product change - Patch by…
Bug 274802: Save flags having the same name on product change - Patch by Frédéric Buclin <LpSolit@gmail.com> a=myk
parent
41e381d9
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
87 additions
and
3 deletions
+87
-3
Bug.pm
Bugzilla/Bug.pm
+1
-1
Flag.pm
Bugzilla/Flag.pm
+86
-2
No files found.
Bugzilla/Bug.pm
View file @
e010fd6a
...
...
@@ -1748,7 +1748,7 @@ sub _validate_attribute {
my
@valid_attributes
=
(
# Miscellaneous properties and methods.
qw(error groups
qw(error groups
product_id component_id
longdescs milestoneurl attachments
isopened isunconfirmed
flag_types num_attachment_flag_types
...
...
Bugzilla/Flag.pm
View file @
e010fd6a
...
...
@@ -520,7 +520,10 @@ sub process {
AND i.type_id IS NULL"
,
undef
,
$bug_id
);
foreach
my
$flag_id
(
@$flag_ids
)
{
clear
(
$flag_id
,
$bug
,
$attachment
)
}
foreach
my
$flag_id
(
@$flag_ids
)
{
my
$is_retargetted
=
retarget
(
$flag_id
,
$bug
,
$attachment
);
clear
(
$flag_id
,
$bug
,
$attachment
)
unless
$is_retargetted
;
}
$flag_ids
=
$dbh
->
selectcol_arrayref
(
"SELECT DISTINCT flags.id
...
...
@@ -532,7 +535,10 @@ sub process {
AND (bugs.component_id = e.component_id OR e.component_id IS NULL)"
,
undef
,
$bug_id
);
foreach
my
$flag_id
(
@$flag_ids
)
{
clear
(
$flag_id
,
$bug
,
$attachment
)
}
foreach
my
$flag_id
(
@$flag_ids
)
{
my
$is_retargetted
=
retarget
(
$flag_id
,
$bug
,
$attachment
);
clear
(
$flag_id
,
$bug
,
$attachment
)
unless
$is_retargetted
;
}
# Take a snapshot of flags after changes.
my
@new_summaries
=
snapshot
(
$bug_id
,
$attach_id
);
...
...
@@ -759,6 +765,84 @@ sub modify {
=over
=item C<retarget($flag_id, $bug, $attachment)>
Change the type of the flag, if possible. The new flag type must have
the same name as the current flag type, must exist in the product and
attachment the bug is in, and the current settings of the flag must pass
validation. If no such flag type can be found, the type remains unchanged.
Retargetting flags is a good way to keep flags when moving bugs from one
product where a flag type is available to another product where the flag
type is unavailable, but another flag type having the same name exists.
Most of the time, if they have the same name, this means that they have
the same meaning, but with different settings.
=back
=cut
sub
retarget
{
my
(
$flag_id
,
$bug
,
$attachment
)
=
@_
;
my
$dbh
=
Bugzilla
->
dbh
;
my
$flag
=
new
Bugzilla::
Flag
(
$flag_id
);
# We are looking for flagtypes having the same name as the flagtype
# to which the current flag belongs, and being in the new product and
# component of the bug.
my
$flagtypes
=
Bugzilla::FlagType::
match
(
{
'name'
=>
$flag
->
name
,
'target_type'
=>
$attachment
?
'attachment'
:
'bug'
,
'is_active'
=>
1
,
'product_id'
=>
$bug
->
product_id
,
'component_id'
=>
$bug
->
component_id
});
# If we found no flagtype, the flag will be deleted.
return
0
unless
scalar
(
@$flagtypes
);
# If we found at least one, change the type of the flag,
# assuming the setter/requester is allowed to set/request flags
# belonging to this flagtype.
my
$is_retargetted
=
0
;
foreach
my
$flagtype
(
@$flagtypes
)
{
# Get the number of flags of this type already set for this target.
my
$has_flags
=
count
(
{
'type_id'
=>
$flag
->
type
->
id
,
'target_type'
=>
$attachment
?
'attachment'
:
'bug'
,
'bug_id'
=>
$bug
->
bug_id
,
'attach_id'
=>
$attachment
?
$attachment
->
id
:
undef
});
# Do not create a new flag of this type if this flag type is
# not multiplicable and already has a flag set.
next
if
(
!
$flag
->
type
->
is_multiplicable
&&
$has_flags
);
# Check user privileges.
my
$error_mode_cache
=
Bugzilla
->
error_mode
;
Bugzilla
->
error_mode
(
ERROR_MODE_DIE
);
eval
{
my
$requestee
=
$flag
->
requestee
?
[
$flag
->
requestee
->
login
]
:
[]
;
my
$is_private
=
$attachment
?
$attachment
->
isprivate
:
0
;
_validate
(
$flag
,
$flag
->
type
,
$flag
->
status
,
$flag
->
setter
,
$requestee
,
$is_private
);
};
Bugzilla
->
error_mode
(
$error_mode_cache
);
# If the validation failed, then we cannot use this flagtype.
next
if
(
$@
);
# Checks are successful, we can retarget the flag to this flagtype.
$dbh
->
do
(
'UPDATE flags SET type_id = ? WHERE id = ?'
,
undef
,
(
$flagtype
->
id
,
$flag
->
id
));
$is_retargetted
=
1
;
last
;
}
return
$is_retargetted
;
}
=pod
=over
=item C<clear($id, $bug, $attachment)>
Remove a flag from the DB.
...
...
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