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
b996f2f7
Commit
b996f2f7
authored
Jan 24, 2003
by
gerv%gerv.net
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 126955 - Bugzilla should support translated/localized templates. Patch by…
Bug 126955 - Bugzilla should support translated/localized templates. Patch by burnus; r=gerv, a=justdave.
parent
55108104
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
269 additions
and
122 deletions
+269
-122
Template.pm
Bugzilla/Template.pm
+62
-1
checksetup.pl
checksetup.pl
+55
-55
defparams.pl
defparams.pl
+20
-0
004template.t
t/004template.t
+65
-53
005no_tabs.t
t/005no_tabs.t
+5
-4
Templates.pm
t/Support/Templates.pm
+62
-9
No files found.
Bugzilla/Template.pm
View file @
b996f2f7
...
@@ -22,6 +22,8 @@
...
@@ -22,6 +22,8 @@
# Jacob Steenhagen <jake@bugzilla.org>
# Jacob Steenhagen <jake@bugzilla.org>
# Bradley Baetz <bbaetz@student.usyd.edu.au>
# Bradley Baetz <bbaetz@student.usyd.edu.au>
# Christopher Aillon <christopher@aillon.com>
# Christopher Aillon <christopher@aillon.com>
# Tobias Burnus <burnus@net-b.de>
package
Bugzilla::
Template
;
package
Bugzilla::
Template
;
...
@@ -35,6 +37,65 @@ use Date::Format ();
...
@@ -35,6 +37,65 @@ use Date::Format ();
use
base
qw(Template)
;
use
base
qw(Template)
;
my
$template_include_path
;
# Make an ordered list out of a HTTP Accept-Language header see RFC 2616, 14.4
# We ignore '*' and <language-range>;q=0
# For languages with the same priority q the order remains unchanged.
sub
sortAcceptLanguage
{
sub
sortQvalue
{
$b
->
{
'qvalue'
}
<=>
$a
->
{
'qvalue'
}
}
my
$accept_language
=
$_
[
0
];
# clean up string.
$accept_language
=~
s/[^A-Za-z;q=0-9\.\-,]//g
;
my
@qlanguages
;
my
@languages
;
foreach
(
split
/,/
,
$accept_language
)
{
if
(
m/([A-Za-z\-]+)(?:;q=(\d(?:\.\d+)))?/
)
{
my
$lang
=
$1
;
my
$qvalue
=
$2
;
$qvalue
=
1
if
not
defined
$qvalue
;
next
if
$qvalue
==
0
;
$qvalue
=
1
if
$qvalue
>
1
;
push
(
@qlanguages
,
{
'qvalue'
=>
$qvalue
,
'language'
=>
$lang
});
}
}
return
map
(
$_
->
{
'language'
},
(
sort
sortQvalue
@qlanguages
));
}
# Returns the path to the templates based on the Accept-Language
# settings of the user and of the available languages
# If no Accept-Language is present it uses the defined default
sub
getTemplateIncludePath
()
{
# Return cached value if available
if
(
$template_include_path
)
{
return
$template_include_path
;
}
my
$languages
=
trim
(
Param
(
'languages'
));
if
(
not
(
$languages
=~
/,/
))
{
return
$template_include_path
=
[
"template/$languages/custom"
,
"template/$languages/default"
];
}
my
@languages
=
sortAcceptLanguage
(
$languages
);
my
@accept_language
=
sortAcceptLanguage
(
$ENV
{
'HTTP_ACCEPT_LANGUAGE'
}
||
""
);
my
@usedlanguages
;
foreach
my
$lang
(
@accept_language
)
{
# Per RFC 1766 and RFC 2616 any language tag matches also its
# primary tag. That is 'en' (accept lanuage) matches 'en-us',
# 'en-uk' etc. but not the otherway round. (This is unfortunally
# not very clearly stated in those RFC; see comment just over 14.5
# in http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)
if
(
my
@found
=
grep
/^$lang(-.+)?$/i
,
@languages
)
{
push
(
@usedlanguages
,
@found
);
}
}
push
(
@usedlanguages
,
Param
(
'defaultlanguage'
));
return
$template_include_path
=
[
map
((
"template/$_/custom"
,
"template/$_/default"
),
@usedlanguages
)];
}
###############################################################################
###############################################################################
# Templatization Code
# Templatization Code
...
@@ -100,7 +161,7 @@ sub create {
...
@@ -100,7 +161,7 @@ sub create {
return
$class
->
new
({
return
$class
->
new
({
# Colon-separated list of directories containing templates.
# Colon-separated list of directories containing templates.
INCLUDE_PATH
=>
"template/en/custom:template/en/default"
,
INCLUDE_PATH
=>
[
\&
getTemplateIncludePath
]
,
# Remove white-space before template directives (PRE_CHOMP) and at the
# Remove white-space before template directives (PRE_CHOMP) and at the
# beginning and end of templates and template blocks (TRIM) for better
# beginning and end of templates and template blocks (TRIM) for better
...
...
checksetup.pl
View file @
b996f2f7
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
# Zach Lipton <zach@zachlipton.com>
# Zach Lipton <zach@zachlipton.com>
# Jacob Steenhagen <jake@bugzilla.org>
# Jacob Steenhagen <jake@bugzilla.org>
# Bradley Baetz <bbaetz@student.usyd.edu.au>
# Bradley Baetz <bbaetz@student.usyd.edu.au>
# Tobias Burnus <burnus@net-b.de>
#
#
#
#
# Direct any questions on this source code to
# Direct any questions on this source code to
...
@@ -958,82 +959,81 @@ END
...
@@ -958,82 +959,81 @@ END
}
}
}
}
# Search for template directories
# We include the default and custom directories separately to make
# sure we compile all templates
my
@templatepaths
=
();
{
use
File::
Spec
;
opendir
(
DIR
,
"template"
)
||
die
"Can't open 'template': $!"
;
my
@files
=
grep
{
/^[a-z-]+$/i
}
readdir
(
DIR
);
closedir
DIR
;
foreach
my
$dir
(
@files
)
{
next
if
(
$dir
=~
/^CVS$/i
);
my
$path
=
File::
Spec
->
catdir
(
'template'
,
$dir
,
'custom'
);
push
(
@templatepaths
,
$path
)
if
(
-
d
$path
);
$path
=
File::
Spec
->
catdir
(
'template'
,
$dir
,
'default'
);
push
(
@templatepaths
,
$path
)
if
(
-
d
$path
);
}
}
# Precompile stuff. This speeds up initial access (so the template isn't
# Precompile stuff. This speeds up initial access (so the template isn't
# compiled multiple times simulataneously by different servers), and helps
# compiled multiple times simulataneously by different servers), and helps
# to get the permissions right.
# to get the permissions right.
eval
(
"use Template"
);
my
$redir
=
(
$^O
=~
/MSWin32/i
)
?
"NUL"
:
"/dev/null"
;
my
$provider
=
Template::
Provider
->
new
(
{
# Colon-separated list of directories containing templates.
INCLUDE_PATH
=>
"template/en/custom:template/en/default"
,
PRE_CHOMP
=>
1
,
TRIM
=>
1
,
COMPILE_DIR
=>
'data/'
,
# becomes data/template/en/{custom,default}
# These don't actually need to do anything here, just exist
FILTERS
=>
{
strike
=>
sub
{
return
$_
;
}
,
js
=>
sub
{
return
$_
;
},
html_linebreak
=>
sub
{
return
$_
;
},
url_quote
=>
sub
{
return
$_
;
},
xml
=>
sub
{
return
$_
;
},
quoteUrls
=>
sub
{
return
$_
;
},
bug_link
=>
[
sub
{
return
sub
{
return
$_
;
}
},
1
],
csv
=>
sub
{
return
$_
;
},
time
=>
sub
{
return
$_
;
},
},
})
||
die
(
"Could not create Template Provider: "
.
Template::
Provider
->
error
()
.
"\n"
);
sub
compile
{
sub
compile
{
# no_chdir doesn't work on perl 5.005
my
$origDir
=
$
File::Find::
dir
;
my
$name
=
$
File::Find::
name
;
my
$name
=
$
File::Find::
name
;
return
if
(
-
d
$name
);
return
if
(
-
d
$name
);
return
if
(
$name
=~
/\/CVS\//
);
return
if
(
$name
=~
/\/CVS\//
);
return
if
(
$name
!~
/\.tmpl$/
);
return
if
(
$name
!~
/\.tmpl$/
);
$name
=~
s!template/en/default/!!
;
# trim the bit we don't pass to TT
$name
=~
s/\Q$::templatepath\E\///
;
# trim the bit we don't pass to TT
chdir
(
$::baseDir
);
# Do this to avoid actually processing the templates
# Do this to avoid actually processing the templates
my
(
$data
,
$err
)
=
$provider
->
fetch
(
$name
);
my
(
$data
,
$err
)
=
$
::
provider
->
fetch
(
$name
);
die
"Could not compile $name: "
.
$data
.
"\n"
if
$err
;
die
"Could not compile $name: "
.
$data
.
"\n"
if
$err
;
chdir
(
$origDir
);
}
}
eval
(
"use Template"
);
{
{
print
"Precompiling templates ...\n"
unless
$silent
;
print
"Precompiling templates ...\n"
unless
$silent
;
use
File::
Find
;
use
File::
Find
;
use
Cwd
;
$::baseDir
=
cwd
();
# Don't hang on templates which use the CGI library
# Don't hang on templates which use the CGI library
eval
(
"use CGI qw(-no_debug)"
);
eval
(
"use CGI qw(-no_debug)"
);
foreach
$::templatepath
(
@templatepaths
)
{
# Disable warnings which come from running the compiled templates
$::provider
=
Template::
Provider
->
new
(
# This way is OK, because they're all runtime warnings.
{
# The reason we get these warnings here is that none of the required
# Directories containing templates.
# vars will be present.
INCLUDE_PATH
=>
$::templatepath
,
local
(
$^W
)
=
0
;
PRE_CHOMP
=>
1
,
# Traverse the default hierachy. Custom templates will be picked up
TRIM
=>
1
,
# via the INCLUDE_PATH, but we know that bugzilla will only be
# calling stuff which exists in en/default
# becomes data/template/{en, ...}/{custom,default}
# FIXME - if we start doing dynamic INCLUDE_PATH we may have to
COMPILE_DIR
=>
'data/'
,
# recurse all of template/, changing the INCLUDE_PATH each time
# These don't actually need to do anything here, just exist
find
(
\&
compile
,
"template/en/default"
);
FILTERS
=>
{
strike
=>
sub
{
return
$_
;
}
,
js
=>
sub
{
return
$_
;
},
html_linebreak
=>
sub
{
return
$_
;
},
url_quote
=>
sub
{
return
$_
;
},
xml
=>
sub
{
return
$_
;
},
quoteUrls
=>
sub
{
return
$_
;
},
bug_link
=>
[
sub
{
return
sub
{
return
$_
;
}
},
1
],
csv
=>
sub
{
return
$_
;
},
time
=>
sub
{
return
$_
;
},
},
})
||
die
(
"Could not create Template Provider: "
.
Template::
Provider
->
error
()
.
"\n"
);
# Traverse the template hierachy.
find
({
wanted
=>
\&
compile
,
no_chdir
=>
1
},
$::templatepath
);
}
}
}
}
}
...
...
defparams.pl
View file @
b996f2f7
...
@@ -202,6 +202,26 @@ sub check_netmask {
...
@@ -202,6 +202,26 @@ sub check_netmask {
},
},
{
{
name
=>
'languages'
,
desc
=>
'A comma-separated list of RFC 1766 language tags. These '
.
'identify the languages in which you wish Bugzilla output '
.
'to be displayed. Note that you must install the appropriate '
.
'language pack before adding a language to this Param. The '
.
'language used is the one in this list with the highest '
.
'q-value in the user\'s Accept-Language header.'
,
type
=>
't'
,
default
=>
'en'
},
{
name
=>
'defaultlanguage'
,
desc
=>
'The UI language Bugzilla falls back on if no suitable '
.
'language is found in the user\'s Accept-Language header.'
,
type
=>
't'
,
default
=>
'en'
},
{
name
=>
'cookiepath'
,
name
=>
'cookiepath'
,
desc
=>
'Path, relative to your web document root, to which to restrict '
.
desc
=>
'Path, relative to your web document root, to which to restrict '
.
'Bugzilla cookies. Normally this is the URI portion of your URL '
.
'Bugzilla cookies. Normally this is the URI portion of your URL '
.
...
...
t/004template.t
View file @
b996f2f7
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
# Contributor(s): Jacob Steenhagen <jake@bugzilla.org>
# Contributor(s): Jacob Steenhagen <jake@bugzilla.org>
# Zach Lipton <zach@zachlipton.com>
# Zach Lipton <zach@zachlipton.com>
# David D. Kilzer <ddkilzer@kilzer.net>
# David D. Kilzer <ddkilzer@kilzer.net>
# Tobias Burnus <burnus@net-b.de>
#
#
#################
#################
...
@@ -37,8 +38,7 @@ use CGI qw(-no_debug);
...
@@ -37,8 +38,7 @@ use CGI qw(-no_debug);
use
File::
Spec
0.82
;
use
File::
Spec
0.82
;
use
Template
;
use
Template
;
use
Test::
More
tests
=>
(
scalar
(
@
Support::Templates::
referenced_files
)
use
Test::
More
tests
=>
(
scalar
(
@referenced_files
)
+
$num_actual_files
*
2
);
+
scalar
(
@
Support::Templates::
actual_files
)
*
2
);
# Capture the TESTOUT from Test::More or Test::Builder for printing errors.
# Capture the TESTOUT from Test::More or Test::Builder for printing errors.
# This will handle verbosity for us automatically.
# This will handle verbosity for us automatically.
...
@@ -54,72 +54,84 @@ my $fh;
...
@@ -54,72 +54,84 @@ my $fh;
}
}
}
}
my
$include_path
=
$
Support::Templates::
include_path
;
# Checks whether one of the passed files exists
sub
existOnce
{
foreach
my
$file
(
@_
)
{
return
$file
if
-
e
$file
;
}
return
0
;
}
# Check to make sure all templates that are referenced in
# Check to make sure all templates that are referenced in
# Bugzilla exist in the proper place.
# Bugzilla exist in the proper place.
foreach
my
$file
(
@
Support::Templates::
referenced_files
)
{
foreach
my
$lang
(
@languages
)
{
my
$path
=
File::
Spec
->
catfile
(
$include_path
,
$file
);
foreach
my
$file
(
@referenced_files
)
{
if
(
-
e
$path
)
{
my
@path
=
map
(
File::
Spec
->
catfile
(
$_
,
$file
),
ok
(
1
,
"$path exists"
);
split
(
':'
,
$include_path
{
$lang
}));
}
else
{
if
(
my
$path
=
existOnce
(
@path
))
{
ok
(
0
,
"$path does not exist --ERROR"
);
ok
(
1
,
"$path exists"
);
}
else
{
ok
(
0
,
"$file cannot be located --ERROR"
);
print
$fh
"Looked in:\n "
.
join
(
"\n "
,
@path
);
}
}
}
}
}
# Processes all the templates to make sure they have good syntax
foreach
my
$include_path
(
@include_paths
)
{
my
$provider
=
Template::
Provider
->
new
(
# Processes all the templates to make sure they have good syntax
{
my
$provider
=
Template::
Provider
->
new
(
INCLUDE_PATH
=>
$include_path
,
# Need to define filters used in the codebase, they don't
# actually have to function in this test, just be defined.
# See globals.pl for the actual codebase definitions.
FILTERS
=>
{
{
html_linebreak
=>
sub
{
return
$_
;
},
INCLUDE_PATH
=>
$include_path
,
js
=>
sub
{
return
$_
}
,
# Need to define filters used in the codebase, they don't
strike
=>
sub
{
return
$_
}
,
# actually have to function in this test, just be defined.
url_quote
=>
sub
{
return
$_
}
,
# See globals.pl for the actual codebase definitions.
xml
=>
sub
{
return
$_
}
,
FILTERS
=>
quoteUrls
=>
sub
{
return
$_
}
,
{
bug_link
=>
[
sub
{
return
sub
{
return
$_
;
}
},
1
]
,
html_linebreak
=>
sub
{
return
$_
;
},
csv
=>
sub
{
return
$_
}
,
js
=>
sub
{
return
$_
}
,
time
=>
sub
{
return
$_
}
,
strike
=>
sub
{
return
$_
}
,
},
url_quote
=>
sub
{
return
$_
}
,
}
xml
=>
sub
{
return
$_
}
,
);
quoteUrls
=>
sub
{
return
$_
}
,
bug_link
=>
[
sub
{
return
sub
{
return
$_
;
}
},
1
]
,
foreach
my
$file
(
@
Support::Templates::
actual_files
)
{
csv
=>
sub
{
return
$_
}
,
my
$path
=
File::
Spec
->
catfile
(
$include_path
,
$file
);
time
=>
sub
{
return
$_
}
,
if
(
-
e
$path
)
{
},
my
(
$data
,
$err
)
=
$provider
->
fetch
(
$file
);
}
);
if
(
!
$err
)
{
ok
(
1
,
"$file syntax ok"
);
foreach
my
$file
(
@
{
$actual_files
{
$include_path
}})
{
my
$path
=
File::
Spec
->
catfile
(
$include_path
,
$file
);
if
(
-
e
$path
)
{
my
(
$data
,
$err
)
=
$provider
->
fetch
(
$file
);
if
(
!
$err
)
{
ok
(
1
,
"$file syntax ok"
);
}
else
{
ok
(
0
,
"$file has bad syntax --ERROR"
);
print
$fh
$data
.
"\n"
;
}
}
}
else
{
else
{
ok
(
0
,
"$file has bad syntax --ERROR"
);
ok
(
1
,
"$path doesn't exist, skipping test"
);
print
$fh
$data
.
"\n"
;
}
}
}
}
else
{
ok
(
1
,
"$path doesn't exist, skipping test"
);
}
}
# check to see that all templates have a version string:
# check to see that all templates have a version string:
foreach
my
$file
(
@
Support::Templates::
actual_files
)
{
foreach
my
$file
(
@
{
$actual_files
{
$include_path
}})
{
my
$path
=
File::
Spec
->
catfile
(
$include_path
,
$file
);
my
$path
=
File::
Spec
->
catfile
(
$include_path
,
$file
);
open
(
TMPL
,
$path
);
open
(
TMPL
,
$path
);
my
$firstline
=
<
TMPL
>
;
my
$firstline
=
<
TMPL
>
;
if
(
$firstline
=~
/\d+\.\d+\@[\w\.-]+/
)
{
if
(
$firstline
=~
/\d+\.\d+\@[\w\.-]+/
)
{
ok
(
1
,
"$file has a version string"
);
ok
(
1
,
"$file has a version string"
);
}
else
{
}
else
{
ok
(
0
,
"$file does not have a version string --ERROR"
);
ok
(
0
,
"$file does not have a version string --ERROR"
);
}
close
(
TMPL
);
}
}
close
(
TMPL
);
}
}
exit
0
;
exit
0
;
t/005no_tabs.t
View file @
b996f2f7
...
@@ -34,12 +34,13 @@ use Support::Templates;
...
@@ -34,12 +34,13 @@ use Support::Templates;
use
File::
Spec
0.82
;
use
File::
Spec
0.82
;
use
Test::
More
tests
=>
(
scalar
(
@
Support::Files::
testitems
)
use
Test::
More
tests
=>
(
scalar
(
@
Support::Files::
testitems
)
+
scalar
(
@
Support::Templates::
actual_files
)
);
+
$
Support::Templates::
num_actual_files
);
my
@testitems
=
@
Support::Files::
testitems
;
my
@testitems
=
@
Support::Files::
testitems
;
my
@templates
=
map
(
File::
Spec
->
catfile
(
$
Support::Templates::
include_path
,
$_
),
for
my
$path
(
@
Support::Templates::
include_paths
)
{
@
Support::Templates::
actual_files
);
push
(
@testitems
,
map
(
File::
Spec
->
catfile
(
$path
,
$_
),
push
(
@testitems
,
@templates
);
Support::Templates::
find_actual_files
(
$path
)));
}
foreach
my
$file
(
@testitems
)
{
foreach
my
$file
(
@testitems
)
{
open
(
FILE
,
"$file"
);
open
(
FILE
,
"$file"
);
...
...
t/Support/Templates.pm
View file @
b996f2f7
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#
#
# Contributor(s): Jacob Steenhagen <jake@bugzilla.org>
# Contributor(s): Jacob Steenhagen <jake@bugzilla.org>
# David D. Kilzer <ddkilzer@kilzer.net>
# David D. Kilzer <ddkilzer@kilzer.net>
# Tobias Burnus <burnus@net-b.de>
#
#
package
Support::
Templates
;
package
Support::
Templates
;
...
@@ -26,18 +27,60 @@ package Support::Templates;
...
@@ -26,18 +27,60 @@ package Support::Templates;
use
strict
;
use
strict
;
use
lib
't'
;
use
lib
't'
;
use
vars
qw($include_path @referenced_files @actual_files)
;
use
base
qw(Exporter)
;
@
Support::Templates::
EXPORT
=
qw(@languages @include_paths %include_path @referenced_files
%actual_files $num_actual_files)
;
use
vars
qw(@languages @include_paths %include_path @referenced_files
%actual_files $num_actual_files)
;
use
Support::
Files
;
use
Support::
Files
;
use
File::
Find
;
use
File::
Find
;
use
File::
Spec
0.82
;
use
File::
Spec
0.82
;
# Note that $include_path is assumed to only contain ONE path, not
# The available template languages
# a list of colon-separated paths.
@languages
=
();
$include_path
=
File::
Spec
->
catdir
(
'template'
,
'en'
,
'default'
);
# The colon separated includepath per language
%
include_path
=
();
# All include paths
@include_paths
=
();
# Files which are referenced in the cgi files
@referenced_files
=
();
@referenced_files
=
();
@actual_files
=
();
# All files sorted by include_path
%
actual_files
=
();
# total number of actual_files
$num_actual_files
=
0
;
# Scan for the template available languages and include paths
{
opendir
(
DIR
,
"template"
)
||
die
"Can't open 'template': $!"
;
my
@files
=
grep
{
/^[a-z-]+$/i
}
readdir
(
DIR
);
closedir
DIR
;
foreach
my
$langdir
(
@files
)
{
next
if
(
$langdir
=~
/^CVS$/i
);
my
$path
=
File::
Spec
->
catdir
(
'template'
,
$langdir
,
'custom'
);
my
@dirs
=
();
push
(
@dirs
,
$path
)
if
(
-
d
$path
);
$path
=
File::
Spec
->
catdir
(
'template'
,
$langdir
,
'default'
);
push
(
@dirs
,
$path
)
if
(
-
d
$path
);
next
if
(
scalar
(
@dirs
)
==
0
);
push
(
@languages
,
$langdir
);
push
(
@include_paths
,
@dirs
);
$include_path
{
$langdir
}
=
join
(
":"
,
@dirs
);
}
}
my
@files
;
# Local subroutine used with File::Find
# Local subroutine used with File::Find
sub
find_templates
{
sub
find_templates
{
...
@@ -59,13 +102,23 @@ sub find_templates {
...
@@ -59,13 +102,23 @@ sub find_templates {
$filename
=
$_
;
$filename
=
$_
;
}
}
push
(
@
actual_
files
,
$filename
);
push
(
@files
,
$filename
);
}
}
}
}
# Scan the template include path for templates then put them in
# Scan the given template include path for templates
# in the @actual_files array to be used by various tests.
sub
find_actual_files
{
map
(
find
(
\&
find_templates
,
$_
),
split
(
':'
,
$include_path
));
my
$include_path
=
$_
[
0
];
@files
=
();
find
(
\&
find_templates
,
$include_path
);
return
@files
;
}
foreach
my
$include_path
(
@include_paths
)
{
$actual_files
{
$include_path
}
=
[
find_actual_files
(
$include_path
)
];
$num_actual_files
+=
scalar
(
@
{
$actual_files
{
$include_path
}});
}
# Scan Bugzilla's perl code looking for templates used and put them
# Scan Bugzilla's perl code looking for templates used and put them
# in the @referenced_files array to be used by the 004template.t test.
# in the @referenced_files array to be used by the 004template.t test.
...
...
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