Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
bugzilla
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Lysator
bugzilla
Commits
8b0e4c41
Commit
8b0e4c41
authored
Jul 11, 2014
by
Per Cederqvist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Imported Bugzilla 4.4.1.
parent
640e2f5e
Changes
201
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
201 changed files
with
19628 additions
and
1493 deletions
+19628
-1493
.bzr/README
.bzr/README
+1
-1
.bzr/checkout/dirstate
.bzr/checkout/dirstate
+0
-0
Bugzilla.pm
Bugzilla.pm
+4
-4
Bugzilla/Attachment/PatchReader.pm
Bugzilla/Attachment/PatchReader.pm
+1
-2
Bugzilla/Auth/Login/Cookie.pm
Bugzilla/Auth/Login/Cookie.pm
+3
-3
Bugzilla/Bug.pm
Bugzilla/Bug.pm
+11
-34
Bugzilla/BugMail.pm
Bugzilla/BugMail.pm
+21
-2
Bugzilla/CGI.pm
Bugzilla/CGI.pm
+4
-4
Bugzilla/Constants.pm
Bugzilla/Constants.pm
+1
-1
Bugzilla/DB/Schema/Oracle.pm
Bugzilla/DB/Schema/Oracle.pm
+4
-0
Bugzilla/Flag.pm
Bugzilla/Flag.pm
+14
-6
Bugzilla/Install/CPAN.pm
Bugzilla/Install/CPAN.pm
+1
-7
Bugzilla/Install/Requirements.pm
Bugzilla/Install/Requirements.pm
+21
-3
Bugzilla/Keyword.pm
Bugzilla/Keyword.pm
+1
-1
Bugzilla/Search.pm
Bugzilla/Search.pm
+21
-42
Bugzilla/Search/ClauseGroup.pm
Bugzilla/Search/ClauseGroup.pm
+4
-1
Bugzilla/Search/Quicksearch.pm
Bugzilla/Search/Quicksearch.pm
+60
-19
Bugzilla/Token.pm
Bugzilla/Token.pm
+17
-5
Bugzilla/User.pm
Bugzilla/User.pm
+1
-1
Bugzilla/UserAgent.pm
Bugzilla/UserAgent.pm
+7
-0
Bugzilla/Util.pm
Bugzilla/Util.pm
+37
-1
Bugzilla/WebService/Bug.pm
Bugzilla/WebService/Bug.pm
+66
-4
Bugzilla/WebService/Product.pm
Bugzilla/WebService/Product.pm
+0
-4
Bugzilla/WebService/Server/XMLRPC.pm
Bugzilla/WebService/Server/XMLRPC.pm
+10
-2
Bugzilla/WebService/Util.pm
Bugzilla/WebService/Util.pm
+17
-7
attachment.cgi
attachment.cgi
+10
-7
buglist.cgi
buglist.cgi
+1
-1
contrib/syncLDAP.pl
contrib/syncLDAP.pl
+4
-11
docs/bugzilla.ent
docs/bugzilla.ent
+11
-10
docs/bugzilla.ent.tmpl
docs/bugzilla.ent.tmpl
+3
-3
docs/en/html/Bugzilla-Guide.html
docs/en/html/Bugzilla-Guide.html
+433
-433
docs/en/html/Bugzilla-Guide.proc
docs/en/html/Bugzilla-Guide.proc
+0
-0
docs/en/html/about.html
docs/en/html/about.html
+1
-1
docs/en/html/administration.html
docs/en/html/administration.html
+1
-1
docs/en/html/api/Bugzilla.html
docs/en/html/api/Bugzilla.html
+1
-1
docs/en/html/api/Bugzilla/Util.html
docs/en/html/api/Bugzilla/Util.html
+6
-0
docs/en/html/api/Bugzilla/WebService/Bug.html
docs/en/html/api/Bugzilla/WebService/Bug.html
+60
-0
docs/en/html/api/Bugzilla/WebService/Product.html
docs/en/html/api/Bugzilla/WebService/Product.html
+0
-6
docs/en/html/api/index.html
docs/en/html/api/index.html
+2
-2
docs/en/html/attachments.html
docs/en/html/attachments.html
+9
-9
docs/en/html/bug_page.html
docs/en/html/bug_page.html
+4
-4
docs/en/html/bug_status_workflow.html
docs/en/html/bug_status_workflow.html
+1
-1
docs/en/html/bugreports.html
docs/en/html/bugreports.html
+6
-6
docs/en/html/classifications.html
docs/en/html/classifications.html
+1
-1
docs/en/html/cmdline-bugmail.html
docs/en/html/cmdline-bugmail.html
+1
-1
docs/en/html/cmdline.html
docs/en/html/cmdline.html
+2
-2
docs/en/html/components.html
docs/en/html/components.html
+1
-1
docs/en/html/configuration.html
docs/en/html/configuration.html
+40
-40
docs/en/html/conventions.html
docs/en/html/conventions.html
+1
-1
docs/en/html/copyright.html
docs/en/html/copyright.html
+1
-1
docs/en/html/credits.html
docs/en/html/credits.html
+2
-2
docs/en/html/cust-change-permissions.html
docs/en/html/cust-change-permissions.html
+2
-2
docs/en/html/cust-skins.html
docs/en/html/cust-skins.html
+2
-2
docs/en/html/cust-templates.html
docs/en/html/cust-templates.html
+13
-13
docs/en/html/custom-fields.html
docs/en/html/custom-fields.html
+7
-7
docs/en/html/customization.html
docs/en/html/customization.html
+1
-1
docs/en/html/disclaimer.html
docs/en/html/disclaimer.html
+1
-1
docs/en/html/edit-values.html
docs/en/html/edit-values.html
+3
-3
docs/en/html/extensions.html
docs/en/html/extensions.html
+1
-1
docs/en/html/extraconfig.html
docs/en/html/extraconfig.html
+9
-9
docs/en/html/flags-overview.html
docs/en/html/flags-overview.html
+24
-24
docs/en/html/flags.html
docs/en/html/flags.html
+1
-1
docs/en/html/general-advice.html
docs/en/html/general-advice.html
+1
-1
docs/en/html/gfdl-0.html
docs/en/html/gfdl-0.html
+1
-1
docs/en/html/gfdl-1.html
docs/en/html/gfdl-1.html
+1
-1
docs/en/html/gfdl-10.html
docs/en/html/gfdl-10.html
+1
-1
docs/en/html/gfdl-2.html
docs/en/html/gfdl-2.html
+1
-1
docs/en/html/gfdl-3.html
docs/en/html/gfdl-3.html
+1
-1
docs/en/html/gfdl-4.html
docs/en/html/gfdl-4.html
+1
-1
docs/en/html/gfdl-5.html
docs/en/html/gfdl-5.html
+1
-1
docs/en/html/gfdl-6.html
docs/en/html/gfdl-6.html
+1
-1
docs/en/html/gfdl-7.html
docs/en/html/gfdl-7.html
+1
-1
docs/en/html/gfdl-8.html
docs/en/html/gfdl-8.html
+1
-1
docs/en/html/gfdl-9.html
docs/en/html/gfdl-9.html
+1
-1
docs/en/html/gfdl-howto.html
docs/en/html/gfdl-howto.html
+1
-1
docs/en/html/gfdl.html
docs/en/html/gfdl.html
+1
-1
docs/en/html/glossary.html
docs/en/html/glossary.html
+31
-31
docs/en/html/groups.html
docs/en/html/groups.html
+9
-9
docs/en/html/hintsandtips.html
docs/en/html/hintsandtips.html
+5
-5
docs/en/html/index.html
docs/en/html/index.html
+4
-4
docs/en/html/install-perlmodules-manual.html
docs/en/html/install-perlmodules-manual.html
+1
-1
docs/en/html/installation.html
docs/en/html/installation.html
+27
-27
docs/en/html/installing-bugzilla.html
docs/en/html/installing-bugzilla.html
+1
-1
docs/en/html/integration.html
docs/en/html/integration.html
+1
-1
docs/en/html/keywords.html
docs/en/html/keywords.html
+1
-1
docs/en/html/lifecycle.html
docs/en/html/lifecycle.html
+1
-1
docs/en/html/milestones.html
docs/en/html/milestones.html
+2
-2
docs/en/html/modules-manual-download.html
docs/en/html/modules-manual-download.html
+1
-1
docs/en/html/modules-manual-instructions.html
docs/en/html/modules-manual-instructions.html
+2
-2
docs/en/html/modules-manual-optional.html
docs/en/html/modules-manual-optional.html
+1
-1
docs/en/html/multiple-bz-dbs.html
docs/en/html/multiple-bz-dbs.html
+1
-1
docs/en/html/myaccount.html
docs/en/html/myaccount.html
+4
-4
docs/en/html/newversions.html
docs/en/html/newversions.html
+2
-2
docs/en/html/nonroot.html
docs/en/html/nonroot.html
+17
-17
docs/en/html/os-specific.html
docs/en/html/os-specific.html
+18
-18
docs/en/html/parameters.html
docs/en/html/parameters.html
+32
-32
docs/en/html/paranoid-security.html
docs/en/html/paranoid-security.html
+1
-1
docs/en/html/patches.html
docs/en/html/patches.html
+1
-1
docs/en/html/products.html
docs/en/html/products.html
+9
-9
docs/en/html/query.html
docs/en/html/query.html
+23
-23
docs/en/html/quips.html
docs/en/html/quips.html
+1
-1
docs/en/html/reporting.html
docs/en/html/reporting.html
+6
-6
docs/en/html/sanitycheck.html
docs/en/html/sanitycheck.html
+2
-2
docs/en/html/security-bugzilla.html
docs/en/html/security-bugzilla.html
+1
-1
docs/en/html/security-os.html
docs/en/html/security-os.html
+4
-4
docs/en/html/security-webserver.html
docs/en/html/security-webserver.html
+7
-7
docs/en/html/security.html
docs/en/html/security.html
+1
-1
docs/en/html/timetracking.html
docs/en/html/timetracking.html
+1
-1
docs/en/html/trbl-dbdSponge.html
docs/en/html/trbl-dbdSponge.html
+1
-1
docs/en/html/trbl-index.html
docs/en/html/trbl-index.html
+1
-1
docs/en/html/trbl-passwd-encryption.html
docs/en/html/trbl-passwd-encryption.html
+2
-2
docs/en/html/trbl-perlmodule.html
docs/en/html/trbl-perlmodule.html
+2
-2
docs/en/html/trbl-relogin-everyone.html
docs/en/html/trbl-relogin-everyone.html
+1
-1
docs/en/html/trbl-testserver.html
docs/en/html/trbl-testserver.html
+1
-1
docs/en/html/troubleshooting.html
docs/en/html/troubleshooting.html
+1
-1
docs/en/html/upgrade.html
docs/en/html/upgrade.html
+20
-20
docs/en/html/useradmin.html
docs/en/html/useradmin.html
+15
-15
docs/en/html/userpreferences.html
docs/en/html/userpreferences.html
+14
-14
docs/en/html/using-intro.html
docs/en/html/using-intro.html
+1
-1
docs/en/html/using.html
docs/en/html/using.html
+1
-1
docs/en/html/versions.html
docs/en/html/versions.html
+1
-1
docs/en/html/voting.html
docs/en/html/voting.html
+1
-1
docs/en/html/whining.html
docs/en/html/whining.html
+13
-13
docs/en/pdf/Bugzilla-Guide.pdf
docs/en/pdf/Bugzilla-Guide.pdf
+0
-0
docs/en/txt/Bugzilla-Guide.txt
docs/en/txt/Bugzilla-Guide.txt
+47
-47
docs/en/xml/administration.xml
docs/en/xml/administration.xml
+1
-1
docs/en/xml/bugzilla.ent
docs/en/xml/bugzilla.ent
+11
-10
docs/en/xml/installation.xml
docs/en/xml/installation.xml
+5
-5
docs/en/xml/using.xml
docs/en/xml/using.xml
+11
-11
editwhines.cgi
editwhines.cgi
+2
-0
extensions/Voting/Extension.pm
extensions/Voting/Extension.pm
+79
-81
extensions/Voting/template/en/default/pages/voting/user.html.tmpl
...ns/Voting/template/en/default/pages/voting/user.html.tmpl
+9
-10
importxml.pl
importxml.pl
+1
-1
lib/CGI.pm
lib/CGI.pm
+31
-32
lib/CGI/Apache.pm
lib/CGI/Apache.pm
+2
-1
lib/CGI/Carp.pm
lib/CGI/Carp.pm
+4
-3
lib/CGI/Cookie.pm
lib/CGI/Cookie.pm
+5
-4
lib/CGI/Fast.pm
lib/CGI/Fast.pm
+2
-1
lib/CGI/Pretty.pm
lib/CGI/Pretty.pm
+3
-2
lib/CGI/Push.pm
lib/CGI/Push.pm
+2
-1
lib/CGI/Switch.pm
lib/CGI/Switch.pm
+2
-1
lib/CGI/Util.pm
lib/CGI/Util.pm
+3
-2
lib/Test/Builder.pm
lib/Test/Builder.pm
+2659
-0
lib/Test/Builder/IO/Scalar.pm
lib/Test/Builder/IO/Scalar.pm
+658
-0
lib/Test/Builder/Module.pm
lib/Test/Builder/Module.pm
+173
-0
lib/Test/Builder/Tester.pm
lib/Test/Builder/Tester.pm
+612
-0
lib/Test/Builder/Tester/Color.pm
lib/Test/Builder/Tester/Color.pm
+51
-0
lib/Test/More.pm
lib/Test/More.pm
+1913
-0
lib/Test/Simple.pm
lib/Test/Simple.pm
+214
-0
lib/Test/Tutorial.pod
lib/Test/Tutorial.pod
+610
-0
lib/man/man3/CGI.3pm
lib/man/man3/CGI.3pm
+3971
-0
lib/man/man3/CGI::Apache.3pm
lib/man/man3/CGI::Apache.3pm
+155
-0
lib/man/man3/CGI::Carp.3pm
lib/man/man3/CGI::Carp.3pm
+489
-0
lib/man/man3/CGI::Cookie.3pm
lib/man/man3/CGI::Cookie.3pm
+437
-0
lib/man/man3/CGI::Fast.3pm
lib/man/man3/CGI::Fast.3pm
+284
-0
lib/man/man3/CGI::Pretty.3pm
lib/man/man3/CGI::Pretty.3pm
+242
-0
lib/man/man3/CGI::Push.3pm
lib/man/man3/CGI::Push.3pm
+344
-0
lib/man/man3/CGI::Switch.3pm
lib/man/man3/CGI::Switch.3pm
+155
-0
lib/man/man3/CGI::Util.3pm
lib/man/man3/CGI::Util.3pm
+164
-0
lib/man/man3/Test::Builder.3pm
lib/man/man3/Test::Builder.3pm
+997
-0
lib/man/man3/Test::Builder::IO::Scalar.3pm
lib/man/man3/Test::Builder::IO::Scalar.3pm
+346
-0
lib/man/man3/Test::Builder::Module.3pm
lib/man/man3/Test::Builder::Module.3pm
+245
-0
lib/man/man3/Test::Builder::Tester.3pm
lib/man/man3/Test::Builder::Tester.3pm
+381
-0
lib/man/man3/Test::Builder::Tester::Color.3pm
lib/man/man3/Test::Builder::Tester::Color.3pm
+169
-0
lib/man/man3/Test::More.3pm
lib/man/man3/Test::More.3pm
+1325
-0
lib/man/man3/Test::Simple.3pm
lib/man/man3/Test::Simple.3pm
+320
-0
lib/man/man3/Test::Tutorial.3pm
lib/man/man3/Test::Tutorial.3pm
+757
-0
lib/x86_64-linux-thread-multi/auto/CGI/.packlist
lib/x86_64-linux-thread-multi/auto/CGI/.packlist
+18
-0
lib/x86_64-linux-thread-multi/auto/Test/Simple/.packlist
lib/x86_64-linux-thread-multi/auto/Test/Simple/.packlist
+16
-0
lib/x86_64-linux-thread-multi/perllocal.pod
lib/x86_64-linux-thread-multi/perllocal.pod
+44
-0
process_bug.cgi
process_bug.cgi
+17
-14
request.cgi
request.cgi
+31
-27
showdependencytree.cgi
showdependencytree.cgi
+66
-43
skins/standard/search_form.css
skins/standard/search_form.css
+0
-4
skins/standard/show_bug.css
skins/standard/show_bug.css
+0
-3
t/004template.t
t/004template.t
+10
-6
t/007util.t
t/007util.t
+1
-0
t/Support/Files.pm
t/Support/Files.pm
+4
-4
t/Support/Templates.pm
t/Support/Templates.pm
+12
-4
template/en/default/account/password/set-forgotten-password.html.tmpl
...default/account/password/set-forgotten-password.html.tmpl
+12
-3
template/en/default/account/prefs/account.html.tmpl
template/en/default/account/prefs/account.html.tmpl
+19
-15
template/en/default/account/prefs/email.html.tmpl
template/en/default/account/prefs/email.html.tmpl
+7
-5
template/en/default/admin/flag-type/edit.html.tmpl
template/en/default/admin/flag-type/edit.html.tmpl
+3
-3
template/en/default/admin/params/auth.html.tmpl
template/en/default/admin/params/auth.html.tmpl
+1
-1
template/en/default/admin/params/query.html.tmpl
template/en/default/admin/params/query.html.tmpl
+1
-1
template/en/default/attachment/create.html.tmpl
template/en/default/attachment/create.html.tmpl
+1
-1
template/en/default/attachment/edit.html.tmpl
template/en/default/attachment/edit.html.tmpl
+1
-1
template/en/default/bug/edit.html.tmpl
template/en/default/bug/edit.html.tmpl
+8
-14
template/en/default/bug/field-help.none.tmpl
template/en/default/bug/field-help.none.tmpl
+4
-0
template/en/default/bug/process/verify-new-product.html.tmpl
template/en/default/bug/process/verify-new-product.html.tmpl
+54
-13
template/en/default/bug/show-multiple.html.tmpl
template/en/default/bug/show-multiple.html.tmpl
+1
-1
template/en/default/filterexceptions.pl
template/en/default/filterexceptions.pl
+0
-2
template/en/default/global/code-error.html.tmpl
template/en/default/global/code-error.html.tmpl
+3
-0
template/en/default/global/user-error.html.tmpl
template/en/default/global/user-error.html.tmpl
+15
-15
template/en/default/list/edit-multiple.html.tmpl
template/en/default/list/edit-multiple.html.tmpl
+1
-0
template/en/default/list/list.html.tmpl
template/en/default/list/list.html.tmpl
+6
-6
template/en/default/pages/fields.html.tmpl
template/en/default/pages/fields.html.tmpl
+5
-0
template/en/default/pages/release-notes.html.tmpl
template/en/default/pages/release-notes.html.tmpl
+46
-2
template/en/default/reports/report-table.html.tmpl
template/en/default/reports/report-table.html.tmpl
+24
-14
template/en/default/request/queue.html.tmpl
template/en/default/request/queue.html.tmpl
+5
-7
template/en/default/search/field.html.tmpl
template/en/default/search/field.html.tmpl
+1
-1
No files found.
.bzr/README
View file @
8b0e4c41
This is a Bazaar control directory.
Do not change any files in this directory.
See http://bazaar
-vcs.org
/ for more information about Bazaar.
See http://bazaar
.canonical.com
/ for more information about Bazaar.
.bzr/checkout/dirstate
View file @
8b0e4c41
No preview for this file type
Bugzilla.pm
View file @
8b0e4c41
...
...
@@ -799,10 +799,10 @@ not an arrayref.
=item C<user>
C<undef> if there is no currently logged in user or if the login code has not
yet been run. If an sudo session is in progress, the C<Bugzilla::User>
corresponding to the person who is being impersonated. If no session is in
progress, the current C<Bugzilla::User>.
Default C<Bugzilla::User> object if there is no currently logged in user or
if the login code has not yet been run. If an sudo session is in progress,
the C<Bugzilla::User> corresponding to the person who is being impersonated.
If no session is in
progress, the current C<Bugzilla::User>.
=item C<set_user>
...
...
Bugzilla/Attachment/PatchReader.pm
View file @
8b0e4c41
...
...
@@ -268,8 +268,7 @@ sub setup_template_patch_reader {
&&
Bugzilla
->
params
->
{'
cvsroot_get
'}
&&
!
$vars
->
{'
newid
'};
# Print everything out.
print
$cgi
->
header
(
-
type
=>
'
text/html
',
-
expires
=>
'
+3M
');
print
$cgi
->
header
(
-
type
=>
'
text/html
');
$last_reader
->
sends_data_to
(
new
PatchReader::DiffPrinter::
template
(
$template
,
"
attachment/diff-header.
$format
.tmpl
",
...
...
Bugzilla/Auth/Login/Cookie.pm
View file @
8b0e4c41
...
...
@@ -50,8 +50,8 @@ sub get_login_info {
trick_taint
(
$login_cookie
);
detaint_natural
(
$user_id
);
my
$
is_valid
=
$dbh
->
selectrow_array
('
SELECT
1
my
$
db_cookie
=
$dbh
->
selectrow_array
('
SELECT
cookie
FROM logincookies
WHERE cookie = ?
AND userid = ?
...
...
@@ -59,7 +59,7 @@ sub get_login_info {
undef
,
(
$login_cookie
,
$user_id
,
$ip_addr
));
# If the cookie is valid, return a valid username.
if
(
$is_valid
)
{
if
(
defined
$db_cookie
&&
$login_cookie
eq
$db_cookie
)
{
# If we logged in successfully, then update the lastused
# time on the login cookie
$dbh
->
do
("
UPDATE logincookies SET lastused = NOW()
...
...
Bugzilla/Bug.pm
View file @
8b0e4c41
...
...
@@ -2508,6 +2508,7 @@ sub _set_product {
my
@idlist
=
(
$self
->
id
);
push
(
@idlist
,
map
{
$_
->
id
}
@
{
$params
->
{
other_bugs
}
})
if
$params
->
{
other_bugs
};
@idlist
=
uniq
@idlist
;
# Get the ID of groups which are no longer valid in the new product.
my
$gids
=
$dbh
->
selectcol_arrayref
(
'
SELECT bgm.group_id
...
...
@@ -2522,9 +2523,13 @@ sub _set_product {
.
Bugzilla
->
user
->
groups_as_string
.
'
))
OR gcm.othercontrol != ?) )
',
undef
,
(
@idlist
,
$product
->
id
,
CONTROLMAPNA
,
CONTROLMAPNA
));
$vars
{'
old_groups
'}
=
Bugzilla::
Group
->
new_from_list
(
$gids
);
$vars
{'
old_groups
'}
=
Bugzilla::
Group
->
new_from_list
(
$gids
);
# Did we come here from editing multiple bugs? (affects how we
# show optional group changes)
$vars
{
multiple_bugs
}
=
(
@idlist
>
1
)
?
1
:
0
;
}
if
(
%vars
)
{
$vars
{
product
}
=
$product
;
$vars
{
bug
}
=
$self
;
...
...
@@ -3895,11 +3900,12 @@ sub get_activity {
if
(
$operation
->
{'
who
'}
&&
$who
eq
$operation
->
{'
who
'}
&&
$when
eq
$operation
->
{'
when
'}
&&
$fieldname
eq
$operation
->
{'
fieldname
'}
&&
(
$comment_id
||
0
)
==
(
$operation
->
{'
comment_id
'}
||
0
)
&&
(
$attachid
||
0
)
==
(
$operation
->
{'
attachid
'}
||
0
))
{
my
$old_change
=
pop
@$changes
;
$removed
=
_
join_activity_entries
(
$fieldname
,
$old_change
->
{'
removed
'},
$removed
);
$added
=
_
join_activity_entries
(
$fieldname
,
$old_change
->
{'
added
'},
$added
);
$removed
=
join_activity_entries
(
$fieldname
,
$old_change
->
{'
removed
'},
$removed
);
$added
=
join_activity_entries
(
$fieldname
,
$old_change
->
{'
added
'},
$added
);
}
$operation
->
{'
who
'}
=
$who
;
$operation
->
{'
when
'}
=
$when
;
...
...
@@ -3909,7 +3915,7 @@ sub get_activity {
$change
{'
added
'}
=
$added
;
if
(
$comment_id
)
{
$change
{'
comment
'}
=
Bugzilla::
Comment
->
new
(
$comment_id
);
$
operation
->
{
comment_id
}
=
$
change
{'
comment
'}
=
Bugzilla::
Comment
->
new
(
$comment_id
);
}
push
(
@$changes
,
\
%change
);
...
...
@@ -3924,35 +3930,6 @@ sub get_activity {
return
(
\
@operations
,
$incomplete_data
);
}
sub
_join_activity_entries
{
my
(
$field
,
$current_change
,
$new_change
)
=
@_
;
# We need to insert characters as these were removed by old
# LogActivityEntry code.
return
$new_change
if
$current_change
eq
'';
# Buglists and see_also need the comma restored
if
(
$field
eq
'
dependson
'
||
$field
eq
'
blocked
'
||
$field
eq
'
see_also
')
{
if
(
substr
(
$new_change
,
0
,
1
)
eq
'
,
'
||
substr
(
$new_change
,
0
,
1
)
eq
'
')
{
return
$current_change
.
$new_change
;
}
else
{
return
$current_change
.
'
,
'
.
$new_change
;
}
}
# Assume bug_file_loc contain a single url, don't insert a delimiter
if
(
$field
eq
'
bug_file_loc
')
{
return
$current_change
.
$new_change
;
}
# All other fields get a space
if
(
substr
(
$new_change
,
0
,
1
)
eq
'
')
{
return
$current_change
.
$new_change
;
}
else
{
return
$current_change
.
'
'
.
$new_change
;
}
}
# Update the bugs_activity table to reflect changes made in bugs.
sub
LogActivityEntry
{
my
(
$i
,
$col
,
$removed
,
$added
,
$whoid
,
$timestamp
,
$comment_id
)
=
@_
;
...
...
Bugzilla/BugMail.pm
View file @
8b0e4c41
...
...
@@ -418,7 +418,8 @@ sub _get_diffs {
ON fielddefs.id = bugs_activity.fieldid
WHERE bugs_activity.bug_id = ?
$when_restriction
ORDER BY bugs_activity.bug_when
",
{
Slice
=>
{}},
@args
);
ORDER BY bugs_activity.bug_when, bugs_activity.id
",
{
Slice
=>
{}},
@args
);
foreach
my
$diff
(
@$diffs
)
{
$user_cache
->
{
$diff
->
{
who
}}
||=
new
Bugzilla::
User
(
$diff
->
{
who
});
...
...
@@ -435,7 +436,25 @@ sub _get_diffs {
}
}
return
@$diffs
;
my
@changes
=
();
foreach
my
$diff
(
@$diffs
)
{
# If this is the same field as the previous item, then concatenate
# the data into the same change.
if
(
scalar
(
@changes
)
&&
$diff
->
{
field_name
}
eq
$changes
[
-
1
]
->
{
field_name
}
&&
$diff
->
{
bug_when
}
eq
$changes
[
-
1
]
->
{
bug_when
}
&&
$diff
->
{
who
}
eq
$changes
[
-
1
]
->
{
who
}
&&
(
$diff
->
{
attach_id
}
||
0
)
==
(
$changes
[
-
1
]
->
{
attach_id
}
||
0
)
&&
(
$diff
->
{
comment_id
}
||
0
)
==
(
$changes
[
-
1
]
->
{
comment_id
}
||
0
)
)
{
my
$old_change
=
pop
@changes
;
$diff
->
{
old
}
=
join_activity_entries
(
$diff
->
{
field_name
},
$old_change
->
{
old
},
$diff
->
{
old
});
$diff
->
{
new
}
=
join_activity_entries
(
$diff
->
{
field_name
},
$old_change
->
{
new
},
$diff
->
{
new
});
}
push
@changes
,
$diff
;
}
return
@changes
;
}
sub
_get_new_bugmail_fields
{
...
...
Bugzilla/CGI.pm
View file @
8b0e4c41
...
...
@@ -466,9 +466,9 @@ sub redirect_search_url {
# GET requests that lacked a list_id are always redirected. POST requests
# are only redirected if they're under the CGI_URI_LIMIT though.
my
$
uri_length
=
length
(
$self
->
self_url
()
);
if
(
$self
->
request_method
()
ne
'
POST
'
or
$uri_length
<
CGI_URI_LIMIT
)
{
print
$self
->
redirect
(
-
url
=>
$self
->
self_url
()
);
my
$
self_url
=
$self
->
self_url
(
);
if
(
$self
->
request_method
()
ne
'
POST
'
or
length
(
$self_url
)
<
CGI_URI_LIMIT
)
{
print
$self
->
redirect
(
-
url
=>
$self
_url
);
exit
;
}
}
...
...
@@ -522,7 +522,7 @@ sub url_is_attachment_base {
$regex
=~
s/\\\%bugid\\\%/\\d+/
;
}
$regex
=
"
^
$regex
";
return
(
$self
->
self_
url
=~
$regex
)
?
1
:
0
;
return
(
$self
->
url
=~
$regex
)
?
1
:
0
;
}
##########################
...
...
Bugzilla/Constants.pm
View file @
8b0e4c41
...
...
@@ -182,7 +182,7 @@ use Memoize;
# CONSTANTS
#
# Bugzilla version
use
constant
BUGZILLA_VERSION
=>
"
4.4
";
use
constant
BUGZILLA_VERSION
=>
"
4.4
.1
";
# Location of the remote and local XML files to track new releases.
use
constant
REMOTE_FILE
=>
'
http://updates.bugzilla.org/bugzilla-update.xml
';
...
...
Bugzilla/DB/Schema/Oracle.pm
View file @
8b0e4c41
...
...
@@ -204,6 +204,10 @@ sub get_add_column_ddl {
}
else
{
@sql
=
$self
->
SUPER::
get_add_column_ddl
(
@
_
);
# Create triggers to deal with empty string.
if
(
$definition
->
{
TYPE
}
=~
/varchar|TEXT/i
&&
$definition
->
{
NOTNULL
})
{
push
(
@sql
,
_get_notnull_trigger_ddl
(
$table
,
$column
));
}
}
return
@sql
;
...
...
Bugzilla/Flag.pm
View file @
8b0e4c41
...
...
@@ -399,7 +399,7 @@ sub _validate {
my
$old_requestee_id
=
$obj_flag
->
requestee_id
;
$obj_flag
->
_set_status
(
$params
->
{
status
});
$obj_flag
->
_set_requestee
(
$params
->
{
requestee
},
$attachment
,
$params
->
{
skip_roe
});
$obj_flag
->
_set_requestee
(
$params
->
{
requestee
},
$
bug
,
$
attachment
,
$params
->
{
skip_roe
});
# The requestee ID can be undefined.
my
$requestee_changed
=
(
$obj_flag
->
requestee_id
||
0
)
!=
(
$old_requestee_id
||
0
);
...
...
@@ -625,10 +625,10 @@ sub force_retarget {
###############################
sub
_set_requestee
{
my
(
$self
,
$requestee
,
$attachment
,
$skip_requestee_on_error
)
=
@_
;
my
(
$self
,
$requestee
,
$
bug
,
$
attachment
,
$skip_requestee_on_error
)
=
@_
;
$self
->
{
requestee
}
=
$self
->
_check_requestee
(
$requestee
,
$attachment
,
$skip_requestee_on_error
);
$self
->
_check_requestee
(
$requestee
,
$
bug
,
$
attachment
,
$skip_requestee_on_error
);
$self
->
{
requestee_id
}
=
$self
->
{
requestee
}
?
$self
->
{
requestee
}
->
id
:
undef
;
...
...
@@ -650,7 +650,7 @@ sub _set_status {
}
sub
_check_requestee
{
my
(
$self
,
$requestee
,
$attachment
,
$skip_requestee_on_error
)
=
@_
;
my
(
$self
,
$requestee
,
$
bug
,
$
attachment
,
$skip_requestee_on_error
)
=
@_
;
# If the flag status is not "?", then no requestee can be defined.
return
undef
if
(
$self
->
status
ne
'
?
');
...
...
@@ -677,8 +677,16 @@ sub _check_requestee {
# Note that can_see_bug() will query the DB, so if the bug
# is being added/removed from some groups and these changes
# haven't been committed to the DB yet, they won't be taken
# into account here. In this case, old restrictions matters.
if
(
!
$requestee
->
can_see_bug
(
$self
->
bug_id
))
{
# into account here. In this case, old group restrictions matter.
# However, if the user has just been changed to the assignee,
# qa_contact, or added to the cc list of the bug and the bug
# is cclist_accessible, the requestee is allowed.
if
(
!
$requestee
->
can_see_bug
(
$self
->
bug_id
)
&&
(
!
$bug
->
cclist_accessible
||
!
grep
(
$_
->
id
==
$requestee
->
id
,
@
{
$bug
->
cc_users
})
&&
$requestee
->
id
!=
$bug
->
assigned_to
->
id
&&
(
!
$bug
->
qa_contact
||
$requestee
->
id
!=
$bug
->
qa_contact
->
id
)))
{
if
(
$skip_requestee_on_error
)
{
undef
$requestee
;
}
...
...
Bugzilla/Install/CPAN.pm
View file @
8b0e4c41
...
...
@@ -24,7 +24,6 @@ use Config;
use
CPAN
;
use
Cwd
qw(abs_path)
;
use
File::
Path
qw(rmtree)
;
use
List::
Util
qw(shuffle)
;
# These are required for install-module.pl to be able to install
# all modules properly.
...
...
@@ -86,12 +85,7 @@ use constant CPAN_DEFAULTS => {
unzip
=>
bin_loc
('
unzip
'),
wget
=>
bin_loc
('
wget
'),
urllist
=>
[
shuffle
qw(
http://cpan.pair.com/
http://mirror.hiwaay.net/CPAN/
ftp://ftp.dc.aleron.net/pub/CPAN/
http://mirrors.kernel.org/cpan/
http://mirrors2.kernel.org/cpan/)
],
urllist
=>
['
http://www.cpan.org/
'],
};
sub
check_cpan_requirements
{
...
...
Bugzilla/Install/Requirements.pm
View file @
8b0e4c41
...
...
@@ -272,6 +272,8 @@ sub OPTIONAL_MODULES {
version
=>
0
,
feature
=>
['
auth_radius
'],
},
# XXX - Once we require XMLRPC::Lite 0.717 or higher, we can
# remove SOAP::Lite from the list.
{
package
=>
'
SOAP-Lite
',
module
=>
'
SOAP::Lite
',
...
...
@@ -280,6 +282,14 @@ sub OPTIONAL_MODULES {
version
=>
'
0.712
',
feature
=>
['
xmlrpc
'],
},
# Since SOAP::Lite 1.0, XMLRPC::Lite is no longer included
# and so it must be checked separately.
{
package
=>
'
XMLRPC-Lite
',
module
=>
'
XMLRPC::Lite
',
version
=>
'
0.712
',
feature
=>
['
xmlrpc
'],
},
{
package
=>
'
JSON-RPC
',
module
=>
'
JSON::RPC
',
...
...
@@ -345,7 +355,8 @@ sub OPTIONAL_MODULES {
{
package
=>
'
TheSchwartz
',
module
=>
'
TheSchwartz
',
version
=>
0
,
# 1.07 supports the prioritization of jobs.
version
=>
1.07
,
feature
=>
['
jobqueue
'],
},
{
...
...
@@ -673,8 +684,15 @@ sub have_vers {
Bugzilla::Install::Util::
set_output_encoding
();
# VERSION is provided by UNIVERSAL::, and can be called even if
# the module isn't loaded.
my
$vnum
=
$module
->
VERSION
||
-
1
;
# the module isn't loaded. We eval'uate ->VERSION because it can die
# when the version is not valid (yes, this happens from time to time).
# In that case, we use an uglier method to get the version.
my
$vnum
=
eval
{
$module
->
VERSION
};
if
(
$@
)
{
no
strict
'
refs
';
$vnum
=
$
{"
${module}
::VERSION
"};
}
$vnum
||=
-
1
;
# CGI's versioning scheme went 2.75, 2.751, 2.752, 2.753, 2.76
# That breaks the standard version tests, so we need to manually correct
...
...
Bugzilla/Keyword.pm
View file @
8b0e4c41
...
...
@@ -104,7 +104,7 @@ sub _check_name {
# We only want to validate the non-existence of the name if
# we're creating a new Keyword or actually renaming the keyword.
if
(
!
ref
(
$self
)
||
$self
->
name
ne
$name
)
{
if
(
!
ref
(
$self
)
||
lc
(
$self
->
name
)
ne
lc
(
$name
)
)
{
my
$keyword
=
new
Bugzilla::
Keyword
({
name
=>
$name
});
ThrowUserError
("
keyword_already_exists
",
{
name
=>
$name
})
if
$keyword
;
}
...
...
Bugzilla/Search.pm
View file @
8b0e4c41
...
...
@@ -1477,6 +1477,8 @@ sub _special_parse_chfield {
@fields
=
map
{
$_
eq
'
[Bug creation]
'
?
'
creation_ts
'
:
$_
}
@fields
;
return
undef
unless
(
$date_from
ne
''
||
$date_to
ne
''
||
$value_to
ne
'');
my
$clause
=
new
Bugzilla::Search::
Clause
();
# It is always safe and useful to push delta_ts into the charts
...
...
@@ -1498,44 +1500,21 @@ sub _special_parse_chfield {
$clause
->
add
('
delta_ts
',
'
lessthaneq
',
$date_to
);
}
# Basically, we construct the chart like:
#
# (added_for_field1 = value OR added_for_field2 = value)
# AND (date_field1_changed >= date_from OR date_field2_changed >= date_from)
# AND (date_field1_changed <= date_to OR date_field2_changed <= date_to)
#
# Theoretically, all we *really* would need to do is look for the field id
# in the bugs_activity table, because we've already limited the search
# by delta_ts above, but there's no chart to do that, so we check the
# change date of the fields.
if
(
$value_to
ne
'')
{
my
$value_clause
=
new
Bugzilla::Search::
Clause
('
OR
');
foreach
my
$field
(
@fields
)
{
$value_clause
->
add
(
$field
,
'
changedto
',
$value_to
);
}
$clause
->
add
(
$value_clause
);
}
# chfieldto is supposed to be a relative date or a date of the form
# YYYY-MM-DD, i.e. without the time appended to it. We append the
# time ourselves so that the end date is correctly taken into account.
$date_to
.=
'
23:59:59
'
if
$date_to
=~
/^\d{4}-\d{1,2}-\d{1,2}$/
;
if
(
$date_from
ne
'')
{
my
$from_clause
=
new
Bugzilla::Search::
Clause
('
OR
');
foreach
my
$field
(
@fields
)
{
$from_clause
->
add
(
$field
,
'
changedafter
',
$date_from
);
}
$clause
->
add
(
$from_clause
);
}
if
(
$date_to
ne
'')
{
# chfieldto is supposed to be a relative date or a date of the form
# YYYY-MM-DD, i.e. without the time appended to it. We append the
# time ourselves so that the end date is correctly taken into account.
$date_to
.=
'
23:59:59
'
if
$date_to
=~
/^\d{4}-\d{1,2}-\d{1,2}$/
;
my
$join_clause
=
new
Bugzilla::Search::
Clause
('
OR
');
my
$to_clause
=
new
Bugzilla::Search::
Clause
('
OR
');
foreach
my
$field
(
@fields
)
{
$to_clause
->
add
(
$field
,
'
changedbefore
',
$date_to
);
}
$clause
->
add
(
$to_clause
);
foreach
my
$field
(
@fields
)
{
my
$sub_clause
=
new
Bugzilla::Search::
ClauseGroup
();
$sub_clause
->
add
(
condition
(
$field
,
'
changedto
',
$value_to
))
if
$value_to
ne
'';
$sub_clause
->
add
(
condition
(
$field
,
'
changedafter
',
$date_from
))
if
$date_from
ne
'';
$sub_clause
->
add
(
condition
(
$field
,
'
changedbefore
',
$date_to
))
if
$date_to
ne
'';
$join_clause
->
add
(
$sub_clause
);
}
$clause
->
add
(
$join_clause
);
return
@
{
$clause
->
children
}
?
$clause
:
undef
;
}
...
...
@@ -2659,7 +2638,7 @@ sub _owner_idle_time_greater_less {
"
$ld_table
.who IS NULL AND
$act_table
.who IS NULL
";
}
else
{
$args
->
{
term
}
=
"
$ld_table
.who IS NOT NULL OR
$act_table
.who IS NOT NULL
";
"
(
$ld_table
.who IS NOT NULL OR
$act_table
.who IS NOT NULL)
";
}
}
...
...
@@ -2903,14 +2882,14 @@ sub _anywordsubstr {
my
(
$self
,
$args
)
=
@_
;
my
@terms
=
$self
->
_substring_terms
(
$args
);
$args
->
{
term
}
=
join
("
\n\t
OR
",
@terms
)
;
$args
->
{
term
}
=
@terms
?
'
(
'
.
join
("
\n\t
OR
",
@terms
)
.
'
)
'
:
''
;
}
sub
_allwordssubstr
{
my
(
$self
,
$args
)
=
@_
;
my
@terms
=
$self
->
_substring_terms
(
$args
);
$args
->
{
term
}
=
join
("
\n\t
AND
",
@terms
)
;
$args
->
{
term
}
=
@terms
?
'
(
'
.
join
("
\n\t
AND
",
@terms
)
.
'
)
'
:
''
;
}
sub
_nowordssubstr
{
...
...
@@ -2922,19 +2901,19 @@ sub _nowordssubstr {
sub
_anywords
{
my
(
$self
,
$args
)
=
@_
;
my
@terms
=
$self
->
_word_terms
(
$args
);
# Because _word_terms uses AND, we need to parenthesize its terms
# if there are more than one.
@terms
=
map
("
(
$_
)
",
@terms
)
if
scalar
(
@terms
)
>
1
;
$args
->
{
term
}
=
join
("
\n\t
OR
",
@terms
)
;
$args
->
{
term
}
=
@terms
?
'
(
'
.
join
("
\n\t
OR
",
@terms
)
.
'
)
'
:
''
;
}
sub
_allwords
{
my
(
$self
,
$args
)
=
@_
;
my
@terms
=
$self
->
_word_terms
(
$args
);
$args
->
{
term
}
=
join
("
\n\t
AND
",
@terms
)
;
$args
->
{
term
}
=
@terms
?
'
(
'
.
join
("
\n\t
AND
",
@terms
)
.
'
)
'
:
''
;
}
sub
_nowords
{
...
...
Bugzilla/Search/ClauseGroup.pm
View file @
8b0e4c41
...
...
@@ -65,7 +65,10 @@ sub add {
# Unsupported fields
if
(
grep
{
$_
eq
$field
}
UNSUPPORTED_FIELDS
)
{
ThrowUserError
('
search_grouped_field_invalid
',
{
field
=>
$field
});
# XXX - Hack till bug 916882 is fixed.
my
$operator
=
scalar
(
@args
)
==
3
?
$args
[
1
]
:
$args
[
0
]
->
{
operator
};
ThrowUserError
('
search_grouped_field_invalid
',
{
field
=>
$field
})
unless
((
$field
eq
'
product
'
||
$field
eq
'
component
')
&&
$operator
=~
/^changed/
);
}
$self
->
SUPER::
add
(
@args
);
...
...
Bugzilla/Search/Quicksearch.pm
View file @
8b0e4c41
...
...
@@ -138,7 +138,7 @@ sub quicksearch {
# Retain backslashes and quotes, to know which strings are quoted,
# and which ones are not.
my
@words
=
parse_line
('
\s+
',
1
,
$searchstring
);
my
@words
=
_
parse_line
('
\s+
',
1
,
$searchstring
);
# If parse_line() returns no data, this means strings are badly quoted.
# Rather than trying to guess what the user wanted to do, we throw an error.
scalar
(
@words
)
...
...
@@ -194,7 +194,7 @@ sub quicksearch {
# Loop over all main-level QuickSearch words.
foreach
my
$qsword
(
@qswords
)
{
my
@or_operand
=
parse_line
('
\|
',
1
,
$qsword
);
my
@or_operand
=
_
parse_line
('
\|
',
1
,
$qsword
);
foreach
my
$term
(
@or_operand
)
{
my
$negate
=
substr
(
$term
,
0
,
1
)
eq
'
-
';
if
(
$negate
)
{
...
...
@@ -208,7 +208,7 @@ sub quicksearch {
# Having ruled out the special cases, we may now split
# by comma, which is another legal boolean OR indicator.
# Remove quotes from quoted words, if any.
@words
=
parse_line
('
,
',
0
,
$term
);
@words
=
_
parse_line
('
,
',
0
,
$term
);
foreach
my
$word
(
@words
)
{
if
(
!
_special_field_syntax
(
$word
,
$negate
))
{
_default_quicksearch_word
(
$word
,
$negate
);
...
...
@@ -260,6 +260,27 @@ sub quicksearch {
# Parts of quicksearch() #
##########################
sub
_parse_line
{
my
(
$delim
,
$keep
,
$line
)
=
@_
;
# parse_line always treats ' as a quote character, making it impossible
# to sanely search for contractions. As this behavour isn't
# configurable, we replace ' with a placeholder to hide it from the
# parser.
# only treat ' at the start or end of words as quotes
# it's easier to do this in reverse with regexes
$line
=~
s/(^|\s|:)'/$1\001/g
;
$line
=~
s/'($|\s)/\001$1/g
;
$line
=~
s/\\?'/\000/g
;
$line
=~
tr/\001/'/
;
my
@words
=
parse_line
(
$delim
,
$keep
,
$line
);
foreach
my
$word
(
@words
)
{
$word
=~
tr/\000/'/
;
}
return
@words
;
}
sub
_bug_numbers_only
{
my
$searchstring
=
shift
;
my
$cgi
=
Bugzilla
->
cgi
;
...
...
@@ -363,25 +384,12 @@ sub _handle_special_first_chars {
sub
_handle_field_names
{
my
(
$or_operand
,
$negate
,
$unknownFields
,
$ambiguous_fields
)
=
@_
;
# Flag and requestee shortcut
if
(
$or_operand
=~
/^(?:flag:)?([^\?]+\?)([^\?]*)$/
)
{
my
(
$flagtype
,
$requestee
)
=
(
$
1
,
$
2
);
addChart
('
flagtypes.name
',
'
substring
',
$flagtype
,
$negate
);
if
(
$requestee
)
{
# AND
$chart
++
;
$and
=
$or
=
0
;
addChart
('
requestees.login_name
',
'
substring
',
$requestee
,
$negate
);
}
return
1
;
}
# Generic field1,field2,field3:value1,value2 notation.
# We have to correctly ignore commas and colons in quotes.
my
@field_values
=
parse_line
('
:
',
1
,
$or_operand
);
my
@field_values
=
_
parse_line
('
:
',
1
,
$or_operand
);