Compare commits
76 Commits
feature.is
...
feature.co
Author | SHA1 | Date | |
---|---|---|---|
|
945429abf0 | ||
|
a016bcb51b | ||
|
f2b1ce795c | ||
|
3a8c56acc4 | ||
|
7b2552f940 | ||
|
324b202215 | ||
|
2c2da6082a | ||
|
dd3fbbd7e4 | ||
|
9bbcd571ec | ||
|
bbc185bf3b | ||
|
d1bcdcda20 | ||
|
6d55602ef3 | ||
|
6e7c9f7c4b | ||
|
5427aab456 | ||
|
4879d64989 | ||
|
dab8ea63fc | ||
|
b03d7a04a0 | ||
|
ef5b93e3f7 | ||
|
69ae1c08ef | ||
|
8e4f828cc6 | ||
|
c4f92f4569 | ||
|
c4d2b99656 | ||
|
d4fe88adab | ||
|
69d0e8313a | ||
|
11a234e135 | ||
|
2f30e4e2f6 | ||
|
118ca9f11f | ||
|
24fc41ee0d | ||
|
c00dbac5e0 | ||
|
d7857c5126 | ||
|
ac6be0d3c0 | ||
|
7ff6f09f67 | ||
|
00b576c5a3 | ||
|
2a33510c96 | ||
|
d1f79d906d | ||
|
aa043f14ac | ||
|
638b28399e | ||
|
1d86f036a3 | ||
|
2f6e0f0a22 | ||
|
1b1b00a10c | ||
|
8693418d39 | ||
|
8ff15368ce | ||
|
32cde534bd | ||
|
c0e26133bd | ||
|
592c2ff9ff | ||
|
30efd0a2db | ||
|
20c3f14cc8 | ||
|
80313c88c8 | ||
|
cab1c09ffc | ||
|
c421919092 | ||
|
d350876bc1 | ||
|
de09c8af56 | ||
|
998f4576fe | ||
|
06c57f7da6 | ||
|
4d5418a601 | ||
|
95cc7f627f | ||
|
2aab4eea3b | ||
|
5bbff9f5a6 | ||
|
b5fcf1636a | ||
|
13012be5d7 | ||
|
ca2ef814fb | ||
|
b9407f6aee | ||
|
d079838818 | ||
|
81ce4688df | ||
|
ee33cc1832 | ||
|
82bb18fe10 | ||
|
8987ca7db6 | ||
|
8066fd8982 | ||
|
a96d8c05a7 | ||
|
4238a5dd50 | ||
|
94da55d15e | ||
|
09979b8551 | ||
|
5b82efa0be | ||
|
8502a36481 | ||
|
bbf1a1882a | ||
|
5322cdf609 |
1
AUTHORS
1
AUTHORS
@@ -12,6 +12,7 @@ Much appreciated contributors (in alphabetical order):
|
|||||||
Brian Armstrong <brianar>
|
Brian Armstrong <brianar>
|
||||||
Charles Melbye <charlie@yourwiki.net>
|
Charles Melbye <charlie@yourwiki.net>
|
||||||
Ciaran Gultnieks <ciaran@ciarang.com>
|
Ciaran Gultnieks <ciaran@ciarang.com>
|
||||||
|
Daniel Steudler <steudlerdaniel@gmail.com>
|
||||||
David Feeney <davidf>
|
David Feeney <davidf>
|
||||||
Denis Kot <denis.kot@gmail.com> - Russian translation
|
Denis Kot <denis.kot@gmail.com> - Russian translation
|
||||||
Dmitry Dulepov <dmitryd>
|
Dmitry Dulepov <dmitryd>
|
||||||
|
40
NEWS.mdtext
40
NEWS.mdtext
@@ -7,17 +7,55 @@ or newer to properly run this version of Indefero!
|
|||||||
|
|
||||||
- Indefero's issue tracker can now bi-directionally link issues with variable, configurable
|
- Indefero's issue tracker can now bi-directionally link issues with variable, configurable
|
||||||
terms, such as "is related to", "is blocked by" or "is duplicated by" (issue 638)
|
terms, such as "is related to", "is blocked by" or "is duplicated by" (issue 638)
|
||||||
|
- Mercurial source views now show parent revisions (if any) and detailed change information
|
||||||
|
- Subversion source views now show detailed change information (issue 622)
|
||||||
|
- File download URLs now contain the file name rather than the upload id; old links still work though (issues 559 and 686)
|
||||||
|
- Display monotone file and directory attributes in the tree and file view
|
||||||
|
(needs a monotone with an interface version of 13.1 or newer)
|
||||||
|
- The context area is now kept in view when a page scrolls down several pages
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
|
||||||
|
- The SVN interface acts more robust if an underlying repository has been restructured (issue 364)
|
||||||
- monotone zip archive entries now all carry the revision date as mtime (issue 645)
|
- monotone zip archive entries now all carry the revision date as mtime (issue 645)
|
||||||
- Timeline only displays filter options for items a user has actually access to (issue 655)
|
- Timeline only displays filter options for items a user has actually access to (issue 655)
|
||||||
- Fix the self-link of the RSS feed (issue 666)
|
- The log, tags and branches parsers for Mercurial are more robust now (issue 663)
|
||||||
|
- Fix SSH public key parsing issues and improve the check for existing, uploaded keys (issue 679)
|
||||||
|
- Diff views now show empty context lines for git and hg again (issue 688)
|
||||||
|
- Let the SVN command line client not store the login credentials we give him as arguments
|
||||||
|
- The usher section in the forge administration no longer displays a bogus
|
||||||
|
server enty in case no monotone server is configured in the connected
|
||||||
|
usher instance
|
||||||
|
- Prevent a timeout from popping up when Usher is restarted (issue 695)
|
||||||
|
- The SyncMonotone plugin now cleans up partial artifacts it created during the addition of
|
||||||
|
a new project or monotone key, in case an error popped up in the middle (issue 697)
|
||||||
|
- Better error detection and reporting in the SyncMonotone plugin
|
||||||
|
ATTENTION: This needs Pluf 46b7f251 or newer!
|
||||||
|
- Fix the branch links users of the Subversion frontend get when they enter a wrong revision
|
||||||
|
and only display this list if there are any branches available for all SCMs
|
||||||
|
- If git's author name is not encoded in an UTF-8 compatible encoding, skip the author lookup,
|
||||||
|
as we have no information what the author string is actually encoded in
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
|
- The documentation on the setup of the monotone plugin has been improved.
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
|
|
||||||
|
# InDefero 1.1.2 - Thu May 26 07:42:25 2011 UTC
|
||||||
|
|
||||||
|
## Bugfixes
|
||||||
|
|
||||||
|
- Fix tags extraction from git repository (issue 675)
|
||||||
|
- Fix SSH validation method (issue 671)
|
||||||
|
- Fix malformed URL in the RSS (issue 666)
|
||||||
|
- Fix validateRevision call for Mercurial Scm (issue 657)
|
||||||
|
|
||||||
|
## Translations
|
||||||
|
|
||||||
|
- Missing word in French translation (issue 672)
|
||||||
|
- Update Spanish translation
|
||||||
|
|
||||||
# InDefero 1.1.1 - Mon Mar 28 15:52 2011 UTC
|
# InDefero 1.1.1 - Mon Mar 28 15:52 2011 UTC
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
@@ -25,7 +25,7 @@ If you install monotone from source (<http://monotone.ca/downloads.php>),
|
|||||||
please follow the `INSTALL` document which comes with the software.
|
please follow the `INSTALL` document which comes with the software.
|
||||||
It contains detailed instructions, including all needed dependencies.
|
It contains detailed instructions, including all needed dependencies.
|
||||||
|
|
||||||
## Choose your indefero setup
|
## Choose your indefero (IDF) setup
|
||||||
|
|
||||||
The monotone plugin can be used in several different ways:
|
The monotone plugin can be used in several different ways:
|
||||||
|
|
||||||
@@ -112,14 +112,40 @@ The monotone plugin can be used in several different ways:
|
|||||||
^D
|
^D
|
||||||
$ chmod 600 usher.conf
|
$ chmod 600 usher.conf
|
||||||
|
|
||||||
|
**ATTENTION:** Do _not_ configure a default monotone server key in `usher.conf`,
|
||||||
|
otherwise the individual server key that IDF creates for each project is
|
||||||
|
not used and this could cause problems.
|
||||||
|
|
||||||
Your indefero www user needs later write access to `usher.conf` and
|
Your indefero www user needs later write access to `usher.conf` and
|
||||||
`projects/`. There are two ways of setting this up:
|
`projects/`. There are two ways of setting this up:
|
||||||
|
|
||||||
* Make the usher user the web user, for example via Apache's `suexec`
|
* Make the usher user the web user, for example via Apache's `suexec`.
|
||||||
* Use acls, like this:
|
This is however a bit clumsy.
|
||||||
|
* Preferred: Use Access Control Lists (ACLs), like this:
|
||||||
|
|
||||||
|
#
|
||||||
|
# Linux
|
||||||
|
#
|
||||||
$ setfacl -m u:www:rw usher.conf
|
$ setfacl -m u:www:rw usher.conf
|
||||||
$ setfacl -m d:u:www:rwx projects/
|
$ setfacl -m d:u:www:rwx projects/
|
||||||
|
$ setfacl -m d:u:usher:rwx projects/
|
||||||
|
#
|
||||||
|
# FreeBSD
|
||||||
|
#
|
||||||
|
$ setfacl -m user:www:rw::allow usher.conf
|
||||||
|
$ setfacl -m user:www:rwxp:fd:allow projects/
|
||||||
|
$ setfacl -m user:usher:rwxp:fd:allow projects/
|
||||||
|
#
|
||||||
|
# Mac OS X
|
||||||
|
#
|
||||||
|
chmod +a '_www allow read,write' usher.conf
|
||||||
|
chmod +a '_www allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' projects/
|
||||||
|
chmod +a 'usher allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' projects/
|
||||||
|
|
||||||
|
In each example's last line, `usher` is the user which is executing
|
||||||
|
the usher instance. **It is very important to add this line, otherwise
|
||||||
|
usher won't be able to read and write into the initial file system
|
||||||
|
setup IDF creates!**
|
||||||
|
|
||||||
5. Wrap a daemonizer around usher, for example supervise from daemontools
|
5. Wrap a daemonizer around usher, for example supervise from daemontools
|
||||||
(<http://cr.yp.to/damontools.html>):
|
(<http://cr.yp.to/damontools.html>):
|
||||||
|
@@ -101,7 +101,7 @@ class IDF_Diff
|
|||||||
$files[$current_file]['chunks'][] = array();
|
$files[$current_file]['chunks'][] = array();
|
||||||
|
|
||||||
while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) {
|
while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) {
|
||||||
$linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : ' ';
|
$linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : false;
|
||||||
switch ($linetype) {
|
switch ($linetype) {
|
||||||
case ' ':
|
case ' ':
|
||||||
$files[$current_file]['chunks'][$current_chunk][] =
|
$files[$current_file]['chunks'][$current_chunk][] =
|
||||||
|
@@ -94,7 +94,7 @@ duplicates, is duplicated by';
|
|||||||
{
|
{
|
||||||
$this->fields['labels_issue_template'] = new Pluf_Form_Field_Varchar(
|
$this->fields['labels_issue_template'] = new Pluf_Form_Field_Varchar(
|
||||||
array('required' => false,
|
array('required' => false,
|
||||||
'label' => __('Define an issue template to hint to the reporter to provide certain information'),
|
'label' => __('Define an issue template to hint the reporter to provide certain information'),
|
||||||
'initial' => self::init_template,
|
'initial' => self::init_template,
|
||||||
'widget_attrs' => array('rows' => 7,
|
'widget_attrs' => array('rows' => 7,
|
||||||
'cols' => 75),
|
'cols' => 75),
|
||||||
|
@@ -317,8 +317,15 @@ class IDF_Form_UserAccount extends Pluf_Form
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('#^ssh\-[a-z]{3}\s\S+(\s\S+)?$#', $key)) {
|
$keysearch = '';
|
||||||
$key = str_replace(array("\n", "\r"), '', $key);
|
if (preg_match('#^(ssh\-(?:dss|rsa)\s+\S+)(.*)#', $key, $m)) {
|
||||||
|
$basekey = preg_replace('/\s+/', ' ', $m[1]);
|
||||||
|
$comment = trim(preg_replace('/[\r\n]/', ' ', $m[2]));
|
||||||
|
|
||||||
|
$keysearch = $basekey.'%';
|
||||||
|
$key = $basekey;
|
||||||
|
if (!empty($comment))
|
||||||
|
$key .= ' '.$comment;
|
||||||
|
|
||||||
if (Pluf::f('idf_strong_key_check', false)) {
|
if (Pluf::f('idf_strong_key_check', false)) {
|
||||||
|
|
||||||
@@ -337,7 +344,9 @@ class IDF_Form_UserAccount extends Pluf_Form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (preg_match('#^\[pubkey [^\]]+\]\s*\S+\s*\[end\]$#', $key)) {
|
else if (preg_match('#^\[pubkey [^\]]+\]\s*(\S+)\s*\[end\]$#', $key, $m)) {
|
||||||
|
$keysearch = '%'.$m[1].'%';
|
||||||
|
|
||||||
if (Pluf::f('idf_strong_key_check', false)) {
|
if (Pluf::f('idf_strong_key_check', false)) {
|
||||||
|
|
||||||
// if monotone can read it, it should be valid
|
// if monotone can read it, it should be valid
|
||||||
@@ -367,7 +376,7 @@ class IDF_Form_UserAccount extends Pluf_Form
|
|||||||
if ($user) {
|
if ($user) {
|
||||||
$ruser = Pluf::factory('Pluf_User', $user);
|
$ruser = Pluf::factory('Pluf_User', $user);
|
||||||
if ($ruser->id > 0) {
|
if ($ruser->id > 0) {
|
||||||
$sql = new Pluf_SQL('content=%s', array($key));
|
$sql = new Pluf_SQL('content LIKE %s AND user=%s', array($keysearch, $ruser->id));
|
||||||
$keys = Pluf::factory('IDF_Key')->getList(array('filter' => $sql->gen()));
|
$keys = Pluf::factory('IDF_Key')->getList(array('filter' => $sql->gen()));
|
||||||
if (count($keys) > 0) {
|
if (count($keys) > 0) {
|
||||||
throw new Pluf_Form_Invalid(
|
throw new Pluf_Form_Invalid(
|
||||||
|
@@ -80,7 +80,7 @@ class IDF_Key extends Pluf_Model
|
|||||||
if (preg_match('#^\[pubkey ([^\]]+)\]\s*(\S+)\s*\[end\]$#', $this->content, $m)) {
|
if (preg_match('#^\[pubkey ([^\]]+)\]\s*(\S+)\s*\[end\]$#', $this->content, $m)) {
|
||||||
return array('mtn', $m[1], $m[2]);
|
return array('mtn', $m[1], $m[2]);
|
||||||
}
|
}
|
||||||
else if (preg_match('#^ssh\-[a-z]{3}\s(\S+)(?:\s(\S*))?$#', $this->content, $m)) {
|
else if (preg_match('#^ssh\-(?:dss|rsa)\s(\S+)(?:\s(.*))?$#', $this->content, $m)) {
|
||||||
if (!isset($m[2])) {
|
if (!isset($m[2])) {
|
||||||
$m[2] = "";
|
$m[2] = "";
|
||||||
}
|
}
|
||||||
|
63
src/IDF/Migrations/18DownloadMD5.php
Normal file
63
src/IDF/Migrations/18DownloadMD5.php
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# This file is part of InDefero, an open source project management application.
|
||||||
|
# Copyright (C) 2008-2011 Céondo Ltd and contributors.
|
||||||
|
#
|
||||||
|
# InDefero is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# InDefero is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the md5 column for the download model.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function IDF_Migrations_18DownloadMD5_up($params=null)
|
||||||
|
{
|
||||||
|
// Add the row
|
||||||
|
$table = Pluf::factory('IDF_Upload')->getSqlTable();
|
||||||
|
$sql = array();
|
||||||
|
$sql['PostgreSQL'] = 'ALTER TABLE '.$table.' ADD COLUMN "md5" VARCHAR(32) DEFAULT \'\'';
|
||||||
|
$sql['MySQL'] = 'ALTER TABLE '.$table.' ADD COLUMN `md5` VARCHAR(32) DEFAULT \'\'';
|
||||||
|
$db = Pluf::db();
|
||||||
|
$engine = Pluf::f('db_engine');
|
||||||
|
if (!isset($sql[$engine])) {
|
||||||
|
throw new Exception('SQLite complex migration not supported.');
|
||||||
|
}
|
||||||
|
$db->execute($sql[$engine]);
|
||||||
|
|
||||||
|
// Process md5 of already uploaded file
|
||||||
|
$files = Pluf::factory('IDF_Upload')->getList();
|
||||||
|
foreach ($files as $f) {
|
||||||
|
$f->md5 = md5_file (Pluf::f('upload_path') . '/' . $f->get_project()->shortname . '/files/' . $f->file);
|
||||||
|
$f->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function IDF_Migrations_18DownloadMD5_down($params=null)
|
||||||
|
{
|
||||||
|
// Remove the row
|
||||||
|
$table = Pluf::factory('IDF_Upload')->getSqlTable();
|
||||||
|
$sql = array();
|
||||||
|
$sql['PostgreSQL'] = 'ALTER TABLE '.$table.' DROP COLUMN "md5"';
|
||||||
|
$sql['MySQL'] = 'ALTER TABLE '.$table.' DROP COLUMN `md5`';
|
||||||
|
$db = Pluf::db();
|
||||||
|
$engine = Pluf::f('db_engine');
|
||||||
|
if (!isset($sql[$engine])) {
|
||||||
|
throw new Exception('SQLite complex migration not supported.');
|
||||||
|
}
|
||||||
|
$db->execute($sql[$engine]);
|
||||||
|
}
|
@@ -59,6 +59,16 @@ class IDF_Plugin_SyncGit_Cron
|
|||||||
$out .= sprintf($template, $cmd, $key->login, $content)."\n";
|
$out .= sprintf($template, $cmd, $key->login, $content)."\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$out = "# indefero start" . PHP_EOL . $out . "# indefero end" . PHP_EOL;
|
||||||
|
|
||||||
|
// We update only the part of the file between IDF_START / IDF_END comment
|
||||||
|
$original_keys = file_get_contents($authorized_keys);
|
||||||
|
if (strstr($original_keys, "# indefero start") && strstr($original_keys, "# indefero end")) {
|
||||||
|
$out = preg_replace('/(#\sindefero\sstart).+(#\sindefero\send\s\s?)/isU',
|
||||||
|
$out, $original_keys);
|
||||||
|
} else {
|
||||||
|
$out .= $original_keys;
|
||||||
|
}
|
||||||
file_put_contents($authorized_keys, $out, LOCK_EX);
|
file_put_contents($authorized_keys, $out, LOCK_EX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,6 +27,18 @@
|
|||||||
*/
|
*/
|
||||||
class IDF_Plugin_SyncMonotone
|
class IDF_Plugin_SyncMonotone
|
||||||
{
|
{
|
||||||
|
private $old_err_rep = 0;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->old_err_rep = error_reporting(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
error_reporting($this->old_err_rep);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entry point of the plugin.
|
* Entry point of the plugin.
|
||||||
*/
|
*/
|
||||||
@@ -80,24 +92,33 @@ class IDF_Plugin_SyncMonotone
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This guard cleans up on any kind of error, and here is how it works:
|
||||||
|
// As long as the guard is not committed, it keeps a reference to
|
||||||
|
// the given project. When the guard is destroyed and the reference
|
||||||
|
// is still present, it deletes the object. The deletion indirectly
|
||||||
|
// also calls into this plugin again, as the project delete hook
|
||||||
|
// will be called, that removes any changes we've made during the
|
||||||
|
// process.
|
||||||
|
$projectGuard = new IDF_Plugin_SyncMonotone_ModelGuard($project);
|
||||||
|
|
||||||
$projecttempl = Pluf::f('mtn_repositories', false);
|
$projecttempl = Pluf::f('mtn_repositories', false);
|
||||||
if ($projecttempl === false) {
|
if ($projecttempl === false) {
|
||||||
throw new IDF_Scm_Exception(
|
$this->_diagnoseProblem(
|
||||||
__('"mtn_repositories" must be defined in your configuration file.')
|
__('"mtn_repositories" must be defined in your configuration file')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$usher_config = Pluf::f('mtn_usher_conf', false);
|
$usher_config = Pluf::f('mtn_usher_conf', false);
|
||||||
if (!$usher_config || !is_writable($usher_config)) {
|
if (!$usher_config || !is_writable($usher_config)) {
|
||||||
throw new IDF_Scm_Exception(
|
$this->_diagnoseProblem(
|
||||||
__('"mtn_usher_conf" does not exist or is not writable.')
|
__('"mtn_usher_conf" does not exist or is not writable')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$mtnpostpush = realpath(dirname(__FILE__) . '/../../../scripts/mtn-post-push');
|
$mtnpostpush = realpath(dirname(__FILE__) . '/../../../scripts/mtn-post-push');
|
||||||
if (!file_exists($mtnpostpush)) {
|
if (!file_exists($mtnpostpush)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not find mtn-post-push script "%s".'), $mtnpostpush
|
__('Could not find mtn-post-push script "%s"'), $mtnpostpush
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,13 +131,12 @@ class IDF_Plugin_SyncMonotone
|
|||||||
'monotonerc.in',
|
'monotonerc.in',
|
||||||
'remote-automate-permissions.in',
|
'remote-automate-permissions.in',
|
||||||
'hooks.d/',
|
'hooks.d/',
|
||||||
// this is linked and not copied to be able to update
|
|
||||||
// the list of read-only commands on upgrades
|
|
||||||
'hooks.d/indefero_authorize_remote_automate.conf',
|
|
||||||
'hooks.d/indefero_authorize_remote_automate.lua',
|
'hooks.d/indefero_authorize_remote_automate.lua',
|
||||||
'hooks.d/indefero_post_push.conf.in',
|
'hooks.d/indefero_post_push.conf.in',
|
||||||
'hooks.d/indefero_post_push.lua',
|
'hooks.d/indefero_post_push.lua',
|
||||||
);
|
);
|
||||||
|
// enable remote command execution of read-only commands
|
||||||
|
// only for public projects
|
||||||
if (!$project->private) {
|
if (!$project->private) {
|
||||||
// this is linked and not copied to be able to update
|
// this is linked and not copied to be able to update
|
||||||
// the list of read-only commands on upgrades
|
// the list of read-only commands on upgrades
|
||||||
@@ -131,8 +151,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
}
|
}
|
||||||
foreach ($confdir_contents as $content) {
|
foreach ($confdir_contents as $content) {
|
||||||
if (!file_exists($confdir.$content)) {
|
if (!file_exists($confdir.$content)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('The configuration file %s is missing.'), $content
|
__('The configuration file "%s" is missing'), $content
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,14 +160,15 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$shortname = $project->shortname;
|
$shortname = $project->shortname;
|
||||||
$projectpath = sprintf($projecttempl, $shortname);
|
$projectpath = sprintf($projecttempl, $shortname);
|
||||||
if (file_exists($projectpath)) {
|
if (file_exists($projectpath)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('The project path %s already exists.'), $projectpath
|
__('The project path "%s" already exists'), $projectpath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mkdir($projectpath)) {
|
if (!@mkdir($projectpath)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('The project path %s could not be created.'), $projectpath
|
__('The project path "%s" could not be created'),
|
||||||
|
$projectpath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +177,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
//
|
//
|
||||||
$dbfile = $projectpath.'/database.mtn';
|
$dbfile = $projectpath.'/database.mtn';
|
||||||
$cmd = sprintf('db init -d %s', escapeshellarg($dbfile));
|
$cmd = sprintf('db init -d %s', escapeshellarg($dbfile));
|
||||||
self::_mtn_exec($cmd);
|
$this->_mtn_exec($cmd);
|
||||||
|
|
||||||
//
|
//
|
||||||
// step 2) create a server key
|
// step 2) create a server key
|
||||||
@@ -175,16 +196,17 @@ class IDF_Plugin_SyncMonotone
|
|||||||
escapeshellarg($projectpath),
|
escapeshellarg($projectpath),
|
||||||
escapeshellarg($serverkey)
|
escapeshellarg($serverkey)
|
||||||
);
|
);
|
||||||
self::_mtn_exec($cmd);
|
$this->_mtn_exec($cmd);
|
||||||
|
|
||||||
//
|
//
|
||||||
// step 3) create a client key, and save it in IDF
|
// step 3) create a client key, and save it in IDF
|
||||||
//
|
//
|
||||||
$keydir = Pluf::f('tmp_folder').'/mtn-client-keys';
|
$keydir = Pluf::f('tmp_folder').'/mtn-client-keys';
|
||||||
if (!file_exists($keydir)) {
|
if (!file_exists($keydir)) {
|
||||||
if (!mkdir($keydir)) {
|
if (!@mkdir($keydir)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('The key directory %s could not be created.'), $keydir
|
__('The key directory "%s" could not be created'),
|
||||||
|
$keydir
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -194,14 +216,14 @@ class IDF_Plugin_SyncMonotone
|
|||||||
escapeshellarg($keydir),
|
escapeshellarg($keydir),
|
||||||
escapeshellarg($clientkey_name)
|
escapeshellarg($clientkey_name)
|
||||||
);
|
);
|
||||||
$keyinfo = self::_mtn_exec($cmd);
|
$keyinfo = $this->_mtn_exec($cmd);
|
||||||
|
|
||||||
$parsed_keyinfo = array();
|
$parsed_keyinfo = array();
|
||||||
try {
|
try {
|
||||||
$parsed_keyinfo = IDF_Scm_Monotone_BasicIO::parse($keyinfo);
|
$parsed_keyinfo = IDF_Scm_Monotone_BasicIO::parse($keyinfo);
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not parse key information: %s'), $e->getMessage()
|
__('Could not parse key information: %s'), $e->getMessage()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -219,13 +241,13 @@ class IDF_Plugin_SyncMonotone
|
|||||||
escapeshellarg($keydir),
|
escapeshellarg($keydir),
|
||||||
escapeshellarg($clientkey_hash)
|
escapeshellarg($clientkey_hash)
|
||||||
);
|
);
|
||||||
$clientkey_pubdata = self::_mtn_exec($cmd);
|
$clientkey_pubdata = $this->_mtn_exec($cmd);
|
||||||
|
|
||||||
$cmd = sprintf('au put_public_key --db=%s %s',
|
$cmd = sprintf('au put_public_key --db=%s %s',
|
||||||
escapeshellarg($dbfile),
|
escapeshellarg($dbfile),
|
||||||
escapeshellarg($clientkey_pubdata)
|
escapeshellarg($clientkey_pubdata)
|
||||||
);
|
);
|
||||||
self::_mtn_exec($cmd);
|
$this->_mtn_exec($cmd);
|
||||||
|
|
||||||
//
|
//
|
||||||
// step 4) setup the configuration
|
// step 4) setup the configuration
|
||||||
@@ -238,18 +260,20 @@ class IDF_Plugin_SyncMonotone
|
|||||||
foreach ($confdir_contents as $content) {
|
foreach ($confdir_contents as $content) {
|
||||||
$filepath = $projectpath.'/'.$content;
|
$filepath = $projectpath.'/'.$content;
|
||||||
if (substr($content, -1) == '/') {
|
if (substr($content, -1) == '/') {
|
||||||
if (!mkdir($filepath)) {
|
if (!@mkdir($filepath)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not create configuration directory "%s"'), $filepath
|
__('Could not create configuration directory "%s"'),
|
||||||
|
$filepath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (substr($content, -3) != '.in') {
|
if (substr($content, -3) != '.in') {
|
||||||
if (!symlink($confdir.$content, $filepath)) {
|
if (!@symlink($confdir.$content, $filepath)) {
|
||||||
IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not create symlink "%s"'), $filepath
|
__('Could not create symlink for configuration file "%s"'),
|
||||||
|
$filepath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@@ -264,9 +288,10 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
// remove the .in
|
// remove the .in
|
||||||
$filepath = substr($filepath, 0, -3);
|
$filepath = substr($filepath, 0, -3);
|
||||||
if (file_put_contents($filepath, $filecontents, LOCK_EX) === false) {
|
if (@file_put_contents($filepath, $filecontents, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write configuration file "%s"'), $filepath
|
__('Could not write configuration file "%s"'),
|
||||||
|
$filepath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,7 +305,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$parsed_config = IDF_Scm_Monotone_BasicIO::parse($usher_rc);
|
$parsed_config = IDF_Scm_Monotone_BasicIO::parse($usher_rc);
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not parse usher configuration in "%s": %s'),
|
__('Could not parse usher configuration in "%s": %s'),
|
||||||
$usher_config, $e->getMessage()
|
$usher_config, $e->getMessage()
|
||||||
));
|
));
|
||||||
@@ -291,7 +316,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
foreach ($stanzas as $stanza_line) {
|
foreach ($stanzas as $stanza_line) {
|
||||||
if ($stanza_line['key'] == 'server' &&
|
if ($stanza_line['key'] == 'server' &&
|
||||||
$stanza_line['values'][0] == $shortname) {
|
$stanza_line['values'][0] == $shortname) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('usher configuration already contains a server '.
|
__('usher configuration already contains a server '.
|
||||||
'entry named "%s"'),
|
'entry named "%s"'),
|
||||||
$shortname
|
$shortname
|
||||||
@@ -315,9 +340,10 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
// FIXME: more sanity - what happens on failing writes? we do not
|
// FIXME: more sanity - what happens on failing writes? we do not
|
||||||
// have a backup copy of usher.conf around...
|
// have a backup copy of usher.conf around...
|
||||||
if (file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {
|
if (@file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write usher configuration file "%s"'), $usher_config
|
__('Could not write usher configuration file "%s"'),
|
||||||
|
$usher_config
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,6 +351,9 @@ class IDF_Plugin_SyncMonotone
|
|||||||
// step 6) reload usher to pick up the new configuration
|
// step 6) reload usher to pick up the new configuration
|
||||||
//
|
//
|
||||||
IDF_Scm_Monotone_Usher::reload();
|
IDF_Scm_Monotone_Usher::reload();
|
||||||
|
|
||||||
|
// commit the guard, so the newly created project is not deleted
|
||||||
|
$projectGuard->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -345,8 +374,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$mtn = IDF_Scm_Monotone::factory($project);
|
$mtn = IDF_Scm_Monotone::factory($project);
|
||||||
$stdio = $mtn->getStdio();
|
$stdio = $mtn->getStdio();
|
||||||
|
|
||||||
$projectpath = self::_get_project_path($project);
|
$projectpath = $this->_get_project_path($project);
|
||||||
$auth_ids = self::_get_authorized_user_ids($project);
|
$auth_ids = $this->_get_authorized_user_ids($project);
|
||||||
$key_ids = array();
|
$key_ids = array();
|
||||||
foreach ($auth_ids as $auth_id) {
|
foreach ($auth_ids as $auth_id) {
|
||||||
$sql = new Pluf_SQL('user=%s', array($auth_id));
|
$sql = new Pluf_SQL('user=%s', array($auth_id));
|
||||||
@@ -361,9 +390,10 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$write_permissions = implode("\n", $key_ids);
|
$write_permissions = implode("\n", $key_ids);
|
||||||
$rcfile = $projectpath.'/write-permissions';
|
$rcfile = $projectpath.'/write-permissions';
|
||||||
if (file_put_contents($rcfile, $write_permissions, LOCK_EX) === false) {
|
if (@file_put_contents($rcfile, $write_permissions, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write write-permissions file "%s"'), $rcfile
|
__('Could not write write-permissions file "%s"'),
|
||||||
|
$rcfile
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,11 +412,13 @@ class IDF_Plugin_SyncMonotone
|
|||||||
array('key' => 'allow', 'values' => array('*')),
|
array('key' => 'allow', 'values' => array('*')),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$read_permissions = IDF_Scm_Monotone_BasicIO::compile(array($stanza));
|
$read_permissions = IDF_Scm_Monotone_BasicIO::compile(array($stanza));
|
||||||
$rcfile = $projectpath.'/read-permissions';
|
$rcfile = $projectpath.'/read-permissions';
|
||||||
if (file_put_contents($rcfile, $read_permissions, LOCK_EX) === false) {
|
if (@file_put_contents($rcfile, $read_permissions, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write read-permissions file "%s"'), $rcfile
|
__('Could not write read-permissions file "%s"'),
|
||||||
|
$rcfile
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,16 +433,16 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$serverRestartRequired = false;
|
$serverRestartRequired = false;
|
||||||
if ($project->private && file_exists($projectfile) && is_link($projectfile)) {
|
if ($project->private && file_exists($projectfile) && is_link($projectfile)) {
|
||||||
if (!unlink($projectfile)) {
|
if (!@unlink($projectfile)) {
|
||||||
IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not remove symlink "%s"'), $projectfile
|
__('Could not remove symlink "%s"'), $projectfile
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
$serverRestartRequired = true;
|
$serverRestartRequired = true;
|
||||||
} else
|
} else
|
||||||
if (!$project->private && !file_exists($projectfile)) {
|
if (!$project->private && !file_exists($projectfile)) {
|
||||||
if (!symlink($templatefile, $projectfile)) {
|
if (!@symlink($templatefile, $projectfile)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not create symlink "%s"'), $projectfile
|
__('Could not create symlink "%s"'), $projectfile
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -422,6 +454,9 @@ class IDF_Plugin_SyncMonotone
|
|||||||
// seems to be ignored when the server should be started
|
// seems to be ignored when the server should be started
|
||||||
// again immediately afterwards
|
// again immediately afterwards
|
||||||
IDF_Scm_Monotone_Usher::killServer($project->shortname);
|
IDF_Scm_Monotone_Usher::killServer($project->shortname);
|
||||||
|
// give usher some time to cool down, otherwise it might hang
|
||||||
|
// (see https://code.monotone.ca/p/contrib/issues/175/)
|
||||||
|
sleep(2);
|
||||||
IDF_Scm_Monotone_Usher::startServer($project->shortname);
|
IDF_Scm_Monotone_Usher::startServer($project->shortname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -443,8 +478,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$usher_config = Pluf::f('mtn_usher_conf', false);
|
$usher_config = Pluf::f('mtn_usher_conf', false);
|
||||||
if (!$usher_config || !is_writable($usher_config)) {
|
if (!$usher_config || !is_writable($usher_config)) {
|
||||||
throw new IDF_Scm_Exception(
|
$this->_diagnoseProblem(
|
||||||
__('"mtn_usher_conf" does not exist or is not writable.')
|
__('"mtn_usher_conf" does not exist or is not writable')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,16 +488,16 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$projecttempl = Pluf::f('mtn_repositories', false);
|
$projecttempl = Pluf::f('mtn_repositories', false);
|
||||||
if ($projecttempl === false) {
|
if ($projecttempl === false) {
|
||||||
throw new IDF_Scm_Exception(
|
$this->_diagnoseProblem(
|
||||||
__('"mtn_repositories" must be defined in your configuration file.')
|
__('"mtn_repositories" must be defined in your configuration file')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$projectpath = sprintf($projecttempl, $shortname);
|
$projectpath = sprintf($projecttempl, $shortname);
|
||||||
if (file_exists($projectpath)) {
|
if (file_exists($projectpath)) {
|
||||||
if (!self::_delete_recursive($projectpath)) {
|
if (!$this->_delete_recursive($projectpath)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('One or more paths underknees %s could not be deleted.'), $projectpath
|
__('One or more paths underneath %s could not be deleted'), $projectpath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -473,8 +508,9 @@ class IDF_Plugin_SyncMonotone
|
|||||||
if ($keyname && $keyhash &&
|
if ($keyname && $keyhash &&
|
||||||
file_exists($keydir .'/'. $keyname . '.' . $keyhash)) {
|
file_exists($keydir .'/'. $keyname . '.' . $keyhash)) {
|
||||||
if (!@unlink($keydir .'/'. $keyname . '.' . $keyhash)) {
|
if (!@unlink($keydir .'/'. $keyname . '.' . $keyhash)) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not delete client private key %s'), $keyname
|
__('Could not delete client private key "%s"'),
|
||||||
|
$keyname
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -485,7 +521,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$parsed_config = IDF_Scm_Monotone_BasicIO::parse($usher_rc);
|
$parsed_config = IDF_Scm_Monotone_BasicIO::parse($usher_rc);
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not parse usher configuration in "%s": %s'),
|
__('Could not parse usher configuration in "%s": %s'),
|
||||||
$usher_config, $e->getMessage()
|
$usher_config, $e->getMessage()
|
||||||
));
|
));
|
||||||
@@ -505,9 +541,10 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
// FIXME: more sanity - what happens on failing writes? we do not
|
// FIXME: more sanity - what happens on failing writes? we do not
|
||||||
// have a backup copy of usher.conf around...
|
// have a backup copy of usher.conf around...
|
||||||
if (file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {
|
if (@file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write usher configuration file "%s"'), $usher_config
|
__('Could not write usher configuration file "%s"'),
|
||||||
|
$usher_config
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,6 +565,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$keyGuard = new IDF_Plugin_SyncMonotone_ModelGuard($key);
|
||||||
|
|
||||||
foreach (Pluf::factory('IDF_Project')->getList() as $project) {
|
foreach (Pluf::factory('IDF_Project')->getList() as $project) {
|
||||||
$conf = new IDF_Conf();
|
$conf = new IDF_Conf();
|
||||||
$conf->setProject($project);
|
$conf->setProject($project);
|
||||||
@@ -535,8 +574,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
if ($scm != 'mtn')
|
if ($scm != 'mtn')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$projectpath = self::_get_project_path($project);
|
$projectpath = $this->_get_project_path($project);
|
||||||
$auth_ids = self::_get_authorized_user_ids($project);
|
$auth_ids = $this->_get_authorized_user_ids($project);
|
||||||
if (!in_array($key->user, $auth_ids))
|
if (!in_array($key->user, $auth_ids))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -556,7 +595,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$parsed_read_perms = IDF_Scm_Monotone_BasicIO::parse($read_perms);
|
$parsed_read_perms = IDF_Scm_Monotone_BasicIO::parse($read_perms);
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not parse read-permissions for project "%s": %s'),
|
__('Could not parse read-permissions for project "%s": %s'),
|
||||||
$shortname, $e->getMessage()
|
$shortname, $e->getMessage()
|
||||||
));
|
));
|
||||||
@@ -598,10 +637,11 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);
|
$read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);
|
||||||
|
|
||||||
if (file_put_contents($projectpath.'/read-permissions',
|
if (@file_put_contents($projectpath.'/read-permissions',
|
||||||
$read_perms, LOCK_EX) === false) {
|
$read_perms, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write read-permissions for project "%s"'), $shortname
|
__('Could not write read-permissions for project "%s"'),
|
||||||
|
$shortname
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -611,9 +651,9 @@ class IDF_Plugin_SyncMonotone
|
|||||||
if (!in_array('*', $lines) && !in_array($mtn_key_id, $lines)) {
|
if (!in_array('*', $lines) && !in_array($mtn_key_id, $lines)) {
|
||||||
$lines[] = $mtn_key_id;
|
$lines[] = $mtn_key_id;
|
||||||
}
|
}
|
||||||
if (file_put_contents($projectpath.'/write-permissions',
|
if (@file_put_contents($projectpath.'/write-permissions',
|
||||||
implode("\n", $lines) . "\n", LOCK_EX) === false) {
|
implode("\n", $lines) . "\n", LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write write-permissions file for project "%s"'),
|
__('Could not write write-permissions file for project "%s"'),
|
||||||
$shortname
|
$shortname
|
||||||
));
|
));
|
||||||
@@ -623,6 +663,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$stdio = $mtn->getStdio();
|
$stdio = $mtn->getStdio();
|
||||||
$stdio->exec(array('put_public_key', $key->content));
|
$stdio->exec(array('put_public_key', $key->content));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$keyGuard->commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -651,8 +693,8 @@ class IDF_Plugin_SyncMonotone
|
|||||||
if ($scm != 'mtn')
|
if ($scm != 'mtn')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$projectpath = self::_get_project_path($project);
|
$projectpath = $this->_get_project_path($project);
|
||||||
$auth_ids = self::_get_authorized_user_ids($project);
|
$auth_ids = $this->_get_authorized_user_ids($project);
|
||||||
if (!in_array($key->user, $auth_ids))
|
if (!in_array($key->user, $auth_ids))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -672,7 +714,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$parsed_read_perms = IDF_Scm_Monotone_BasicIO::parse($read_perms);
|
$parsed_read_perms = IDF_Scm_Monotone_BasicIO::parse($read_perms);
|
||||||
}
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not parse read-permissions for project "%s": %s'),
|
__('Could not parse read-permissions for project "%s": %s'),
|
||||||
$shortname, $e->getMessage()
|
$shortname, $e->getMessage()
|
||||||
));
|
));
|
||||||
@@ -693,10 +735,11 @@ class IDF_Plugin_SyncMonotone
|
|||||||
|
|
||||||
$read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);
|
$read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);
|
||||||
|
|
||||||
if (file_put_contents($projectpath.'/read-permissions',
|
if (@file_put_contents($projectpath.'/read-permissions',
|
||||||
$read_perms, LOCK_EX) === false) {
|
$read_perms, LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write read-permissions for project "%s"'), $shortname
|
__('Could not write read-permissions for project "%s"'),
|
||||||
|
$shortname
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -711,9 +754,9 @@ class IDF_Plugin_SyncMonotone
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (file_put_contents($projectpath.'/write-permissions',
|
if (@file_put_contents($projectpath.'/write-permissions',
|
||||||
implode("\n", $lines) . "\n", LOCK_EX) === false) {
|
implode("\n", $lines) . "\n", LOCK_EX) === false) {
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
$this->_diagnoseProblem(sprintf(
|
||||||
__('Could not write write-permissions file for project "%s"'),
|
__('Could not write write-permissions file for project "%s"'),
|
||||||
$shortname
|
$shortname
|
||||||
));
|
));
|
||||||
@@ -762,7 +805,43 @@ class IDF_Plugin_SyncMonotone
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function _get_authorized_user_ids($project)
|
private function _get_project_path($project)
|
||||||
|
{
|
||||||
|
$projecttempl = Pluf::f('mtn_repositories', false);
|
||||||
|
if ($projecttempl === false) {
|
||||||
|
$this->_diagnoseProblem(
|
||||||
|
__('"mtn_repositories" must be defined in your configuration file.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$projectpath = sprintf($projecttempl, $project->shortname);
|
||||||
|
if (!file_exists($projectpath)) {
|
||||||
|
$this->_diagnoseProblem(sprintf(
|
||||||
|
__('The project path %s does not exists.'), $projectpath
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return $projectpath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _mtn_exec($cmd)
|
||||||
|
{
|
||||||
|
$fullcmd = sprintf('%s %s %s',
|
||||||
|
Pluf::f('idf_exec_cmd_prefix', ''),
|
||||||
|
Pluf::f('mtn_path', 'mtn'),
|
||||||
|
$cmd
|
||||||
|
);
|
||||||
|
|
||||||
|
$output = $return = null;
|
||||||
|
exec($fullcmd, $output, $return);
|
||||||
|
if ($return != 0) {
|
||||||
|
$this->_diagnoseProblem(sprintf(
|
||||||
|
__('The command "%s" could not be executed.'), $cmd
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return implode("\n", $output);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _get_authorized_user_ids($project)
|
||||||
{
|
{
|
||||||
$mem = $project->getMembershipData();
|
$mem = $project->getMembershipData();
|
||||||
$members = array_merge((array)$mem['members'],
|
$members = array_merge((array)$mem['members'],
|
||||||
@@ -775,43 +854,7 @@ class IDF_Plugin_SyncMonotone
|
|||||||
return $userids;
|
return $userids;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function _get_project_path($project)
|
private function _delete_recursive($path)
|
||||||
{
|
|
||||||
$projecttempl = Pluf::f('mtn_repositories', false);
|
|
||||||
if ($projecttempl === false) {
|
|
||||||
throw new IDF_Scm_Exception(
|
|
||||||
__('"mtn_repositories" must be defined in your configuration file.')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$projectpath = sprintf($projecttempl, $project->shortname);
|
|
||||||
if (!file_exists($projectpath)) {
|
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
|
||||||
__('The project path %s does not exists.'), $projectpath
|
|
||||||
));
|
|
||||||
}
|
|
||||||
return $projectpath;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function _mtn_exec($cmd)
|
|
||||||
{
|
|
||||||
$fullcmd = sprintf('%s %s %s',
|
|
||||||
Pluf::f('idf_exec_cmd_prefix', ''),
|
|
||||||
Pluf::f('mtn_path', 'mtn'),
|
|
||||||
$cmd
|
|
||||||
);
|
|
||||||
|
|
||||||
$output = $return = null;
|
|
||||||
exec($fullcmd, $output, $return);
|
|
||||||
if ($return != 0) {
|
|
||||||
throw new IDF_Scm_Exception(sprintf(
|
|
||||||
__('The command "%s" could not be executed.'), $cmd
|
|
||||||
));
|
|
||||||
}
|
|
||||||
return implode("\n", $output);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function _delete_recursive($path)
|
|
||||||
{
|
{
|
||||||
if (is_file($path) || is_link($path)) {
|
if (is_file($path) || is_link($path)) {
|
||||||
return @unlink($path);
|
return @unlink($path);
|
||||||
@@ -821,10 +864,48 @@ class IDF_Plugin_SyncMonotone
|
|||||||
$scan = glob(rtrim($path, '/') . '/*');
|
$scan = glob(rtrim($path, '/') . '/*');
|
||||||
$status = 0;
|
$status = 0;
|
||||||
foreach ($scan as $subpath) {
|
foreach ($scan as $subpath) {
|
||||||
$status |= self::_delete_recursive($subpath);
|
$status |= $this->_delete_recursive($subpath);
|
||||||
}
|
}
|
||||||
$status |= rmdir($path);
|
$status |= @rmdir($path);
|
||||||
return $status;
|
return $status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _diagnoseProblem($msg)
|
||||||
|
{
|
||||||
|
$system_err = error_get_last();
|
||||||
|
if (!empty($system_err)) {
|
||||||
|
$msg .= ': '.$system_err['message'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_reporting($this->old_err_rep);
|
||||||
|
throw new IDF_Scm_Exception($msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple helper class that deletes the model instance if
|
||||||
|
* it is not committed
|
||||||
|
*/
|
||||||
|
class IDF_Plugin_SyncMonotone_ModelGuard
|
||||||
|
{
|
||||||
|
private $model;
|
||||||
|
|
||||||
|
public function __construct(Pluf_Model $m)
|
||||||
|
{
|
||||||
|
$this->model = $m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
if ($this->model == null)
|
||||||
|
return;
|
||||||
|
$this->model->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function commit()
|
||||||
|
{
|
||||||
|
$this->model = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -133,6 +133,46 @@ class IDF_Project extends Pluf_Model
|
|||||||
return $projects[0];
|
return $projects[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of open/closed issues.
|
||||||
|
*
|
||||||
|
* @param string Status ('open'), 'closed'
|
||||||
|
* @param IDF_Tag Subfilter with a label (null)
|
||||||
|
* @return int Count
|
||||||
|
*/
|
||||||
|
public function getIssueCountByOwner($status='open')
|
||||||
|
{
|
||||||
|
switch ($status) {
|
||||||
|
case 'open':
|
||||||
|
$tags = implode(',', $this->getTagIdsByStatus('open'));
|
||||||
|
break;
|
||||||
|
case 'closed':
|
||||||
|
default:
|
||||||
|
$tags = implode(',', $this->getTagIdsByStatus('closed'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$sqlIssueTable = Pluf::factory('IDF_Issue')->getSqlTable();
|
||||||
|
$query = "SELECT uid AS id,COUNT(uid) AS nb
|
||||||
|
FROM (
|
||||||
|
SELECT COALESCE(owner, -1) AS uid
|
||||||
|
FROM $sqlIssueTable
|
||||||
|
WHERE status IN ($tags)
|
||||||
|
) AS ff
|
||||||
|
GROUP BY uid";
|
||||||
|
|
||||||
|
$db = Pluf::db();
|
||||||
|
$dbData = $db->select($query);
|
||||||
|
$ownerStatistics = array();
|
||||||
|
foreach ($dbData as $k => $v) {
|
||||||
|
$key = ($v['id'] === '-1') ? null : $v['id'];
|
||||||
|
$ownerStatistics[$key] = (int)$v['nb'];
|
||||||
|
}
|
||||||
|
|
||||||
|
arsort($ownerStatistics);
|
||||||
|
|
||||||
|
return $ownerStatistics;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of open/closed issues.
|
* Returns the number of open/closed issues.
|
||||||
*
|
*
|
||||||
|
@@ -88,22 +88,36 @@ class IDF_Scm
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run exec and log some information.
|
* Runs the given command and log some information.
|
||||||
|
*
|
||||||
|
* A previous version used plain exec(), but this should not be used
|
||||||
|
* for various reasons, one being that this command does not preserve
|
||||||
|
* trailing whitespace, which is essential for proper diff parsing.
|
||||||
*
|
*
|
||||||
* @param $caller Calling method
|
* @param $caller Calling method
|
||||||
* @param $cmd Command to run
|
* @param $cmd Command to run
|
||||||
* @param &$out Array of output
|
* @param &$out Array of output
|
||||||
* @param &$return Return value
|
* @param &$return Return value
|
||||||
* @return string Last line of the command
|
|
||||||
*/
|
*/
|
||||||
public static function exec($caller, $cmd, &$out=null, &$return=null)
|
public static function exec($caller, $cmd, &$out=null, &$return=null)
|
||||||
{
|
{
|
||||||
|
$return = -1;
|
||||||
Pluf_Log::stime('timer');
|
Pluf_Log::stime('timer');
|
||||||
$ret = exec($cmd, $out, $return);
|
$fp = popen($cmd, 'r');
|
||||||
|
$buf = '';
|
||||||
|
if ($fp !== false) {
|
||||||
|
while (!feof($fp)) {
|
||||||
|
$buf .= fread($fp, 1024);
|
||||||
|
}
|
||||||
|
$return = pclose($fp);
|
||||||
|
}
|
||||||
|
$out = preg_split('/\r\n|\r|\n/', $buf);
|
||||||
|
$elem = count($out);
|
||||||
|
if ($elem > 0 && $out[$elem-1] === '')
|
||||||
|
unset($out[$elem-1]);
|
||||||
Pluf_Log::perf(array($caller, $cmd, Pluf_Log::etime('timer', 'total_exec')));
|
Pluf_Log::perf(array($caller, $cmd, Pluf_Log::etime('timer', 'total_exec')));
|
||||||
Pluf_Log::debug(array($caller, $cmd, $out));
|
Pluf_Log::debug(array($caller, $cmd, $out));
|
||||||
Pluf_Log::inc('exec_calls');
|
Pluf_Log::inc('exec_calls');
|
||||||
return $ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -325,7 +339,8 @@ class IDF_Scm
|
|||||||
* stdClass object {
|
* stdClass object {
|
||||||
* 'additions' => array('path/to/file', 'path/to/directory', ...),
|
* 'additions' => array('path/to/file', 'path/to/directory', ...),
|
||||||
* 'deletions' => array('path/to/file', 'path/to/directory', ...),
|
* 'deletions' => array('path/to/file', 'path/to/directory', ...),
|
||||||
* 'renames' => array('old/path/to/file' => 'new/path/to/file', ...)
|
* 'renames' => array('old/path/to/file' => 'new/path/to/file', ...),
|
||||||
|
* 'copies' => array('path/to/source' => 'path/to/target', ...),
|
||||||
* 'patches' => array('path/to/file', ...),
|
* 'patches' => array('path/to/file', ...),
|
||||||
* 'properties' => array('path/to/file' => array(
|
* 'properties' => array('path/to/file' => array(
|
||||||
* 'propname' => 'propvalue', 'deletedprop' => null, ...)
|
* 'propname' => 'propvalue', 'deletedprop' => null, ...)
|
||||||
|
@@ -67,6 +67,7 @@ class IDF_Scm_Git extends IDF_Scm
|
|||||||
'additions' => array(),
|
'additions' => array(),
|
||||||
'deletions' => array(),
|
'deletions' => array(),
|
||||||
'renames' => array(),
|
'renames' => array(),
|
||||||
|
'copies' => array(),
|
||||||
'patches' => array(),
|
'patches' => array(),
|
||||||
'properties' => array(),
|
'properties' => array(),
|
||||||
);
|
);
|
||||||
@@ -209,7 +210,7 @@ class IDF_Scm_Git extends IDF_Scm
|
|||||||
return $this->cache['tags'];
|
return $this->cache['tags'];
|
||||||
}
|
}
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '')
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '')
|
||||||
.sprintf('GIT_DIR=%s %s for-each-ref --format="%%(taggerdate:iso)%%(committerdate:iso) %%(objectname) %%(refname)" refs/tags',
|
.sprintf('GIT_DIR=%s %s for-each-ref --format="%%(objectname) %%(refname)" refs/tags',
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($this->repo),
|
||||||
Pluf::f('git_path', 'git'));
|
Pluf::f('git_path', 'git'));
|
||||||
self::exec('IDF_Scm_Git::getTags', $cmd, $out, $return);
|
self::exec('IDF_Scm_Git::getTags', $cmd, $out, $return);
|
||||||
@@ -218,18 +219,15 @@ class IDF_Scm_Git extends IDF_Scm
|
|||||||
$cmd, $return,
|
$cmd, $return,
|
||||||
implode("\n", $out)));
|
implode("\n", $out)));
|
||||||
}
|
}
|
||||||
rsort($out);
|
|
||||||
$res = array();
|
$res = array();
|
||||||
foreach ($out as $b) {
|
foreach ($out as $b) {
|
||||||
$elts = explode(' ', $b, 5);
|
$elts = explode(' ', $b, 2);
|
||||||
$tag = substr(trim($elts[4]), 10);
|
$tag = substr(trim($elts[1]), 10); // Remove refs/tags/ prefix
|
||||||
if (false !== strpos($tag, '/')) {
|
|
||||||
$res[$elts[3]] = $b;
|
|
||||||
} else {
|
|
||||||
$res[$tag] = '';
|
$res[$tag] = '';
|
||||||
}
|
}
|
||||||
}
|
krsort($res);
|
||||||
$this->cache['tags'] = $res;
|
$this->cache['tags'] = $res;
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,6 +346,14 @@ class IDF_Scm_Git extends IDF_Scm
|
|||||||
if (!preg_match('/<(.*)>/', $author, $match)) {
|
if (!preg_match('/<(.*)>/', $author, $match)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
// FIXME: newer git versions know a i18n.commitencoding setting which
|
||||||
|
// leads to another header, "encoding", with which we _could_ try to
|
||||||
|
// decode the string into utf8. Unfortunately this does not always
|
||||||
|
// work, especially not in older repos, so we would then still have
|
||||||
|
// to supply some fallback.
|
||||||
|
if (!mb_check_encoding($match[1], 'UTF-8')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
$sql = new Pluf_SQL('login=%s', array($match[1]));
|
$sql = new Pluf_SQL('login=%s', array($match[1]));
|
||||||
$users = Pluf::factory('Pluf_User')->getList(array('filter'=>$sql->gen()));
|
$users = Pluf::factory('Pluf_User')->getList(array('filter'=>$sql->gen()));
|
||||||
if ($users->count() > 0) {
|
if ($users->count() > 0) {
|
||||||
|
@@ -22,18 +22,76 @@
|
|||||||
# ***** END LICENSE BLOCK ***** */
|
# ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mercurial utils.
|
* A simple RAII helper that manages style files to format hg's log output
|
||||||
|
*/
|
||||||
|
class IDF_Scm_Mercurial_LogStyle
|
||||||
|
{
|
||||||
|
const FULL_LOG = 1;
|
||||||
|
const CHANGES = 2;
|
||||||
|
|
||||||
|
public function __construct($type)
|
||||||
|
{
|
||||||
|
$this->file = tempnam(Pluf::f('tmp_folder'), 'hg-log-style-');
|
||||||
|
|
||||||
|
if ($type == self::FULL_LOG) {
|
||||||
|
$style = 'changeset = "'
|
||||||
|
. 'changeset: {node|short}\n'
|
||||||
|
. 'branch: {branch}\n'
|
||||||
|
. 'author: {author}\n'
|
||||||
|
. 'date: {date|isodate}\n'
|
||||||
|
. 'parents: {parents}\n\n'
|
||||||
|
. '{desc}\n'
|
||||||
|
. '\0\n"'
|
||||||
|
. "\n"
|
||||||
|
. 'parent = "{node|short} "'
|
||||||
|
. "\n";
|
||||||
|
} elseif ($type == self::CHANGES) {
|
||||||
|
$style = 'changeset = "'
|
||||||
|
. 'file_mods: {file_mods}\n'
|
||||||
|
. 'file_adds: {file_adds}\n'
|
||||||
|
. 'file_dels: {file_dels}\n'
|
||||||
|
. 'file_copies: {file_copies}\n\n'
|
||||||
|
. '\0\n"'
|
||||||
|
. "\n"
|
||||||
|
. 'file_mod = "{file_mod}\0"'
|
||||||
|
. "\n"
|
||||||
|
. 'file_add = "{file_add}\0"'
|
||||||
|
. "\n"
|
||||||
|
. 'file_del = "{file_del}\0"'
|
||||||
|
. "\n"
|
||||||
|
. 'file_copy = "{source}\0{name}\0"'
|
||||||
|
. "\n";
|
||||||
|
} else {
|
||||||
|
throw new IDF_Scm_Exception('invalid type ' . $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
file_put_contents($this->file, $style);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
@unlink($this->file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get()
|
||||||
|
{
|
||||||
|
return $this->file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main SCM class for Mercurial
|
||||||
*
|
*
|
||||||
|
* Note: Some commands take a --debug option, this is not lousy coding, but
|
||||||
|
* totally wanted, as hg returns additional / different data in this
|
||||||
|
* mode on which this largely depends.
|
||||||
*/
|
*/
|
||||||
class IDF_Scm_Mercurial extends IDF_Scm
|
class IDF_Scm_Mercurial extends IDF_Scm
|
||||||
{
|
{
|
||||||
protected $hg_log_template;
|
|
||||||
|
|
||||||
public function __construct($repo, $project=null)
|
public function __construct($repo, $project=null)
|
||||||
{
|
{
|
||||||
$this->repo = $repo;
|
$this->repo = $repo;
|
||||||
$this->project = $project;
|
$this->project = $project;
|
||||||
$this->hg_log_template = "'".'changeset: {rev}:{node|short}\nauthor: {author}\ndate: {date|isodate}\nfiles: {files}\n{desc}\n'."'";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRepositorySize()
|
public function getRepositorySize()
|
||||||
@@ -158,7 +216,8 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
throw new Exception(sprintf(__('Not a valid tree: %s.'), $tree));
|
throw new Exception(sprintf(__('Not a valid tree: %s.'), $tree));
|
||||||
}
|
}
|
||||||
$cmd_tmpl = Pluf::f('hg_path', 'hg').' manifest -R %s --debug -r %s';
|
$cmd_tmpl = Pluf::f('hg_path', 'hg').' manifest -R %s --debug -r %s';
|
||||||
$cmd = sprintf($cmd_tmpl, escapeshellarg($this->repo), $tree, ($recurse) ? '' : '');
|
$cmd = sprintf($cmd_tmpl, escapeshellarg($this->repo),
|
||||||
|
escapeshellarg($tree));
|
||||||
$out = array();
|
$out = array();
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
@@ -208,7 +267,8 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
public function getPathInfo($totest, $commit='tip')
|
public function getPathInfo($totest, $commit='tip')
|
||||||
{
|
{
|
||||||
$cmd_tmpl = Pluf::f('hg_path', 'hg').' manifest -R %s --debug -r %s';
|
$cmd_tmpl = Pluf::f('hg_path', 'hg').' manifest -R %s --debug -r %s';
|
||||||
$cmd = sprintf($cmd_tmpl, escapeshellarg($this->repo), $commit);
|
$cmd = sprintf($cmd_tmpl, escapeshellarg($this->repo),
|
||||||
|
escapeshellarg($commit));
|
||||||
$out = array();
|
$out = array();
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
self::exec('IDF_Scm_Mercurial::getPathInfo', $cmd, $out);
|
self::exec('IDF_Scm_Mercurial::getPathInfo', $cmd, $out);
|
||||||
@@ -284,7 +344,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
self::exec('IDF_Scm_Mercurial::getBranches', $cmd, $out);
|
self::exec('IDF_Scm_Mercurial::getBranches', $cmd, $out);
|
||||||
$res = array();
|
$res = array();
|
||||||
foreach ($out as $b) {
|
foreach ($out as $b) {
|
||||||
preg_match('/(\S+).*\S+:(\S+)/', $b, $match);
|
preg_match('/(.+?)\s+\S+:(\S+)/', $b, $match);
|
||||||
$res[$match[1]] = '';
|
$res[$match[1]] = '';
|
||||||
}
|
}
|
||||||
$this->cache['branches'] = $res;
|
$this->cache['branches'] = $res;
|
||||||
@@ -308,7 +368,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
self::exec('IDF_Scm_Mercurial::getTags', $cmd, $out);
|
self::exec('IDF_Scm_Mercurial::getTags', $cmd, $out);
|
||||||
$res = array();
|
$res = array();
|
||||||
foreach ($out as $b) {
|
foreach ($out as $b) {
|
||||||
preg_match('/(\S+).*\S+:(\S+)/', $b, $match);
|
preg_match('/(.+?)\s+\S+:(\S+)/', $b, $match);
|
||||||
$res[$match[1]] = '';
|
$res[$match[1]] = '';
|
||||||
}
|
}
|
||||||
$this->cache['tags'] = $res;
|
$this->cache['tags'] = $res;
|
||||||
@@ -339,14 +399,15 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
if ($this->validateRevision($commit) != IDF_Scm::REVISION_VALID) {
|
if ($this->validateRevision($commit) != IDF_Scm::REVISION_VALID) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$logStyle = new IDF_Scm_Mercurial_LogStyle(IDF_Scm_Mercurial_LogStyle::FULL_LOG);
|
||||||
$tmpl = ($getdiff)
|
$tmpl = ($getdiff)
|
||||||
? Pluf::f('hg_path', 'hg').' log -p -r %s -R %s --template %s'
|
? Pluf::f('hg_path', 'hg').' log --debug -p -r %s -R %s --style %s'
|
||||||
: Pluf::f('hg_path', 'hg').' log -r %s -R %s --template %s';
|
: Pluf::f('hg_path', 'hg').' log --debug -r %s -R %s --style %s';
|
||||||
$cmd = sprintf($tmpl,
|
$cmd = sprintf($tmpl,
|
||||||
escapeshellarg($commit),
|
escapeshellarg($commit),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($this->repo),
|
||||||
$this->hg_log_template);
|
escapeshellarg($logStyle->get()));
|
||||||
|
|
||||||
$out = array();
|
$out = array();
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out);
|
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out);
|
||||||
@@ -363,11 +424,70 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
$log[] = $line;
|
$log[] = $line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$out = self::parseLog($log, 4);
|
$out = self::parseLog($log);
|
||||||
$out[0]->diff = implode("\n", $change);
|
$out[0]->diff = implode("\n", $change);
|
||||||
return $out[0];
|
return $out[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see IDF_Scm::getChanges()
|
||||||
|
*/
|
||||||
|
public function getChanges($commit)
|
||||||
|
{
|
||||||
|
if ($this->validateRevision($commit) != IDF_Scm::REVISION_VALID) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$logStyle = new IDF_Scm_Mercurial_LogStyle(IDF_Scm_Mercurial_LogStyle::CHANGES);
|
||||||
|
$tmpl = Pluf::f('hg_path', 'hg').' log --debug -r %s -R %s --style %s';
|
||||||
|
$cmd = sprintf($tmpl,
|
||||||
|
escapeshellarg($commit),
|
||||||
|
escapeshellarg($this->repo),
|
||||||
|
escapeshellarg($logStyle->get()));
|
||||||
|
$out = array();
|
||||||
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
|
self::exec('IDF_Scm_Mercurial::getChanges', $cmd, $out);
|
||||||
|
$log = self::parseLog($out);
|
||||||
|
// we expect only one log entry that contains all the needed information
|
||||||
|
$log = $log[0];
|
||||||
|
|
||||||
|
$return = (object) array(
|
||||||
|
'additions' => preg_split('/\0/', $log->file_adds, -1, PREG_SPLIT_NO_EMPTY),
|
||||||
|
'deletions' => preg_split('/\0/', $log->file_dels, -1, PREG_SPLIT_NO_EMPTY),
|
||||||
|
'patches' => preg_split('/\0/', $log->file_mods, -1, PREG_SPLIT_NO_EMPTY),
|
||||||
|
// hg has no support for built-in attributes, so this keeps empty
|
||||||
|
'properties' => array(),
|
||||||
|
// these two are filled below
|
||||||
|
'copies' => array(),
|
||||||
|
'renames' => array(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$file_copies = preg_split('/\0/', $log->file_copies, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
|
||||||
|
// copies are treated as renames if they have an add _and_ a drop;
|
||||||
|
// only if they only have an add, but no drop, they're treated as copies
|
||||||
|
for ($i=0; $i<count($file_copies); $i+=2) {
|
||||||
|
$src = $file_copies[$i];
|
||||||
|
$trg = $file_copies[$i+1];
|
||||||
|
$srcidx = array_search($src, $return->deletions);
|
||||||
|
$trgidx = array_search($trg, $return->additions);
|
||||||
|
if ($srcidx !== false && $trgidx !== false) {
|
||||||
|
$return->renames[$src] = $trg;
|
||||||
|
unset($return->deletions[$srcidx]);
|
||||||
|
unset($return->additions[$trgidx]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($srcidx === false && $trgidx !== false) {
|
||||||
|
$return->copies[$src] = $trg;
|
||||||
|
unset($return->additions[$trgidx]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// file sutures (counter-operation to copy) not supported
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a commit is big.
|
* Check if a commit is big.
|
||||||
*
|
*
|
||||||
@@ -388,54 +508,65 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
*/
|
*/
|
||||||
public function getChangeLog($commit='tip', $n=10)
|
public function getChangeLog($commit='tip', $n=10)
|
||||||
{
|
{
|
||||||
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log -R %s -l%s --template %s', escapeshellarg($this->repo), $n, $this->hg_log_template, $commit);
|
$logStyle = new IDF_Scm_Mercurial_LogStyle(IDF_Scm_Mercurial_LogStyle::FULL_LOG);
|
||||||
|
|
||||||
|
// hg accepts revision IDs as arguments to --branch / -b as well and
|
||||||
|
// uses the branch of the revision in question to filter the other
|
||||||
|
// revisions
|
||||||
|
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log --debug -R %s -l%s --style %s -b %s',
|
||||||
|
escapeshellarg($this->repo),
|
||||||
|
$n,
|
||||||
|
escapeshellarg($logStyle->get()),
|
||||||
|
escapeshellarg($commit));
|
||||||
$out = array();
|
$out = array();
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
self::exec('IDF_Scm_Mercurial::getChangeLog', $cmd, $out);
|
self::exec('IDF_Scm_Mercurial::getChangeLog', $cmd, $out);
|
||||||
return self::parseLog($out, 4);
|
return self::parseLog($out);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the log lines of a --pretty=medium log output.
|
* Parse the log lines of our custom style format.
|
||||||
*
|
*
|
||||||
* @param array Lines.
|
* @param array Lines.
|
||||||
* @param int Number of lines in the headers (3)
|
|
||||||
* @return array Change log.
|
* @return array Change log.
|
||||||
*/
|
*/
|
||||||
|
public static function parseLog($lines)
|
||||||
public static function parseLog($lines, $hdrs=3)
|
|
||||||
{
|
{
|
||||||
$res = array();
|
$res = array();
|
||||||
$c = array();
|
$c = array();
|
||||||
$i = 0;
|
$headers_processed = false;
|
||||||
$hdrs += 1;
|
|
||||||
foreach ($lines as $line) {
|
foreach ($lines as $line) {
|
||||||
$i++;
|
if ($line == "\0") {
|
||||||
if (0 === strpos($line, 'changeset:')) {
|
$headers_processed = false;
|
||||||
if (count($c) > 0) {
|
if (count($c) > 0) {
|
||||||
|
if (array_key_exists('full_message', $c))
|
||||||
$c['full_message'] = trim($c['full_message']);
|
$c['full_message'] = trim($c['full_message']);
|
||||||
$res[] = (object) $c;
|
$res[] = (object) $c;
|
||||||
}
|
}
|
||||||
$c = array();
|
|
||||||
$c['commit'] = substr(strrchr($line, ':'), 1);
|
|
||||||
$c['full_message'] = '';
|
|
||||||
$i=1;
|
|
||||||
continue;
|
|
||||||
|
|
||||||
}
|
|
||||||
if ($i == $hdrs) {
|
|
||||||
$c['title'] = trim($line);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$match = array();
|
if (!$headers_processed && empty($line)) {
|
||||||
if (preg_match('/^(\S+):\s*(.*)/', $line, $match)) {
|
$headers_processed = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!$headers_processed && preg_match('/^(\S+):\s*(.*)/', $line, $match)) {
|
||||||
$match[1] = strtolower($match[1]);
|
$match[1] = strtolower($match[1]);
|
||||||
if ($match[1] == 'user') {
|
if ($match[1] == 'changeset') {
|
||||||
|
$c = array();
|
||||||
|
$c['commit'] = $match[2];
|
||||||
|
$c['tree'] = $c['commit'];
|
||||||
|
$c['full_message'] = '';
|
||||||
|
} elseif ($match[1] == 'author') {
|
||||||
$c['author'] = $match[2];
|
$c['author'] = $match[2];
|
||||||
} elseif ($match[1] == 'summary') {
|
|
||||||
$c['title'] = $match[2];
|
|
||||||
} elseif ($match[1] == 'branch') {
|
} elseif ($match[1] == 'branch') {
|
||||||
$c['branch'] = $match[2];
|
$c['branch'] = empty($match[2]) ? 'default' : $match[2];
|
||||||
|
} elseif ($match[1] == 'parents') {
|
||||||
|
$parents = preg_split('/\s+/', $match[2], -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
for ($i=0, $j=count($parents); $i<$j; ++$i) {
|
||||||
|
if ($parents[$i] == '000000000000')
|
||||||
|
unset($parents[$i]);
|
||||||
|
}
|
||||||
|
$c['parents'] = $parents;
|
||||||
} else {
|
} else {
|
||||||
$c[$match[1]] = trim($match[2]);
|
$c[$match[1]] = trim($match[2]);
|
||||||
}
|
}
|
||||||
@@ -444,15 +575,14 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($i > ($hdrs+1)) {
|
if ($headers_processed) {
|
||||||
|
if (empty($c['title']))
|
||||||
|
$c['title'] = trim($line);
|
||||||
|
else
|
||||||
$c['full_message'] .= trim($line)."\n";
|
$c['full_message'] .= trim($line)."\n";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$c['tree'] = !empty($c['commit']) ? trim($c['commit']) : '';
|
|
||||||
$c['branch'] = empty($c['branch']) ? 'default' : $c['branch'];
|
|
||||||
$c['full_message'] = !empty($c['full_message']) ? trim($c['full_message']) : '';
|
|
||||||
$res[] = (object) $c;
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,10 +31,10 @@ class IDF_Scm_Monotone extends IDF_Scm
|
|||||||
/** the minimum supported interface version */
|
/** the minimum supported interface version */
|
||||||
public static $MIN_INTERFACE_VERSION = 13.0;
|
public static $MIN_INTERFACE_VERSION = 13.0;
|
||||||
|
|
||||||
private $stdio;
|
|
||||||
|
|
||||||
private static $instances = array();
|
private static $instances = array();
|
||||||
|
|
||||||
|
private $stdio;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
@@ -609,6 +609,7 @@ class IDF_Scm_Monotone extends IDF_Scm
|
|||||||
'additions' => array(),
|
'additions' => array(),
|
||||||
'deletions' => array(),
|
'deletions' => array(),
|
||||||
'renames' => array(),
|
'renames' => array(),
|
||||||
|
'copies' => array(),
|
||||||
'patches' => array(),
|
'patches' => array(),
|
||||||
'properties' => array(),
|
'properties' => array(),
|
||||||
);
|
);
|
||||||
@@ -698,6 +699,29 @@ class IDF_Scm_Monotone extends IDF_Scm
|
|||||||
return (object) $res;
|
return (object) $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see IDF_Scm::getProperties()
|
||||||
|
*/
|
||||||
|
public function getProperties($rev, $path='')
|
||||||
|
{
|
||||||
|
$out = $this->stdio->exec(array('interface_version'));
|
||||||
|
// support for querying file attributes of committed revisions
|
||||||
|
// was added for mtn 1.1 (interface version 13.1)
|
||||||
|
if (floatval($out) < 13.1)
|
||||||
|
return array();
|
||||||
|
|
||||||
|
$out = $this->stdio->exec(array('get_attributes', $path), array('r' => $rev));
|
||||||
|
$stanzas = IDF_Scm_Monotone_BasicIO::parse($out);
|
||||||
|
$res = array();
|
||||||
|
|
||||||
|
foreach ($stanzas as $stanza) {
|
||||||
|
$line = $stanza[0];
|
||||||
|
$res[$line['values'][0]] = $line['values'][1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see IDF_Scm::getExtraProperties
|
* @see IDF_Scm::getExtraProperties
|
||||||
*/
|
*/
|
||||||
|
@@ -48,7 +48,7 @@ class IDF_Scm_Monotone_Usher
|
|||||||
if ($conn == 'none')
|
if ($conn == 'none')
|
||||||
return array();
|
return array();
|
||||||
|
|
||||||
return preg_split('/[ ]/', $conn);
|
return preg_split('/[ ]/', $conn, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,10 +73,10 @@ class IDF_Scm_Monotone_Usher
|
|||||||
if ($conn == 'none')
|
if ($conn == 'none')
|
||||||
return array();
|
return array();
|
||||||
|
|
||||||
$single_conns = preg_split('/[ ]/', $conn);
|
$single_conns = preg_split('/[ ]/', $conn, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
$ret = array();
|
$ret = array();
|
||||||
foreach ($single_conns as $conn) {
|
foreach ($single_conns as $conn) {
|
||||||
preg_match('/\((\w+)\)([^:]+):(\d+)/', $conn, $matches);
|
preg_match('/\(([^)]+)\)([^:]+):(\d+)/', $conn, $matches);
|
||||||
$ret[$matches[1]][] = (object)array(
|
$ret[$matches[1]][] = (object)array(
|
||||||
'server' => $matches[1],
|
'server' => $matches[1],
|
||||||
'address' => $matches[2],
|
'address' => $matches[2],
|
||||||
|
@@ -48,7 +48,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
|
|
||||||
public function isAvailable()
|
public function isAvailable()
|
||||||
{
|
{
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --xml --username=%s --password=%s %s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --xml --username=%s --password=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo));
|
escapeshellarg($this->repo));
|
||||||
@@ -163,11 +163,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return IDF_Scm::REVISION_VALID;
|
return IDF_Scm::REVISION_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
self::exec('IDF_Scm_Svn::validateRevision', $cmd, $out, $ret);
|
self::exec('IDF_Scm_Svn::validateRevision', $cmd, $out, $ret);
|
||||||
|
|
||||||
@@ -176,7 +176,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return IDF_Scm::REVISION_INVALID;
|
return IDF_Scm::REVISION_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test a given object hash.
|
* Test a given object hash.
|
||||||
*
|
*
|
||||||
@@ -191,11 +190,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Else, test the path on revision
|
// Else, test the path on revision
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --xml --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --xml --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($path)),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo.'/'.self::smartEncode($path)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlInfo = self::shell_exec('IDF_Scm_Svn::testHash', $cmd);
|
$xmlInfo = self::shell_exec('IDF_Scm_Svn::testHash', $cmd);
|
||||||
|
|
||||||
@@ -218,11 +217,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
|
|
||||||
public function getTree($commit, $folder='/', $branch=null)
|
public function getTree($commit, $folder='/', $branch=null)
|
||||||
{
|
{
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --xml --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --no-auth-cache --xml --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($folder)),
|
escapeshellarg($commit),
|
||||||
escapeshellarg($commit));
|
escapeshellarg($this->repo.'/'.self::smartEncode($folder)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getTree', $cmd));
|
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getTree', $cmd));
|
||||||
$res = array();
|
$res = array();
|
||||||
@@ -248,7 +247,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the commit message of a revision revision.
|
* Get the commit message of a revision revision.
|
||||||
*
|
*
|
||||||
@@ -260,11 +258,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
if (isset($this->cache['commitmess'][$rev])) {
|
if (isset($this->cache['commitmess'][$rev])) {
|
||||||
return $this->cache['commitmess'][$rev];
|
return $this->cache['commitmess'][$rev];
|
||||||
}
|
}
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml --limit 1 --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --no-auth-cache --xml --limit 1 --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
try {
|
try {
|
||||||
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getCommitMessage', $cmd));
|
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getCommitMessage', $cmd));
|
||||||
@@ -281,11 +279,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
if ($rev == null) {
|
if ($rev == null) {
|
||||||
$rev = 'HEAD';
|
$rev = 'HEAD';
|
||||||
}
|
}
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --xml --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --xml --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($filename)),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo.'/'.self::smartEncode($filename)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getPathInfo', $cmd));
|
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getPathInfo', $cmd));
|
||||||
if (!isset($xml->entry)) {
|
if (!isset($xml->entry)) {
|
||||||
@@ -308,11 +306,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
|
|
||||||
public function getFile($def, $cmd_only=false)
|
public function getFile($def, $cmd_only=false)
|
||||||
{
|
{
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' cat --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' cat --no-auth-cache --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($def->fullpath)),
|
escapeshellarg($def->rev),
|
||||||
escapeshellarg($def->rev));
|
escapeshellarg($this->repo.'/'.self::smartEncode($def->fullpath)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
return ($cmd_only) ?
|
return ($cmd_only) ?
|
||||||
$cmd : self::shell_exec('IDF_Scm_Svn::getFile', $cmd);
|
$cmd : self::shell_exec('IDF_Scm_Svn::getFile', $cmd);
|
||||||
@@ -329,7 +327,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return $this->cache['branches'];
|
return $this->cache['branches'];
|
||||||
}
|
}
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --username=%s --password=%s %s@HEAD',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --no-auth-cache --username=%s --password=%s --revision=HEAD %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/branches'));
|
escapeshellarg($this->repo.'/branches'));
|
||||||
@@ -344,7 +342,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ksort($res);
|
ksort($res);
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --username=%s --password=%s %s@HEAD',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --username=%s --password=%s --revision=HEAD %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/trunk'));
|
escapeshellarg($this->repo.'/trunk'));
|
||||||
@@ -368,7 +366,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return $this->cache['tags'];
|
return $this->cache['tags'];
|
||||||
}
|
}
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --username=%s --password=%s %s@HEAD',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' ls --no-auth-cache --username=%s --password=%s --revision=HEAD %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/tags'));
|
escapeshellarg($this->repo.'/tags'));
|
||||||
@@ -412,7 +410,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get commit details.
|
* Get commit details.
|
||||||
*
|
*
|
||||||
@@ -426,11 +423,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml --limit 1 -v --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --no-auth-cache --xml --limit 1 -v --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($commit),
|
||||||
escapeshellarg($commit));
|
escapeshellarg($this->repo));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlRes = self::shell_exec('IDF_Scm_Svn::getCommit', $cmd);
|
$xmlRes = self::shell_exec('IDF_Scm_Svn::getCommit', $cmd);
|
||||||
$xml = simplexml_load_string($xmlRes);
|
$xml = simplexml_load_string($xmlRes);
|
||||||
@@ -473,7 +470,7 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
private function getDiff($rev='HEAD')
|
private function getDiff($rev='HEAD')
|
||||||
{
|
{
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' diff -c %s --username=%s --password=%s %s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' diff --no-auth-cache -c %s --username=%s --password=%s %s',
|
||||||
escapeshellarg($rev),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
@@ -482,6 +479,88 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return self::shell_exec('IDF_Scm_Svn::getDiff', $cmd);
|
return self::shell_exec('IDF_Scm_Svn::getDiff', $cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see IDF_Scm::getChanges()
|
||||||
|
*/
|
||||||
|
public function getChanges($commit)
|
||||||
|
{
|
||||||
|
if ($this->validateRevision($commit) != IDF_Scm::REVISION_VALID) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml -v --no-auth-cache -r %s --username=%s --password=%s %s',
|
||||||
|
escapeshellarg($commit),
|
||||||
|
escapeshellarg($this->username),
|
||||||
|
escapeshellarg($this->password),
|
||||||
|
escapeshellarg($this->repo));
|
||||||
|
$out = array();
|
||||||
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
|
$out = self::shell_exec('IDF_Scm_Svn::getChanges', $cmd);
|
||||||
|
$xml = simplexml_load_string($out);
|
||||||
|
if (count($xml) == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$entry = current($xml);
|
||||||
|
|
||||||
|
$return = (object) array(
|
||||||
|
'additions' => array(),
|
||||||
|
'deletions' => array(),
|
||||||
|
'patches' => array(),
|
||||||
|
// while SVN has support for attributes, we cannot see their changes
|
||||||
|
// in the log's XML unfortunately
|
||||||
|
'properties' => array(),
|
||||||
|
'copies' => array(),
|
||||||
|
'renames' => array(),
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($entry->paths->path as $p) {
|
||||||
|
$path = (string) $p;
|
||||||
|
foreach ($p->attributes() as $k => $v) {
|
||||||
|
$key = (string) $k;
|
||||||
|
$val = (string) $v;
|
||||||
|
if ($key != 'action')
|
||||||
|
continue;
|
||||||
|
if ($val == 'M')
|
||||||
|
$return->patches[] = $path;
|
||||||
|
else if ($val == 'A')
|
||||||
|
$return->additions[] = $path;
|
||||||
|
else if ($val == 'D')
|
||||||
|
$return->deletions[] = $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copies are treated as renames if they have an add _and_ a drop;
|
||||||
|
// only if they only have an add, but no drop, they're treated as copies
|
||||||
|
foreach ($entry->paths->path as $p) {
|
||||||
|
$trg = (string) $p;
|
||||||
|
$src = null;
|
||||||
|
foreach ($p->attributes() as $k => $v) {
|
||||||
|
if ((string) $k == 'copyfrom-path') {
|
||||||
|
$src = (string) $v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($src == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$srcidx = array_search($src, $return->deletions);
|
||||||
|
$trgidx = array_search($trg, $return->additions);
|
||||||
|
if ($srcidx !== false && $trgidx !== false) {
|
||||||
|
$return->renames[$src] = $trg;
|
||||||
|
unset($return->deletions[$srcidx]);
|
||||||
|
unset($return->additions[$trgidx]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($srcidx === false && $trgidx !== false) {
|
||||||
|
$return->copies[$src] = $trg;
|
||||||
|
unset($return->additions[$trgidx]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// file sutures (counter-operation to copy) not supported
|
||||||
|
}
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get latest changes.
|
* Get latest changes.
|
||||||
@@ -498,12 +577,12 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
$branch = 'HEAD';
|
$branch = 'HEAD';
|
||||||
}
|
}
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --xml -v --limit %s --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' log --no-auth-cache --xml -v --limit %s --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($n),
|
escapeshellarg($n),
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($branch),
|
||||||
escapeshellarg($branch));
|
escapeshellarg($this->repo));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlRes = self::shell_exec('IDF_Scm_Svn::getChangeLog', $cmd);
|
$xmlRes = self::shell_exec('IDF_Scm_Svn::getChangeLog', $cmd);
|
||||||
$xml = simplexml_load_string($xmlRes);
|
$xml = simplexml_load_string($xmlRes);
|
||||||
@@ -520,7 +599,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get additionnals properties on path and revision
|
* Get additionnals properties on path and revision
|
||||||
*
|
*
|
||||||
@@ -531,11 +609,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
public function getProperties($rev, $path='')
|
public function getProperties($rev, $path='')
|
||||||
{
|
{
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' proplist --xml --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' proplist --no-auth-cache --xml --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($path)),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo.'/'.self::smartEncode($path)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlProps = self::shell_exec('IDF_Scm_Svn::getProperties', $cmd);
|
$xmlProps = self::shell_exec('IDF_Scm_Svn::getProperties', $cmd);
|
||||||
$props = simplexml_load_string($xmlProps);
|
$props = simplexml_load_string($xmlProps);
|
||||||
@@ -554,7 +632,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a specific additionnal property on path and revision
|
* Get a specific additionnal property on path and revision
|
||||||
*
|
*
|
||||||
@@ -566,12 +643,12 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
private function getProperty($property, $rev, $path='')
|
private function getProperty($property, $rev, $path='')
|
||||||
{
|
{
|
||||||
$res = array();
|
$res = array();
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' propget --xml %s --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' propget --no-auth-cache --xml %s --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($property),
|
escapeshellarg($property),
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo.'/'.self::smartEncode($path)),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo.'/'.self::smartEncode($path)));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlProp = self::shell_exec('IDF_Scm_Svn::getProperty', $cmd);
|
$xmlProp = self::shell_exec('IDF_Scm_Svn::getProperty', $cmd);
|
||||||
$prop = simplexml_load_string($xmlProp);
|
$prop = simplexml_load_string($xmlProp);
|
||||||
@@ -579,7 +656,6 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
return (string) $prop->target->property;
|
return (string) $prop->target->property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of the last commit in the repository.
|
* Get the number of the last commit in the repository.
|
||||||
*
|
*
|
||||||
@@ -590,11 +666,11 @@ class IDF_Scm_Svn extends IDF_Scm
|
|||||||
public function getLastCommit($rev='HEAD')
|
public function getLastCommit($rev='HEAD')
|
||||||
{
|
{
|
||||||
$xmlInfo = '';
|
$xmlInfo = '';
|
||||||
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --xml --username=%s --password=%s %s@%s',
|
$cmd = sprintf(Pluf::f('svn_path', 'svn').' info --no-auth-cache --xml --username=%s --password=%s --revision=%s %s',
|
||||||
escapeshellarg($this->username),
|
escapeshellarg($this->username),
|
||||||
escapeshellarg($this->password),
|
escapeshellarg($this->password),
|
||||||
escapeshellarg($this->repo),
|
escapeshellarg($rev),
|
||||||
escapeshellarg($rev));
|
escapeshellarg($this->repo));
|
||||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||||
$xmlInfo = self::shell_exec('IDF_Scm_Svn::getLastCommit', $cmd);
|
$xmlInfo = self::shell_exec('IDF_Scm_Svn::getLastCommit', $cmd);
|
||||||
|
|
||||||
|
@@ -90,40 +90,69 @@ class IDF_Template_MarkdownPrefilter extends Pluf_Text_HTML_Filter
|
|||||||
);
|
);
|
||||||
|
|
||||||
public $allowed = array(
|
public $allowed = array(
|
||||||
'a' => array('href', 'title', 'rel'),
|
'a' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'abbr' => array('title'),
|
'href', 'hreflang', 'rel'),
|
||||||
'address' => array(),
|
'abbr' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'b' => array(),
|
'address' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'blockquote' => array(),
|
'b' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'br' => array(),
|
'blockquote' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'caption' => array(),
|
'cite'),
|
||||||
'code' => array(),
|
'br' => array('class', 'id', 'style', 'title'),
|
||||||
'dd' => array(),
|
'caption' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'del' => array('cite', 'class', 'datetime', 'dir', 'id', 'title'),
|
'align'), // deprecated attribute),
|
||||||
'div' => array('align', 'class'),
|
'code' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'dl' => array(),
|
'dd' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'dt' => array(),
|
'del' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'em' => array(),
|
'cite', 'datetime'),
|
||||||
'h1' => array('id'),
|
'div' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'h2' => array('id'),
|
'align'), // deprecated attribute
|
||||||
'h3' => array('id'),
|
'dl' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'h4' => array('id'),
|
'dt' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'h5' => array('id'),
|
'em' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
'h6' => array('id'),
|
'font' => array('class', 'dir', 'id', 'style', 'title', // deprecated element
|
||||||
'hr' => array(),
|
'color', 'face', 'size'), // deprecated attribute
|
||||||
'i' => array(),
|
'h1' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'img' => array('src', 'class', 'alt', 'height', 'width', 'style'),
|
'align'), // deprecated attribute
|
||||||
'ins' => array('cite', 'class', 'datetime', 'dir', 'id', 'title'),
|
'h2' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'li' => array(),
|
'align'), // deprecated attribute
|
||||||
'ol' => array(),
|
'h3' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'p' => array('align', 'class'),
|
'align'), // deprecated attribute
|
||||||
'pre' => array(),
|
'h4' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'strong' => array(),
|
'align'), // deprecated attribute
|
||||||
'table' => array('summary'),
|
'h5' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'td' => array('style'),
|
'align'), // deprecated attribute
|
||||||
'th' => array(),
|
'h6' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
'tr' => array(),
|
'align'), // deprecated attribute
|
||||||
'ul' => array(),
|
'hr' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'align', 'noshade', 'size', 'width'), // deprecated attribute
|
||||||
|
'i' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
|
'img' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'src', 'alt', 'height', 'width'),
|
||||||
|
'ins' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'cite', 'datetime'),
|
||||||
|
'li' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'type'), // deprecated attribute
|
||||||
|
'ol' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'type'), // deprecated attribute
|
||||||
|
'p' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'align'), // deprecated attribute
|
||||||
|
'pre' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'width'), // deprecated attribute
|
||||||
|
'strong' => array('class', 'dir', 'id', 'style', 'title'),
|
||||||
|
'table' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'border', 'cellpadding', 'cellspacing', 'frame', 'rules', 'summary', 'width',
|
||||||
|
'align', 'bgcolor'), // deprecated attribute
|
||||||
|
'td' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'align', 'colspan', 'headers', 'rowspan', 'scope', 'valign',
|
||||||
|
'bgcolor', 'height', 'nowrap', 'width'), // deprecated attribute
|
||||||
|
'th' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'align', 'colspan', 'rowspan', 'scope', 'valign',
|
||||||
|
'bgcolor', 'height', 'nowrap', 'width'), // deprecated attribute
|
||||||
|
'tr' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'align', 'valign',
|
||||||
|
'bgcolor'), // deprecated attribute
|
||||||
|
'ul' => array('class', 'dir', 'id', 'style', 'title',
|
||||||
|
'type'), // deprecated attribute
|
||||||
);
|
);
|
||||||
// tags which should always be self-closing (e.g. "<img />")
|
// tags which should always be self-closing (e.g. "<img />")
|
||||||
public $no_close = array(
|
public $no_close = array(
|
||||||
|
@@ -77,6 +77,12 @@ class IDF_Upload extends Pluf_Model
|
|||||||
'default' => 0,
|
'default' => 0,
|
||||||
'verbose' => __('file size in bytes'),
|
'verbose' => __('file size in bytes'),
|
||||||
),
|
),
|
||||||
|
'md5' =>
|
||||||
|
array(
|
||||||
|
'type' => 'Pluf_DB_Field_Text',
|
||||||
|
'blank' => true,
|
||||||
|
'verbose' => __('MD5'),
|
||||||
|
),
|
||||||
'submitter' =>
|
'submitter' =>
|
||||||
array(
|
array(
|
||||||
'type' => 'Pluf_DB_Field_Foreignkey',
|
'type' => 'Pluf_DB_Field_Foreignkey',
|
||||||
@@ -144,6 +150,7 @@ class IDF_Upload extends Pluf_Model
|
|||||||
if ($this->id == '') {
|
if ($this->id == '') {
|
||||||
$this->creation_dtime = gmdate('Y-m-d H:i:s');
|
$this->creation_dtime = gmdate('Y-m-d H:i:s');
|
||||||
$this->modif_dtime = gmdate('Y-m-d H:i:s');
|
$this->modif_dtime = gmdate('Y-m-d H:i:s');
|
||||||
|
$this->md5 = md5_file ($this->getFullPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +167,11 @@ class IDF_Upload extends Pluf_Model
|
|||||||
return Pluf::f('url_upload').'/'.$project->shortname.'/files/'.$this->file;
|
return Pluf::f('url_upload').'/'.$project->shortname.'/files/'.$this->file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFullPath()
|
||||||
|
{
|
||||||
|
return(Pluf::f('upload_path').'/'.$this->get_project()->shortname.'/files/'.$this->file);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We drop the information from the timeline.
|
* We drop the information from the timeline.
|
||||||
*/
|
*/
|
||||||
|
@@ -190,17 +190,37 @@ class IDF_Views_Download
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Download a file.
|
* Download the file with the given name.
|
||||||
*/
|
*/
|
||||||
public $download_precond = array('IDF_Precondition::accessDownloads');
|
public $download_precond = array('IDF_Precondition::accessDownloads');
|
||||||
public function download($request, $match)
|
public function download($request, $match)
|
||||||
{
|
{
|
||||||
$prj = $request->project;
|
$prj = $request->project;
|
||||||
$upload = Pluf_Shortcuts_GetObjectOr404('IDF_Upload', $match[2]);
|
$sql = new Pluf_SQL('file=%s', array($match[2]));
|
||||||
|
$upload = Pluf::factory('IDF_Upload')->getOne(array('filter' => $sql->gen()));
|
||||||
|
if (!$upload) throw new Pluf_HTTP_Error404();
|
||||||
$prj->inOr404($upload);
|
$prj->inOr404($upload);
|
||||||
$upload->downloads += 1;
|
$upload->downloads += 1;
|
||||||
$upload->update();
|
$upload->update();
|
||||||
return new Pluf_HTTP_Response_Redirect($upload->getAbsoluteUrl($prj));
|
$path = $upload->getFullPath();
|
||||||
|
$mime = IDF_FileUtil::getMimeType($path);
|
||||||
|
$render = new Pluf_HTTP_Response_File($path, $mime[0]);
|
||||||
|
$render->headers["Content-MD5"] = $upload->md5;
|
||||||
|
return $render;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download the file with the given ID (for legacy links).
|
||||||
|
*/
|
||||||
|
public $downloadById_precond = array('IDF_Precondition::accessDownloads');
|
||||||
|
public function downloadById($request, $match)
|
||||||
|
{
|
||||||
|
$upload = Pluf_Shortcuts_GetObjectOr404('IDF_Upload', $match[2]);
|
||||||
|
return new Pluf_HTTP_Response_Redirect(
|
||||||
|
Pluf_HTTP_URL_urlForView('IDF_Views_Download::download', array(
|
||||||
|
$match[1], $upload->file
|
||||||
|
)), 301
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -77,6 +77,79 @@ class IDF_Views_Issue
|
|||||||
$params, $request);
|
$params, $request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View the issue summary.
|
||||||
|
* TODO Add thoses data in cache, and process it only after an issue update
|
||||||
|
*/
|
||||||
|
public $summary_precond = array('IDF_Precondition::accessIssues');
|
||||||
|
public function summary($request, $match)
|
||||||
|
{
|
||||||
|
$tagStatistics = array();
|
||||||
|
$ownerStatistics = array();
|
||||||
|
$status = array();
|
||||||
|
$isTrackerEmpty = false;
|
||||||
|
|
||||||
|
$prj = $request->project;
|
||||||
|
$opened = $prj->getIssueCountByStatus('open');
|
||||||
|
$closed = $prj->getIssueCountByStatus('closed');
|
||||||
|
|
||||||
|
// Check if the tracker is empty
|
||||||
|
if ($opened === 0 && $closed === 0) {
|
||||||
|
$isTrackerEmpty = true;
|
||||||
|
} else {
|
||||||
|
if ($opened > 0 || $closed > 0) {
|
||||||
|
// Issue status statistics
|
||||||
|
$status['Open'] = array($opened, (int)(100 * $opened / ($opened + $closed)));
|
||||||
|
$status['Closed'] = array($closed, (int)(100 * $closed / ($opened + $closed)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opened > 0) {
|
||||||
|
// Issue owner statistics
|
||||||
|
$owners = $prj->getIssueCountByOwner('open');
|
||||||
|
foreach ($owners as $user => $nb) {
|
||||||
|
if ($user === '') {
|
||||||
|
$key = __('Not assigned');
|
||||||
|
} else {
|
||||||
|
$obj = Pluf::factory('Pluf_User')->getOne(array('filter'=>'id='.$user));
|
||||||
|
$key = $obj->first_name . ' ' . $obj->last_name;
|
||||||
|
}
|
||||||
|
$ownerStatistics[$key] = array($nb, (int)(100 * $nb / $opened));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Issue class tag statistics
|
||||||
|
$tags = $prj->getTagCloud();
|
||||||
|
foreach ($tags as $t) {
|
||||||
|
$tagStatistics[$t->class][$t->name] = array($t->nb_use, $t->id);
|
||||||
|
}
|
||||||
|
foreach($tagStatistics as $k => $v) {
|
||||||
|
$nbIssueInClass = 0;
|
||||||
|
foreach ($v as $val) {
|
||||||
|
$nbIssueInClass += $val[0];
|
||||||
|
}
|
||||||
|
foreach ($v as $kk => $vv) {
|
||||||
|
$tagStatistics[$k][$kk] = array($vv[0], (int)(100 * $vv[0] / $nbIssueInClass), $vv[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort
|
||||||
|
krsort($tagStatistics);
|
||||||
|
arsort($ownerStatistics);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$title = sprintf(__('Summary of tracked issues in %s.'), (string) $prj);
|
||||||
|
|
||||||
|
return Pluf_Shortcuts_RenderToResponse('idf/issues/summary.html',
|
||||||
|
array('page_title' => $title,
|
||||||
|
'trackerEmpty' => $isTrackerEmpty,
|
||||||
|
'project' => $prj,
|
||||||
|
'tagStatistics' => $tagStatistics,
|
||||||
|
'ownerStatistics' => $ownerStatistics,
|
||||||
|
'status' => $status,
|
||||||
|
),
|
||||||
|
$request);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* View the issues watch list of a given user.
|
* View the issues watch list of a given user.
|
||||||
* Limited to a specified project
|
* Limited to a specified project
|
||||||
@@ -674,7 +747,13 @@ class IDF_Views_Issue
|
|||||||
else {
|
else {
|
||||||
// ID-based search
|
// ID-based search
|
||||||
if (is_numeric($query)) {
|
if (is_numeric($query)) {
|
||||||
$sql = new Pluf_SQL('project=%s AND id LIKE %s', array($prj->id, $query.'%'));
|
$sql = 'project=%s AND CAST(id AS VARCHAR) LIKE %s';
|
||||||
|
// MySQL can't cast to VARCHAR and a CAST to CHAR converts
|
||||||
|
// the whole number, not just the first digit
|
||||||
|
if (strtolower(Pluf::f('db_engine')) == 'mysql') {
|
||||||
|
$sql = 'project=%s AND CAST(id AS CHAR) LIKE %s';
|
||||||
|
}
|
||||||
|
$sql = new Pluf_SQL($sql, array($prj->id, $query.'%'));
|
||||||
$tmp = Pluf::factory('IDF_Issue')->getList(array(
|
$tmp = Pluf::factory('IDF_Issue')->getList(array(
|
||||||
'filter' => $sql->gen(),
|
'filter' => $sql->gen(),
|
||||||
'order' => 'id ASC'
|
'order' => 'id ASC'
|
||||||
|
@@ -66,7 +66,8 @@ class IDF_Views_Source
|
|||||||
'commit' => $commit,
|
'commit' => $commit,
|
||||||
'branches' => $branches,
|
'branches' => $branches,
|
||||||
);
|
);
|
||||||
return Pluf_Shortcuts_RenderToResponse('idf/source/invalid_revision.html',
|
$scmConf = $request->conf->getVal('scm', 'git');
|
||||||
|
return Pluf_Shortcuts_RenderToResponse('idf/source/'.$scmConf.'/invalid_revision.html',
|
||||||
$params, $request);
|
$params, $request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,12 +308,7 @@ class IDF_Views_Source
|
|||||||
$cobject->diff = null;
|
$cobject->diff = null;
|
||||||
$diff->parse();
|
$diff->parse();
|
||||||
$scmConf = $request->conf->getVal('scm', 'git');
|
$scmConf = $request->conf->getVal('scm', 'git');
|
||||||
try {
|
|
||||||
$changes = $scm->getChanges($commit);
|
$changes = $scm->getChanges($commit);
|
||||||
} catch (Exception $e) {
|
|
||||||
// getChanges is not yes supported by this backend.
|
|
||||||
$changes = array();
|
|
||||||
}
|
|
||||||
$branches = $scm->getBranches();
|
$branches = $scm->getBranches();
|
||||||
$in_branches = $scm->inBranches($cobject->commit, '');
|
$in_branches = $scm->inBranches($cobject->commit, '');
|
||||||
$tags = $scm->getTags();
|
$tags = $scm->getTags();
|
||||||
|
@@ -118,6 +118,11 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/issues/$#',
|
|||||||
'model' => 'IDF_Views_Issue',
|
'model' => 'IDF_Views_Issue',
|
||||||
'method' => 'index');
|
'method' => 'index');
|
||||||
|
|
||||||
|
$ctl[] = array('regex' => '#^/p/([\-\w]+)/issues/summary/$#',
|
||||||
|
'base' => $base,
|
||||||
|
'model' => 'IDF_Views_Issue',
|
||||||
|
'method' => 'summary');
|
||||||
|
|
||||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/issues/search/$#',
|
$ctl[] = array('regex' => '#^/p/([\-\w]+)/issues/search/$#',
|
||||||
'base' => $base,
|
'base' => $base,
|
||||||
'model' => 'IDF_Views_Issue',
|
'model' => 'IDF_Views_Issue',
|
||||||
@@ -299,11 +304,16 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/(\d+)/$#',
|
|||||||
'model' => 'IDF_Views_Download',
|
'model' => 'IDF_Views_Download',
|
||||||
'method' => 'view');
|
'method' => 'view');
|
||||||
|
|
||||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/(\d+)/get/$#',
|
$ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/get/(.+)$#',
|
||||||
'base' => $base,
|
'base' => $base,
|
||||||
'model' => 'IDF_Views_Download',
|
'model' => 'IDF_Views_Download',
|
||||||
'method' => 'download');
|
'method' => 'download');
|
||||||
|
|
||||||
|
$ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/(\d+)/get/$#',
|
||||||
|
'base' => $base,
|
||||||
|
'model' => 'IDF_Views_Download',
|
||||||
|
'method' => 'downloadById');
|
||||||
|
|
||||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/create/$#',
|
$ctl[] = array('regex' => '#^/p/([\-\w]+)/downloads/create/$#',
|
||||||
'base' => $base,
|
'base' => $base,
|
||||||
'model' => 'IDF_Views_Download',
|
'model' => 'IDF_Views_Download',
|
||||||
|
@@ -130,7 +130,7 @@ msgstr "Entferntes Subversion-Depot"
|
|||||||
|
|
||||||
#: IDF/Form/Admin/ProjectCreate.php:92 IDF/Form/SourceConf.php:40
|
#: IDF/Form/Admin/ProjectCreate.php:92 IDF/Form/SourceConf.php:40
|
||||||
msgid "Repository username"
|
msgid "Repository username"
|
||||||
msgstr "Depot-Nutzername"
|
msgstr "Depot-Benutzername"
|
||||||
|
|
||||||
#: IDF/Form/Admin/ProjectCreate.php:99 IDF/Form/SourceConf.php:47
|
#: IDF/Form/Admin/ProjectCreate.php:99 IDF/Form/SourceConf.php:47
|
||||||
msgid "Repository password"
|
msgid "Repository password"
|
||||||
@@ -156,11 +156,11 @@ msgstr "Projekt-Eigentümer"
|
|||||||
#: IDF/Form/Admin/ProjectCreate.php:123 IDF/Form/Admin/ProjectUpdate.php:76
|
#: IDF/Form/Admin/ProjectCreate.php:123 IDF/Form/Admin/ProjectUpdate.php:76
|
||||||
#: IDF/Form/MembersConf.php:54 IDF/Form/TabsConf.php:52
|
#: IDF/Form/MembersConf.php:54 IDF/Form/TabsConf.php:52
|
||||||
msgid "Project members"
|
msgid "Project members"
|
||||||
msgstr "Projekt-Mitglieder"
|
msgstr "Projektmitglieder"
|
||||||
|
|
||||||
#: IDF/Form/Admin/ProjectCreate.php:136
|
#: IDF/Form/Admin/ProjectCreate.php:136
|
||||||
msgid "Project template"
|
msgid "Project template"
|
||||||
msgstr "Projekt-Vorlage"
|
msgstr "Projektvorlage"
|
||||||
|
|
||||||
#: IDF/Form/Admin/ProjectCreate.php:138
|
#: IDF/Form/Admin/ProjectCreate.php:138
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -168,7 +168,7 @@ msgid ""
|
|||||||
"general configuration will be taken from the template project."
|
"general configuration will be taken from the template project."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Benutze das vorgegebene Projekt, um ein neues zu initialisieren. "
|
"Benutze das vorgegebene Projekt, um ein neues zu initialisieren. "
|
||||||
"Zugriffsrechte und allgemeine Konfiguration werden von der Projekt-Vorlage "
|
"Zugriffsrechte und allgemeine Konfiguration werden von der Projektvorlage "
|
||||||
"übernommen."
|
"übernommen."
|
||||||
|
|
||||||
#: IDF/Form/Admin/ProjectCreate.php:185
|
#: IDF/Form/Admin/ProjectCreate.php:185
|
||||||
@@ -350,7 +350,7 @@ msgid ""
|
|||||||
"The password must be hard for other people to guess, but easy for the user "
|
"The password must be hard for other people to guess, but easy for the user "
|
||||||
"to remember."
|
"to remember."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Passwort sollte für andere Leute schwer zu erraten, aber für den Nutzer "
|
"Das Passwort sollte für andere Leute schwer zu erraten, aber für den Benutzer "
|
||||||
"einfach zu erinnern sein."
|
"einfach zu erinnern sein."
|
||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:89
|
#: IDF/Form/Admin/UserUpdate.php:89
|
||||||
@@ -366,7 +366,7 @@ msgstr "Beschreibung"
|
|||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:109 IDF/Form/UserAccount.php:110
|
#: IDF/Form/Admin/UserUpdate.php:109 IDF/Form/UserAccount.php:110
|
||||||
msgid "Twitter username"
|
msgid "Twitter username"
|
||||||
msgstr "Twitter-Nutzername"
|
msgstr "Twitter-Benutzername"
|
||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:119 IDF/Form/UserAccount.php:120
|
#: IDF/Form/Admin/UserUpdate.php:119 IDF/Form/UserAccount.php:120
|
||||||
msgid "Public email address"
|
msgid "Public email address"
|
||||||
@@ -403,7 +403,7 @@ msgstr "Stab"
|
|||||||
#: IDF/Form/Admin/UserUpdate.php:164
|
#: IDF/Form/Admin/UserUpdate.php:164
|
||||||
msgid "If you give staff rights to a user, you really need to trust them."
|
msgid "If you give staff rights to a user, you really need to trust them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du einen Nutzer zum Stab hinzufügst, solltest Du ihm wirklich trauen."
|
"Wenn Du einen Benutzer zum Stab hinzufügst, solltest Du ihm wirklich trauen."
|
||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:172 IDF/Views/Admin.php:213
|
#: IDF/Form/Admin/UserUpdate.php:172 IDF/Views/Admin.php:213
|
||||||
msgid "Active"
|
msgid "Active"
|
||||||
@@ -414,8 +414,8 @@ msgid ""
|
|||||||
"If the user is not getting the confirmation email or is abusing the system, "
|
"If the user is not getting the confirmation email or is abusing the system, "
|
||||||
"you can directly enable or disable their account here."
|
"you can directly enable or disable their account here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn der Nutzer keine Bestätigungs-E-Mail erhält oder das System "
|
"Wenn der Benutzer keine Bestätigungs-E-Mail erhält oder das System "
|
||||||
"missbraucht, kannst Du sein Konto hier direkt aktivieren oder deaktivieren."
|
"missbraucht, kannst Du sein Benutzerkonto hier direkt aktivieren oder deaktivieren."
|
||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:274
|
#: IDF/Form/Admin/UserUpdate.php:274
|
||||||
msgid "--- is not a valid first name."
|
msgid "--- is not a valid first name."
|
||||||
@@ -425,7 +425,7 @@ msgstr "--- ist kein gültiger Vorname"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A user with this email already exists, please provide another email address."
|
"A user with this email already exists, please provide another email address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ein Nutzer mit dieser E-Mail-Adresse existiert bereits, bitte gib eine "
|
"Ein Benutzer mit dieser E-Mail-Adresse existiert bereits, bitte gib eine "
|
||||||
"andere E-Mail-Adresse an."
|
"andere E-Mail-Adresse an."
|
||||||
|
|
||||||
#: IDF/Form/Admin/UserUpdate.php:301 IDF/Form/UserAccount.php:389
|
#: IDF/Form/Admin/UserUpdate.php:301 IDF/Form/UserAccount.php:389
|
||||||
@@ -678,7 +678,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/Form/Register.php:148
|
#: IDF/Form/Register.php:148
|
||||||
msgid "Confirm the creation of your account."
|
msgid "Confirm the creation of your account."
|
||||||
msgstr "Bestätige die Erstellung deines Accounts."
|
msgstr "Bestätige die Erstellung Deines Benutzerkontos."
|
||||||
|
|
||||||
#: IDF/Form/RegisterConfirmation.php:40 IDF/Form/RegisterInputKey.php:36
|
#: IDF/Form/RegisterConfirmation.php:40 IDF/Form/RegisterInputKey.php:36
|
||||||
msgid "Your confirmation key"
|
msgid "Your confirmation key"
|
||||||
@@ -705,7 +705,7 @@ msgid ""
|
|||||||
"This account has already been confirmed. Maybe should you try to recover "
|
"This account has already been confirmed. Maybe should you try to recover "
|
||||||
"your password using the help link."
|
"your password using the help link."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dieses Konto wurde bereits bestätigt. Vielleicht möchtest Du versuchen, Dein "
|
"Dieses Benutzerkonto wurde bereits bestätigt. Vielleicht möchtest Du versuchen, Dein "
|
||||||
"Passwort über den Hilfe-Link wiederherzustellen?"
|
"Passwort über den Hilfe-Link wiederherzustellen?"
|
||||||
|
|
||||||
#: IDF/Form/ReviewCreate.php:74
|
#: IDF/Form/ReviewCreate.php:74
|
||||||
@@ -1204,7 +1204,7 @@ msgstr ""
|
|||||||
"Quellcode.<br />\n"
|
"Quellcode.<br />\n"
|
||||||
"Wenn Du den Zugriff auf den Quellcode beschränkst, wird kein anonymer "
|
"Wenn Du den Zugriff auf den Quellcode beschränkst, wird kein anonymer "
|
||||||
"Zugriff<br />\n"
|
"Zugriff<br />\n"
|
||||||
"angeboten und die Nutzer müssen sich mit ihrem Passwort oder "
|
"angeboten und die Benutzer müssen sich mit ihrem Passwort oder "
|
||||||
"öffentlichen<br />\n"
|
"öffentlichen<br />\n"
|
||||||
"Schlüssel authentifizieren."
|
"Schlüssel authentifizieren."
|
||||||
|
|
||||||
@@ -1241,7 +1241,7 @@ msgid ""
|
|||||||
"\" will default to authorized users only."
|
"\" will default to authorized users only."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du ein Projekt als privat markierst, haben nur Projektmitglieder und "
|
"Wenn Du ein Projekt als privat markierst, haben nur Projektmitglieder und "
|
||||||
"Administratoren zusammen mit den von Dir extra authorisierten Nutzern "
|
"Administratoren zusammen mit den von Dir extra authorisierten Benutzern "
|
||||||
"Zugriff darauf. Du kannst weiterhin zusätzliche Zugriffsrechte für bestimmte "
|
"Zugriff darauf. Du kannst weiterhin zusätzliche Zugriffsrechte für bestimmte "
|
||||||
"Projektfunktionen vergeben, aber die Einstellungen \"Für alle offen\" und "
|
"Projektfunktionen vergeben, aber die Einstellungen \"Für alle offen\" und "
|
||||||
"\"Angemeldete Benutzer\" werden standardmäßig nur authorisierte Benutzer "
|
"\"Angemeldete Benutzer\" werden standardmäßig nur authorisierte Benutzer "
|
||||||
@@ -1287,7 +1287,7 @@ msgid ""
|
|||||||
"<a href=\"%%url%%\">Sign in or create your account</a> to create issues or "
|
"<a href=\"%%url%%\">Sign in or create your account</a> to create issues or "
|
||||||
"add comments"
|
"add comments"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<a href=\"%%url%%\">Melde Dich an oder lege ein Konto an</a>, um Tickets "
|
"<a href=\"%%url%%\">Melde Dich an oder lege ein Benutzerkonto an</a>, um Tickets "
|
||||||
"oder Kommentare hinzuzufügen"
|
"oder Kommentare hinzuzufügen"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/base-full.html.php:4
|
#: IDF/gettexttemplates/idf/base-full.html.php:4
|
||||||
@@ -1587,7 +1587,7 @@ msgid ""
|
|||||||
"You need to create an account on <a href=\"http://en.gravatar.com/"
|
"You need to create an account on <a href=\"http://en.gravatar.com/"
|
||||||
"\">Gravatar</a>, this takes about 5 minutes and is free."
|
"\">Gravatar</a>, this takes about 5 minutes and is free."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du musst Dir einen Account auf <a href=\"http://de.gravatar.com/\">Gravatar</"
|
"Du musst Dir ein Benutzerkonto auf <a href=\"http://de.gravatar.com/\">Gravatar.com</"
|
||||||
"a> erstellen, es dauert nur 5 Minuten und ist kostenfrei."
|
"a> erstellen, es dauert nur 5 Minuten und ist kostenfrei."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:10
|
#: IDF/gettexttemplates/idf/faq.html.php:10
|
||||||
@@ -1632,7 +1632,7 @@ msgstr "<kbd>Umschalt+h</kbd>: Diese Hilfeseite."
|
|||||||
#: IDF/gettexttemplates/idf/faq.html.php:18
|
#: IDF/gettexttemplates/idf/faq.html.php:18
|
||||||
msgid "If you are in a project, you have the following shortcuts:"
|
msgid "If you are in a project, you have the following shortcuts:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Befindest Du Dich in einem Projekt, kannst du die folgenden Tastaturkürzel "
|
"Befindest Du Dich in einem Projekt, kannst Du die folgenden Tastaturkürzel "
|
||||||
"benutzen:"
|
"benutzen:"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:19
|
#: IDF/gettexttemplates/idf/faq.html.php:19
|
||||||
@@ -1874,28 +1874,28 @@ msgstr "Es wird eine Bestätigung verlangt."
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:3
|
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:3
|
||||||
#: IDF/Views/Admin.php:201
|
#: IDF/Views/Admin.php:201
|
||||||
msgid "User List"
|
msgid "User List"
|
||||||
msgstr "Nutzerliste"
|
msgstr "Benutzerliste"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:4
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:13
|
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:13
|
||||||
msgid "Update User"
|
msgid "Update User"
|
||||||
msgstr "Nutzer aktualisieren"
|
msgstr "Benutzer aktualisieren"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:5
|
#: IDF/gettexttemplates/idf/gadmin/users/base.html.php:5
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:4
|
||||||
msgid "Create User"
|
msgid "Create User"
|
||||||
msgstr "Nutzer anlegen"
|
msgstr "Benutzer anlegen"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:3
|
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:3
|
||||||
msgid "The form contains some errors. Please correct them to create the user."
|
msgid "The form contains some errors. Please correct them to create the user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Eingabemaske enthält einige Fehler. Bitte korrigiere diese, um den "
|
"Die Eingabemaske enthält einige Fehler. Bitte korrigiere diese, um den "
|
||||||
"Nutzer zu erstellen."
|
"Benutzer zu erstellen."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:6
|
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:6
|
||||||
msgid "The user password will be sent by email to the user."
|
msgid "The user password will be sent by email to the user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Passwort des Nutzers wird an die E-Mail-Adresse des Nutzers versandt."
|
"Das Passwort des Benutzers wird an die E-Mail-Adresse des Benutzers versandt."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/createuser-email.txt.php:3
|
#: IDF/gettexttemplates/idf/gadmin/users/createuser-email.txt.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -1916,10 +1916,11 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Hallo %%user%%,\n"
|
"Hallo %%user%%,\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Der Administrator %%admin%% hat ein neues Konto für Dich\n"
|
"Der Administrator %%admin%% hat ein neues Benutzerkonto\n"
|
||||||
"auf der Forge angelegt.\n"
|
"für Dich auf der Forge angelegt.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Hier sind die Zugangsdaten, mit denen Du auf Dein Konto zugreifen kannst:\n"
|
"Hier sind die Zugangsdaten, mit denen Du auf Dein Benutzerkonto\n"
|
||||||
|
"zugreifen kannst:\n"
|
||||||
"\n"
|
"\n"
|
||||||
" Adresse: %%url%%\n"
|
" Adresse: %%url%%\n"
|
||||||
" Anmeldename: %%user.login%%\n"
|
" Anmeldename: %%user.login%%\n"
|
||||||
@@ -1931,17 +1932,17 @@ msgstr ""
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:3
|
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "See <a href=\"%%url%%\">not validated users</a>."
|
msgid "See <a href=\"%%url%%\">not validated users</a>."
|
||||||
msgstr "Zeige <a href=\"%%url%%\">nicht validierte Nutzer</a>."
|
msgstr "Zeige <a href=\"%%url%%\">nicht validierte Benutzer</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:4
|
||||||
msgid "<p>You have here an overview of the users registered in the forge.</p>"
|
msgid "<p>You have here an overview of the users registered in the forge.</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Hier siehst Du eine Übersicht der Nutzer, die sich in der Forge "
|
"<p>Hier siehst Du eine Übersicht der Benutzer, die sich in der Forge "
|
||||||
"registriert haben."
|
"registriert haben."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:5
|
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:5
|
||||||
msgid "Number of users:"
|
msgid "Number of users:"
|
||||||
msgstr "Anzahl der Nutzer:"
|
msgstr "Anzahl der Benutzer:"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:3
|
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:3
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1949,7 +1950,7 @@ msgid ""
|
|||||||
"need to ensure that you are providing a valid email\n"
|
"need to ensure that you are providing a valid email\n"
|
||||||
"address"
|
"address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du die E-Mail-Adresse eines Nutzers änderst,\n"
|
"Wenn Du die E-Mail-Adresse eines Benutzers änderst,\n"
|
||||||
"musst Du sicherstellen, eine gültige, neue E-Mail-Adresse\n"
|
"musst Du sicherstellen, eine gültige, neue E-Mail-Adresse\n"
|
||||||
"als Ersatz bereitzustellen."
|
"als Ersatz bereitzustellen."
|
||||||
|
|
||||||
@@ -1959,14 +1960,14 @@ msgid ""
|
|||||||
"able to create new projects and update other non staff users.\n"
|
"able to create new projects and update other non staff users.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du dem Benutzer Stab-Rechte erteilst, kann er\n"
|
"Wenn Du dem Benutzer Stab-Rechte erteilst, kann er\n"
|
||||||
"neue Projekte anlegen und andere Nutzer, die nicht zum Stab\n"
|
"neue Projekte anlegen und andere Benutzer, die nicht zum Stab\n"
|
||||||
"gehören, aktualisieren.\n"
|
"gehören, aktualisieren.\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:9
|
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:9
|
||||||
msgid "The form contains some errors. Please correct them to update the user."
|
msgid "The form contains some errors. Please correct them to update the user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Eingabemaske enthält einige Fehler. Bitte korrigiere diese, um den "
|
"Die Eingabemaske enthält einige Fehler. Bitte korrigiere diese, um den "
|
||||||
"Nutzer zu aktualisieren."
|
"Benutzer zu aktualisieren."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:10
|
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:10
|
||||||
#: IDF/gettexttemplates/idf/register/confirmation.html.php:4
|
#: IDF/gettexttemplates/idf/register/confirmation.html.php:4
|
||||||
@@ -2449,7 +2450,7 @@ msgid ""
|
|||||||
"is still valid and more work is needed to fully fix it."
|
"is still valid and more work is needed to fully fix it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dieses Ticket wurde als geschlossen markiert. Füge nur dann einen Kommentar "
|
"Dieses Ticket wurde als geschlossen markiert. Füge nur dann einen Kommentar "
|
||||||
"hinzu, wenn du denkst, dass das geschilderte Problem noch nicht ganz "
|
"hinzu, wenn Du denkst, dass das geschilderte Problem noch nicht ganz "
|
||||||
"beseitigt wurde."
|
"beseitigt wurde."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:8
|
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:8
|
||||||
@@ -2531,7 +2532,7 @@ msgid ""
|
|||||||
"If you don't have an account yet, you can create one <a href=\"%%url%%"
|
"If you don't have an account yet, you can create one <a href=\"%%url%%"
|
||||||
"\">here</a>."
|
"\">here</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du noch kein Konto hast, kannst Du <a href=\"%%url%%\">hier</a> ein "
|
"Wenn Du noch kein Benutzerkonto hast, kannst Du <a href=\"%%url%%\">hier</a> ein "
|
||||||
"neues erstellen."
|
"neues erstellen."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/login_form.html.php:4
|
#: IDF/gettexttemplates/idf/login_form.html.php:4
|
||||||
@@ -2560,7 +2561,7 @@ msgstr "Willkommen."
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/login_form.html.php:10
|
#: IDF/gettexttemplates/idf/login_form.html.php:10
|
||||||
msgid "It takes less than a minute to create your account."
|
msgid "It takes less than a minute to create your account."
|
||||||
msgstr "Es dauert weniger als eine Minute, um Dein Konto zu erstellen."
|
msgstr "Es dauert weniger als eine Minute, um Dein Benutzerkonto zu erstellen."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -2576,7 +2577,7 @@ msgstr "Abmelden"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:5
|
#: IDF/gettexttemplates/idf/main-menu.html.php:5
|
||||||
msgid "Sign in or create your account"
|
msgid "Sign in or create your account"
|
||||||
msgstr "Anmelden oder Konto erstellen"
|
msgstr "Anmelden oder Benutzerkonto erstellen"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:8 IDF/Views/Admin.php:42
|
#: IDF/gettexttemplates/idf/main-menu.html.php:8 IDF/Views/Admin.php:42
|
||||||
msgid "Forge Management"
|
msgid "Forge Management"
|
||||||
@@ -2671,7 +2672,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Hallo,\n"
|
"Hallo,\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Du hast die Anlage eines Kontos angeforder, um an dem Leben\n"
|
"Du hast die Anlage eines Benutzerkontos angefordert, um an dem Leben\n"
|
||||||
"eines Softwareprojektes teilhaben zu können.\n"
|
"eines Softwareprojektes teilhaben zu können.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Um Dein Konto zu bestätigen, folge bitte dem folgenden Link:\n"
|
"Um Dein Konto zu bestätigen, folge bitte dem folgenden Link:\n"
|
||||||
@@ -2688,7 +2689,7 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Wenn Du nicht mehr länger an diesem Software-Projekt\n"
|
"Wenn Du nicht mehr länger an diesem Software-Projekt\n"
|
||||||
"interessiert bist oder wenn Du Dich nicht daran erinnern\n"
|
"interessiert bist oder wenn Du Dich nicht daran erinnern\n"
|
||||||
"kannst, dieses Konto erstellen zu wollen, entschuldige\n"
|
"kannst, dieses Benutzerkonto erstellen zu wollen, entschuldige\n"
|
||||||
"und ignoriere einfach diese E-Mail.\n"
|
"und ignoriere einfach diese E-Mail.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Mit freundlichen Grüßen,\n"
|
"Mit freundlichen Grüßen,\n"
|
||||||
@@ -2716,7 +2717,7 @@ msgid ""
|
|||||||
"strong> to log in afterwards."
|
"strong> to log in afterwards."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dies ist der letzte Schritt, aber bitte <strong>stelle sicher, dass Du "
|
"Dies ist der letzte Schritt, aber bitte <strong>stelle sicher, dass Du "
|
||||||
"Cookies aktiviert hast</strong>, um Dich im folgenden anzumelden."
|
"Cookies aktiviert hast</strong>, um Dich im Folgenden anzumelden."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/register/index.html.php:3
|
#: IDF/gettexttemplates/idf/register/index.html.php:3
|
||||||
#: IDF/gettexttemplates/idf/register/index.html~.php:3
|
#: IDF/gettexttemplates/idf/register/index.html~.php:3
|
||||||
@@ -2736,7 +2737,7 @@ msgid ""
|
|||||||
"login name and password."
|
"login name and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Du einfach nur Deine Anmeldedaten vergessen hast, gibt es keinen Grund, "
|
"Wenn Du einfach nur Deine Anmeldedaten vergessen hast, gibt es keinen Grund, "
|
||||||
"ein neues Konto zu erstellen. Gehe einfach <a href=\"%%url%%\">hier her</a>, "
|
"ein neues Benutzerkonto zu erstellen. Gehe einfach <a href=\"%%url%%\">hier her</a>, "
|
||||||
"um Deinen Anmeldenamen und Dein Passwort wiederherzustellen."
|
"um Deinen Anmeldenamen und Dein Passwort wiederherzustellen."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/register/index.html.php:5
|
#: IDF/gettexttemplates/idf/register/index.html.php:5
|
||||||
@@ -2748,7 +2749,7 @@ msgid ""
|
|||||||
"you have troubles, you can <a href=\"%%url%%\">let us know about your issues "
|
"you have troubles, you can <a href=\"%%url%%\">let us know about your issues "
|
||||||
"at anytime</a>!"
|
"at anytime</a>!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Durch Dein Konto bist Du in der Lage, an dem Leben aller Softwareprojekte, "
|
"Durch Dein Benutzerkonto bist Du in der Lage, an dem Leben aller Softwareprojekte, "
|
||||||
"die hierüber verwaltet werden, teilzuhaben. Das Teilnehmen an einem "
|
"die hierüber verwaltet werden, teilzuhaben. Das Teilnehmen an einem "
|
||||||
"Softwareprojekt muss Spass machen, deshalb <a href=\"%%url%%\">lass uns "
|
"Softwareprojekt muss Spass machen, deshalb <a href=\"%%url%%\">lass uns "
|
||||||
"jederzeit von Deinen Problemen wissen</a>, solltest Du welche haben."
|
"jederzeit von Deinen Problemen wissen</a>, solltest Du welche haben."
|
||||||
@@ -3209,13 +3210,13 @@ msgstr "Zweige filtern"
|
|||||||
#: IDF/gettexttemplates/idf/source/mercurial/branch_tag_list.html.php:5
|
#: IDF/gettexttemplates/idf/source/mercurial/branch_tag_list.html.php:5
|
||||||
#: IDF/gettexttemplates/idf/source/mtn/branch_tag_list.html.php:5
|
#: IDF/gettexttemplates/idf/source/mtn/branch_tag_list.html.php:5
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Marken"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/git/branch_tag_list.html.php:6
|
#: IDF/gettexttemplates/idf/source/git/branch_tag_list.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/source/mercurial/branch_tag_list.html.php:6
|
#: IDF/gettexttemplates/idf/source/mercurial/branch_tag_list.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/source/mtn/branch_tag_list.html.php:6
|
#: IDF/gettexttemplates/idf/source/mtn/branch_tag_list.html.php:6
|
||||||
msgid "filter tags"
|
msgid "filter tags"
|
||||||
msgstr "Marken filtern"
|
msgstr "Tags filtern"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/git/file.html.php:3
|
#: IDF/gettexttemplates/idf/source/git/file.html.php:3
|
||||||
#: IDF/gettexttemplates/idf/source/git/tree.html.php:3
|
#: IDF/gettexttemplates/idf/source/git/tree.html.php:3
|
||||||
@@ -3231,7 +3232,7 @@ msgid ""
|
|||||||
"%%cobject.date%%."
|
"%%cobject.date%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Quellcode bei Revision <a class=\"mono\" href=\"%%url%%\">%%commit%%</a> "
|
"Quellcode bei Revision <a class=\"mono\" href=\"%%url%%\">%%commit%%</a> "
|
||||||
"erzeugt am %%cobject.date%%."
|
"erzeugt %%cobject.date%%."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/git/file.html.php:4
|
#: IDF/gettexttemplates/idf/source/git/file.html.php:4
|
||||||
#: IDF/gettexttemplates/idf/source/git/tree.html.php:4
|
#: IDF/gettexttemplates/idf/source/git/tree.html.php:4
|
||||||
@@ -3409,8 +3410,8 @@ msgstr "Revision:"
|
|||||||
#: IDF/gettexttemplates/idf/source/svn/commit.html.php:4
|
#: IDF/gettexttemplates/idf/source/svn/commit.html.php:4
|
||||||
#: IDF/gettexttemplates/idf/source/svn/file.html.php:11
|
#: IDF/gettexttemplates/idf/source/svn/file.html.php:11
|
||||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:16
|
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:16
|
||||||
msgid "Go to revision"
|
msgid "Switch"
|
||||||
msgstr "Zu Revision gehen:"
|
msgstr "Wechseln"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/svn/file.html.php:6
|
#: IDF/gettexttemplates/idf/source/svn/file.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:11
|
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:11
|
||||||
@@ -3420,7 +3421,7 @@ msgstr "Eigenschaft"
|
|||||||
#: IDF/gettexttemplates/idf/source/svn/file.html.php:7
|
#: IDF/gettexttemplates/idf/source/svn/file.html.php:7
|
||||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:12
|
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:12
|
||||||
msgid "set to:"
|
msgid "set to:"
|
||||||
msgstr "setzen auf:"
|
msgstr "gesetzt auf:"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/svn/help.html.php:3
|
#: IDF/gettexttemplates/idf/source/svn/help.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3442,7 +3443,7 @@ msgstr "Zweige:"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:18
|
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:18
|
||||||
msgid "Tags:"
|
msgid "Tags:"
|
||||||
msgstr "Marken:"
|
msgstr "Tags:"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/changeemail-email.txt.php:3
|
#: IDF/gettexttemplates/idf/user/changeemail-email.txt.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3491,7 +3492,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/changeemail.html.php:4
|
#: IDF/gettexttemplates/idf/user/changeemail.html.php:4
|
||||||
msgid "Confirm Your New Email Address"
|
msgid "Confirm Your New Email Address"
|
||||||
msgstr "Bestätige deine neue Email-Adresse"
|
msgstr "Bestätige Deine neue Email-Adresse"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/changeemail.html.php:7
|
#: IDF/gettexttemplates/idf/user/changeemail.html.php:7
|
||||||
#: IDF/gettexttemplates/idf/user/passrecovery-inputkey.html.php:7
|
#: IDF/gettexttemplates/idf/user/passrecovery-inputkey.html.php:7
|
||||||
@@ -3508,7 +3509,7 @@ msgstr ""
|
|||||||
#: IDF/gettexttemplates/idf/user/dashboard.html.php:3
|
#: IDF/gettexttemplates/idf/user/dashboard.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "<a href=\"%%url%%\">Update your account</a>."
|
msgid "<a href=\"%%url%%\">Update your account</a>."
|
||||||
msgstr "<a href=\"%%url%%\">Aktualisiere Dein Konto</a>."
|
msgstr "<a href=\"%%url%%\">Aktualisiere Dein Benutzerkonto</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/dashboard.html.php:4
|
#: IDF/gettexttemplates/idf/user/dashboard.html.php:4
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3578,7 +3579,7 @@ msgid ""
|
|||||||
"If possible, use your real name. By using your real name, people will have "
|
"If possible, use your real name. By using your real name, people will have "
|
||||||
"more trust in your comments and remarks."
|
"more trust in your comments and remarks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn möglich, nutze Deinen realen Namen. Dadurch wird deinen Kommentaren und "
|
"Wenn möglich, nutze Deinen realen Namen. Dadurch wird Deinen Kommentaren und "
|
||||||
"Bemerkungen mehr Vertrauen geschenkt."
|
"Bemerkungen mehr Vertrauen geschenkt."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:19
|
#: IDF/gettexttemplates/idf/user/myaccount.html.php:19
|
||||||
@@ -3646,7 +3647,7 @@ msgstr ""
|
|||||||
"Hallo %%user%%,\n"
|
"Hallo %%user%%,\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Du hast Dein Passwort verloren und möchtest es wiederherstellen.\n"
|
"Du hast Dein Passwort verloren und möchtest es wiederherstellen.\n"
|
||||||
"Um ein neues Passwort für Dein Konto anzugeben, musst Du lediglich\n"
|
"Um ein neues Passwort für Dein Benutzerkonto anzugeben, musst Du lediglich\n"
|
||||||
"dem folgenden Link folgen. Sie führt zu einer einfachen Eingabemaske,\n"
|
"dem folgenden Link folgen. Sie führt zu einer einfachen Eingabemaske,\n"
|
||||||
"mit der Du ein neues Passwort setzen kannst.\n"
|
"mit der Du ein neues Passwort setzen kannst.\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -3801,7 +3802,7 @@ msgstr ""
|
|||||||
"a> mit der <a href=\"%%eurl%%\"><em>Extra</em>-Erweiterung</a> verwendet "
|
"a> mit der <a href=\"%%eurl%%\"><em>Extra</em>-Erweiterung</a> verwendet "
|
||||||
"werden.</p>\n"
|
"werden.</p>\n"
|
||||||
"<p>Website-Adresses werden automatisch verlinkt und Du kannst außerdem zu "
|
"<p>Website-Adresses werden automatisch verlinkt und Du kannst außerdem zu "
|
||||||
"anderen Dokumentations-Seiten durch die Benutzung von doppelten, eckige "
|
"anderen Dokumentations-Seiten durch die Benutzung von doppelten, eckigen "
|
||||||
"Klammern verlinken, etwa so: [[AndereSeite]].</p>\n"
|
"Klammern verlinken, etwa so: [[AndereSeite]].</p>\n"
|
||||||
"<p>Um direkt die Inhalte einer Datei aus dem Depot einzubinden, umklammere "
|
"<p>Um direkt die Inhalte einer Datei aus dem Depot einzubinden, umklammere "
|
||||||
"den Pfad zur Datei mit dreifachen, eckigen Klammern: [[[Pfad/zu/Datei.txt]]]."
|
"den Pfad zur Datei mit dreifachen, eckigen Klammern: [[[Pfad/zu/Datei.txt]]]."
|
||||||
@@ -4388,7 +4389,7 @@ msgstr "Administrator"
|
|||||||
|
|
||||||
#: IDF/Views/Admin.php:214
|
#: IDF/Views/Admin.php:214
|
||||||
msgid "Last Login"
|
msgid "Last Login"
|
||||||
msgstr "Letzter Login"
|
msgstr "Letztes Login"
|
||||||
|
|
||||||
#: IDF/Views/Admin.php:221
|
#: IDF/Views/Admin.php:221
|
||||||
msgid "No users were found."
|
msgid "No users were found."
|
||||||
@@ -4954,7 +4955,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/Views.php:284
|
#: IDF/Views.php:284
|
||||||
msgid "Here to Help You!"
|
msgid "Here to Help You!"
|
||||||
msgstr "Hier, um dir zu helfen!"
|
msgstr "Hier, um Dir zu helfen!"
|
||||||
|
|
||||||
#: IDF/Views.php:300
|
#: IDF/Views.php:300
|
||||||
msgid "InDefero API (Application Programming Interface)"
|
msgid "InDefero API (Application Programming Interface)"
|
||||||
|
@@ -11,10 +11,10 @@ msgstr ""
|
|||||||
"PO-Revision-Date: 2011-03-28 14:19+0000\n"
|
"PO-Revision-Date: 2011-03-28 14:19+0000\n"
|
||||||
"Last-Translator: Mika <mikados.mikados@gmail.com>\n"
|
"Last-Translator: Mika <mikados.mikados@gmail.com>\n"
|
||||||
"Language-Team: Mika <mikados.mikados@gmail.com>\n"
|
"Language-Team: Mika <mikados.mikados@gmail.com>\n"
|
||||||
|
"Language: es_ES\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: es_ES\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: IDF/Commit.php:55 IDF/Conf.php:54 IDF/Issue.php:52 IDF/Review.php:65
|
#: IDF/Commit.php:55 IDF/Conf.php:54 IDF/Issue.php:52 IDF/Review.php:65
|
||||||
@@ -452,7 +452,8 @@ msgstr "Resumen"
|
|||||||
#: IDF/Form/IssueCreate.php:72 IDF/Form/IssueUpdate.php:65
|
#: IDF/Form/IssueCreate.php:72 IDF/Form/IssueUpdate.php:65
|
||||||
#: IDF/Form/ReviewCreate.php:83
|
#: IDF/Form/ReviewCreate.php:83
|
||||||
msgid "The \"upload_issue_path\" configuration variable was not set."
|
msgid "The \"upload_issue_path\" configuration variable was not set."
|
||||||
msgstr "La variable de configuración \"upload_issue_path\" no se ha establecido."
|
msgstr ""
|
||||||
|
"La variable de configuración \"upload_issue_path\" no se ha establecido."
|
||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:82 IDF/Form/IssueUpdate.php:75
|
#: IDF/Form/IssueCreate.php:82 IDF/Form/IssueUpdate.php:75
|
||||||
msgid "Attach a file"
|
msgid "Attach a file"
|
||||||
@@ -478,7 +479,8 @@ msgstr "Etiquetas"
|
|||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:192
|
#: IDF/Form/IssueCreate.php:192
|
||||||
msgid "You cannot add a label with the \"Status\" prefix to an issue."
|
msgid "You cannot add a label with the \"Status\" prefix to an issue."
|
||||||
msgstr "No se puede agregar una etiqueta con el prefijo \"Status\" a un ticket."
|
msgstr ""
|
||||||
|
"No se puede agregar una etiqueta con el prefijo \"Status\" a un ticket."
|
||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:193 IDF/Form/IssueCreate.php:200
|
#: IDF/Form/IssueCreate.php:193 IDF/Form/IssueCreate.php:200
|
||||||
#: IDF/Form/UpdateUpload.php:110 IDF/Form/Upload.php:120
|
#: IDF/Form/UpdateUpload.php:110 IDF/Form/Upload.php:120
|
||||||
@@ -490,8 +492,7 @@ msgstr "Proporcionaste una etiqueta no válida."
|
|||||||
#: IDF/Form/Upload.php:119
|
#: IDF/Form/Upload.php:119
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "You cannot provide more than label from the %s class to an issue."
|
msgid "You cannot provide more than label from the %s class to an issue."
|
||||||
msgstr ""
|
msgstr "No puede proporcionar más de una etiqueta de la clase %s en un ticket."
|
||||||
"No puede proporcionar más de una etiqueta de la clase %s en un ticket."
|
|
||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:210 IDF/Form/IssueUpdate.php:147
|
#: IDF/Form/IssueCreate.php:210 IDF/Form/IssueUpdate.php:147
|
||||||
msgid "You need to provide a description of the issue."
|
msgid "You need to provide a description of the issue."
|
||||||
@@ -582,8 +583,8 @@ msgid ""
|
|||||||
"We are sorry but this validation key is not valid. Maybe you should directly "
|
"We are sorry but this validation key is not valid. Maybe you should directly "
|
||||||
"copy/paste it from your validation email."
|
"copy/paste it from your validation email."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lo sentimos, pero esta clave de validación no es válida. Intente "
|
"Lo sentimos, pero esta clave de validación no es válida. Intente copiar/"
|
||||||
"copiar/pegar desde el email de validación."
|
"pegar desde el email de validación."
|
||||||
|
|
||||||
#: IDF/Form/PasswordInputKey.php:61 IDF/Form/PasswordReset.php:100
|
#: IDF/Form/PasswordInputKey.php:61 IDF/Form/PasswordReset.php:100
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -658,8 +659,7 @@ msgstr "Estoy de acuerdo con los términos y condiciones."
|
|||||||
|
|
||||||
#: IDF/Form/Register.php:88
|
#: IDF/Form/Register.php:88
|
||||||
msgid ""
|
msgid ""
|
||||||
"We know, this is boring, but you need to agree with the terms and "
|
"We know, this is boring, but you need to agree with the terms and conditions."
|
||||||
"conditions."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lo sabemos, esto es aburrido, pero es necesario aceptar los términos y "
|
"Lo sabemos, esto es aburrido, pero es necesario aceptar los términos y "
|
||||||
"condiciones."
|
"condiciones."
|
||||||
@@ -886,8 +886,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/Form/UserAccount.php:354
|
#: IDF/Form/UserAccount.php:354
|
||||||
msgid ""
|
msgid ""
|
||||||
"Please check the key as it does not appear to be a valid monotone public "
|
"Please check the key as it does not appear to be a valid monotone public key."
|
||||||
"key."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Por favor, compruebe la clave, ya que parece no ser una clave pública "
|
"Por favor, compruebe la clave, ya que parece no ser una clave pública "
|
||||||
"monotone válida ."
|
"monotone válida ."
|
||||||
@@ -916,8 +915,7 @@ msgstr "Etiquetas predefinidas para página de documentación"
|
|||||||
|
|
||||||
#: IDF/Form/WikiConf.php:58
|
#: IDF/Form/WikiConf.php:58
|
||||||
msgid ""
|
msgid ""
|
||||||
"Each documentation page may have at most one label with each of these "
|
"Each documentation page may have at most one label with each of these classes"
|
||||||
"classes"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cada página de documentación podrá tener más de una etiqueta para cada una "
|
"Cada página de documentación podrá tener más de una etiqueta para cada una "
|
||||||
"de estas clases"
|
"de estas clases"
|
||||||
@@ -1034,12 +1032,14 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>List one status value per line in desired sort-order.</p>\n"
|
"<p>List one status value per line in desired sort-order.</p>\n"
|
||||||
"<p>Optionally, use an equals-sign to document the meaning of each status value.</p>\n"
|
"<p>Optionally, use an equals-sign to document the meaning of each status "
|
||||||
|
"value.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instrucciones:</strong></p>\n"
|
"<p><strong>Instrucciones:</strong></p>\n"
|
||||||
"<p>Lista un valor por línea en el orden deseado.</p>\n"
|
"<p>Lista un valor por línea en el orden deseado.</p>\n"
|
||||||
"<p>Si lo desea, puede utilizar un signo de igual para documentar el valor de cada estado.</p>\n"
|
"<p>Si lo desea, puede utilizar un signo de igual para documentar el valor de "
|
||||||
|
"cada estado.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/downloads.html.php:8
|
#: IDF/gettexttemplates/idf/admin/downloads.html.php:8
|
||||||
#: IDF/gettexttemplates/idf/admin/issue-tracking.html.php:8
|
#: IDF/gettexttemplates/idf/admin/issue-tracking.html.php:8
|
||||||
@@ -1056,12 +1056,14 @@ msgstr "Guardar cambios"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>Specify each person by its login. Each person must have already registered with the given login.</p>\n"
|
"<p>Specify each person by its login. Each person must have already "
|
||||||
|
"registered with the given login.</p>\n"
|
||||||
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instrucciones:</strong></p>\n"
|
"<p><strong>Instrucciones:</strong></p>\n"
|
||||||
"<p>Especifique cada persona por su nombre de usuaro. Cada persona debe haberse registrado con el nombre de usuario dado.</p>\n"
|
"<p>Especifique cada persona por su nombre de usuaro. Cada persona debe "
|
||||||
|
"haberse registrado con el nombre de usuario dado.</p>\n"
|
||||||
"<p>Separe los nombres de usuarios con comas y/o nuevas líneas.</p>\n"
|
"<p>Separe los nombres de usuarios con comas y/o nuevas líneas.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/members.html.php:8
|
#: IDF/gettexttemplates/idf/admin/members.html.php:8
|
||||||
@@ -1070,17 +1072,22 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Notes:</strong></p>\n"
|
"<p><strong>Notes:</strong></p>\n"
|
||||||
"<p>A project owner may make any change to this project, including removing other project owners. You need to be carefull when you give owner rights.</p>\n"
|
"<p>A project owner may make any change to this project, including removing "
|
||||||
"<p>A project member will not have access to the administration area but will have more options available in the use of the project.</p>\n"
|
"other project owners. You need to be carefull when you give owner rights.</"
|
||||||
|
"p>\n"
|
||||||
|
"<p>A project member will not have access to the administration area but will "
|
||||||
|
"have more options available in the use of the project.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Notas:</strong></p>\n"
|
"<p><strong>Notas:</strong></p>\n"
|
||||||
"<p>El propietario de un proyecto puede hacer cualquier cambio a este proyecto, incluyendo la eliminación de otros propietarios del proyecto. ¡Tienes que tener cuidado cuando das permisos de propietario!.</p>\n"
|
"<p>El propietario de un proyecto puede hacer cualquier cambio a este "
|
||||||
"<p>Un miembro del proyecto no tendrá acceso al área de administración, pero tendrá más opciones disponibles para usar en el proyecto.</p>\n"
|
"proyecto, incluyendo la eliminación de otros propietarios del proyecto. "
|
||||||
|
"¡Tienes que tener cuidado cuando das permisos de propietario!.</p>\n"
|
||||||
|
"<p>Un miembro del proyecto no tendrá acceso al área de administración, pero "
|
||||||
|
"tendrá más opciones disponibles para usar en el proyecto.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/source.html.php:3
|
#: IDF/gettexttemplates/idf/admin/source.html.php:3
|
||||||
msgid ""
|
msgid "You can find here the current repository configuration of your project."
|
||||||
"You can find here the current repository configuration of your project."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Puede encontrar aquí la configuración actual del repositorio de su proyecto."
|
"Puede encontrar aquí la configuración actual del repositorio de su proyecto."
|
||||||
|
|
||||||
@@ -1090,7 +1097,8 @@ msgid ""
|
|||||||
"request is sent after each repository commit. If this field is empty,\n"
|
"request is sent after each repository commit. If this field is empty,\n"
|
||||||
"notifications are disabled.</p>\n"
|
"notifications are disabled.</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for example:</p>\n"
|
"<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for "
|
||||||
|
"example:</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>http://domain.com/commit</li>\n"
|
"<li>http://domain.com/commit</li>\n"
|
||||||
@@ -1109,8 +1117,10 @@ msgid ""
|
|||||||
"post-commit URL http://mydomain.com/%p/%r would send a request to\n"
|
"post-commit URL http://mydomain.com/%p/%r would send a request to\n"
|
||||||
"http://mydomain.com/my-project/123.</p>"
|
"http://mydomain.com/my-project/123.</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>La configuración URL WebHook especifica una URL con una solicitud HTTP POST\n"
|
"<p>La configuración URL WebHook especifica una URL con una solicitud HTTP "
|
||||||
"que se envía después de cada commit del repositorio. Si este campo está vacío,\n"
|
"POST\n"
|
||||||
|
"que se envía después de cada commit del repositorio. Si este campo está "
|
||||||
|
"vacío,\n"
|
||||||
"las notificaciones están desactivadas.</p>\n"
|
"las notificaciones están desactivadas.</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Únicamente las URLs <strong>HTTP</strong>, \n"
|
"<p>Únicamente las URLs <strong>HTTP</strong>, \n"
|
||||||
@@ -1122,14 +1132,16 @@ msgstr ""
|
|||||||
"</ul>\n"
|
"</ul>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Además, la URL puede contener la siguiente notación: \"%\", que\n"
|
"<p>Además, la URL puede contener la siguiente notación: \"%\", que\n"
|
||||||
"será reemplazada por los valores específicos del proyecto para cada commit:</p>\n"
|
"será reemplazada por los valores específicos del proyecto para cada commit:</"
|
||||||
|
"p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>%p - nombre del proyecto</li>\n"
|
"<li>%p - nombre del proyecto</li>\n"
|
||||||
"<li>%r - número de revisión</li>\n"
|
"<li>%r - número de revisión</li>\n"
|
||||||
"</ul>\n"
|
"</ul>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Por ejemplo, el commit de la revisión 123 del proyecto 'mi-proyecto' con URL de post-commit http://midominio.com/%p/%r enviaría la solicitud\n"
|
"<p>Por ejemplo, el commit de la revisión 123 del proyecto 'mi-proyecto' con "
|
||||||
|
"URL de post-commit http://midominio.com/%p/%r enviaría la solicitud\n"
|
||||||
"http://midominio.com/mi-proyecto/123.</p>"
|
"http://midominio.com/mi-proyecto/123.</p>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/source.html.php:26
|
#: IDF/gettexttemplates/idf/admin/source.html.php:26
|
||||||
@@ -1161,11 +1173,13 @@ msgstr "Clave de autenticación Post-commit:"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>The description of the project can be improved using the <a href=\"%%url%%\">Markdown syntax</a>.</p>\n"
|
"<p>The description of the project can be improved using the <a href=\"%%url%%"
|
||||||
|
"\">Markdown syntax</a>.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instrucciones:</strong></p>\n"
|
"<p><strong>Instrucciones:</strong></p>\n"
|
||||||
"<p>La descripción del proyecto puede ser mejorada mediante la <a href=\"%%url%%\">Sintaxis de Marcado</a>.</p>\n"
|
"<p>La descripción del proyecto puede ser mejorada mediante la <a href=\"%%url"
|
||||||
|
"%%\">Sintaxis de Marcado</a>.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/summary.html.php:7
|
#: IDF/gettexttemplates/idf/admin/summary.html.php:7
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1183,7 +1197,8 @@ msgid ""
|
|||||||
"password or SSH key."
|
"password or SSH key."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Solo los miembros del proyecto y los administradores tienen acceso de escritura sobre las fuentes.<br />\n"
|
"Solo los miembros del proyecto y los administradores tienen acceso de "
|
||||||
|
"escritura sobre las fuentes.<br />\n"
|
||||||
"Si restringe el acceso a las fuentes, el acceso anónimo,<br />\n"
|
"Si restringe el acceso a las fuentes, el acceso anónimo,<br />\n"
|
||||||
"no estará habilitado y los usuarios deberán autentificarse con su<br />\n"
|
"no estará habilitado y los usuarios deberán autentificarse con su<br />\n"
|
||||||
"contraseña o clave SSH."
|
"contraseña o clave SSH."
|
||||||
@@ -1205,9 +1220,9 @@ msgid ""
|
|||||||
"commas (','). If you do not want to send emails for a given type of changes, "
|
"commas (','). If you do not want to send emails for a given type of changes, "
|
||||||
"simply leave the corresponding field empty."
|
"simply leave the corresponding field empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Las notificaciones de mensajes se enviarán desde la dirección "
|
"Las notificaciones de mensajes se enviarán desde la dirección <strong>"
|
||||||
"<strong>%%from_email%%</strong>, si envía el mensaje a una lista de correo, "
|
"%%from_email%%</strong>, si envía el mensaje a una lista de correo, puede "
|
||||||
"puede que tenga que registrar esta dirección de correo electrónico. Varias "
|
"que tenga que registrar esta dirección de correo electrónico. Varias "
|
||||||
"direcciones de correo electrónico deben separarse por comas (','). Si no "
|
"direcciones de correo electrónico deben separarse por comas (','). Si no "
|
||||||
"desea enviar mensajes de correo electrónico para un determinado tipo de "
|
"desea enviar mensajes de correo electrónico para un determinado tipo de "
|
||||||
"cambio, simplemente deje el correspondiente campo vacío."
|
"cambio, simplemente deje el correspondiente campo vacío."
|
||||||
@@ -1217,8 +1232,8 @@ msgid ""
|
|||||||
"If you mark a project as private, only the project members and "
|
"If you mark a project as private, only the project members and "
|
||||||
"administrators, together with the extra authorized users you provide will "
|
"administrators, together with the extra authorized users you provide will "
|
||||||
"have access to the project. You will still be able to define further access "
|
"have access to the project. You will still be able to define further access "
|
||||||
"rights for the different tabs but the \"Open to all\" and \"Signed in "
|
"rights for the different tabs but the \"Open to all\" and \"Signed in users"
|
||||||
"users\" will default to authorized users only."
|
"\" will default to authorized users only."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si marca un proyecto como privado, sólo los miembros del proyecto y los "
|
"Si marca un proyecto como privado, sólo los miembros del proyecto y los "
|
||||||
"administradores, junto con los usuarios adicionales autorizados tendrán "
|
"administradores, junto con los usuarios adicionales autorizados tendrán "
|
||||||
@@ -1464,7 +1479,8 @@ msgid ""
|
|||||||
"name."
|
"name."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cada archivo debe tener un nombre distinto y el contenido del archivo\n"
|
"Cada archivo debe tener un nombre distinto y el contenido del archivo\n"
|
||||||
"no se puede cambiar, así que asegúrese de incluir los números de versión en el nombre de cada\n"
|
"no se puede cambiar, así que asegúrese de incluir los números de versión en "
|
||||||
|
"el nombre de cada\n"
|
||||||
"archivo."
|
"archivo."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/downloads/submit.html.php:6
|
#: IDF/gettexttemplates/idf/downloads/submit.html.php:6
|
||||||
@@ -1547,27 +1563,27 @@ msgstr "Proyectos"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"<p>This is simple:</p>\n"
|
"<p>This is simple:</p>\n"
|
||||||
"<ol>\n"
|
"<ol>\n"
|
||||||
"<li>Write in the comments \"This is a duplicate of issue 123\", change 123 with the corresponding issue number.</li>\n"
|
"<li>Write in the comments \"This is a duplicate of issue 123\", change 123 "
|
||||||
|
"with the corresponding issue number.</li>\n"
|
||||||
"<li>Change the status of the current issue to <em>Duplicate</em>.</li>\n"
|
"<li>Change the status of the current issue to <em>Duplicate</em>.</li>\n"
|
||||||
"<li>Submit the changes.</li>\n"
|
"<li>Submit the changes.</li>\n"
|
||||||
"</ol>"
|
"</ol>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Es simple:</p>\n"
|
"<p>Es simple:</p>\n"
|
||||||
"<ol>\n"
|
"<ol>\n"
|
||||||
"<li>Escribe en los comentarios \"Esto es una duplicado del ticket 123\", cambia 123 por el número de ticket correspondiente.</li>\n"
|
"<li>Escribe en los comentarios \"Esto es una duplicado del ticket 123\", "
|
||||||
|
"cambia 123 por el número de ticket correspondiente.</li>\n"
|
||||||
"<li>Cambia el estado del ticket actual a <em>Duplicado</em>.</li>\n"
|
"<li>Cambia el estado del ticket actual a <em>Duplicado</em>.</li>\n"
|
||||||
"<li>Envíe los cambios.</li>\n"
|
"<li>Envíe los cambios.</li>\n"
|
||||||
"</ol>"
|
"</ol>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:9
|
#: IDF/gettexttemplates/idf/faq.html.php:9
|
||||||
msgid ""
|
msgid ""
|
||||||
"You need to create an account on <a "
|
"You need to create an account on <a href=\"http://en.gravatar.com/"
|
||||||
"href=\"http://en.gravatar.com/\">Gravatar</a>, this takes about 5 minutes "
|
"\">Gravatar</a>, this takes about 5 minutes and is free."
|
||||||
"and is free."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Necesitas crear una cuenta en <a "
|
"Necesitas crear una cuenta en <a href=\"http://en.gravatar.com/\">Gravatar</"
|
||||||
"href=\"http://en.gravatar.com/\">Gravatar</a> , tardarás 5 minutos y es "
|
"a> , tardarás 5 minutos y es gratuito."
|
||||||
"gratuito."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:10
|
#: IDF/gettexttemplates/idf/faq.html.php:10
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1708,8 +1724,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:4
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Once you have defined the repository type, you cannot change "
|
"<strong>Once you have defined the repository type, you cannot change it</"
|
||||||
"it</strong>."
|
"strong>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>Una vez que haya definido el tipo de repositorio, no se puede "
|
"<strong>Una vez que haya definido el tipo de repositorio, no se puede "
|
||||||
"modificar</strong>."
|
"modificar</strong>."
|
||||||
@@ -1717,11 +1733,13 @@ msgstr ""
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:5
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:5
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Specify each person by its login. Each person must have already registered with the given login.</p>\n"
|
"<p>Specify each person by its login. Each person must have already "
|
||||||
|
"registered with the given login.</p>\n"
|
||||||
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Especifique cada persona por su nombre de usuario. Cada persona debe estar registrada con el nombre de usuario proporcionado.</p>\n"
|
"<p>Especifique cada persona por su nombre de usuario. Cada persona debe "
|
||||||
|
"estar registrada con el nombre de usuario proporcionado.</p>\n"
|
||||||
"<p>Separe los nombres de usuario con comas y / o saltos de líneas.</p>\n"
|
"<p>Separe los nombres de usuario con comas y / o saltos de líneas.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:14
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:14
|
||||||
@@ -1734,8 +1752,7 @@ msgstr ""
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:15
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:15
|
||||||
msgid "Provide at least one owner for the project or use a template."
|
msgid "Provide at least one owner for the project or use a template."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Proporcione al menos un propietario para el proyecto o utilice una "
|
"Proporcione al menos un propietario para el proyecto o utilice una plantilla."
|
||||||
"plantilla."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:3
|
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -1755,7 +1772,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<strong>¡Atención!</strong> Eliminar un proyecto es una operación delicada,\n"
|
"<strong>¡Atención!</strong> Eliminar un proyecto es una operación delicada,\n"
|
||||||
"que tiene como resultado <strong>borrar todos los datos</strong> del proyecto.\n"
|
"que tiene como resultado <strong>borrar todos los datos</strong> del "
|
||||||
|
"proyecto.\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:10
|
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:10
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1911,8 +1929,8 @@ msgstr "Ver <a href=\"%%url%%\">usuarios sin validar</a>."
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:4
|
||||||
msgid "<p>You have here an overview of the users registered in the forge.</p>"
|
msgid "<p>You have here an overview of the users registered in the forge.</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Tiene aquí una visión general de los usuarios registrados en la forja. "
|
"<p>Tiene aquí una visión general de los usuarios registrados en la forja. </"
|
||||||
"</p>"
|
"p>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:5
|
#: IDF/gettexttemplates/idf/gadmin/users/index.html.php:5
|
||||||
msgid "Number of users:"
|
msgid "Number of users:"
|
||||||
@@ -1934,7 +1952,8 @@ msgid ""
|
|||||||
"able to create new projects and update other non staff users.\n"
|
"able to create new projects and update other non staff users.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si da permisos de acceso tipo Staff, el usuario será capaz \n"
|
"Si da permisos de acceso tipo Staff, el usuario será capaz \n"
|
||||||
"de crear nuevos proyectos y actualizar a otros usuarios que no sean del Staff.\n"
|
"de crear nuevos proyectos y actualizar a otros usuarios que no sean del "
|
||||||
|
"Staff.\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:9
|
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:9
|
||||||
msgid "The form contains some errors. Please correct them to update the user."
|
msgid "The form contains some errors. Please correct them to update the user."
|
||||||
@@ -2185,10 +2204,13 @@ msgstr "Volver al ticket"
|
|||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
||||||
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>\n"
|
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p><strong>Tickets abiertos:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Tickets abiertos:</strong> <a href=\"%%open_url%%\">%%open%%</a></"
|
||||||
"<p><strong>Tickets cerrados:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>\n"
|
"p>\n"
|
||||||
|
"<p><strong>Tickets cerrados:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/by-label.html.php:7
|
#: IDF/gettexttemplates/idf/issues/by-label.html.php:7
|
||||||
msgid "Label:"
|
msgid "Label:"
|
||||||
@@ -2200,25 +2222,29 @@ msgstr "Finalizados:"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/create.html.php:3
|
#: IDF/gettexttemplates/idf/issues/create.html.php:3
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p>When you submit the issue do not forget to provide the following information:</p>\n"
|
"<p>When you submit the issue do not forget to provide the following "
|
||||||
|
"information:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>The steps to reproduce the problem.</li>\n"
|
"<li>The steps to reproduce the problem.</li>\n"
|
||||||
"<li>The version of the software and your operating system.</li>\n"
|
"<li>The version of the software and your operating system.</li>\n"
|
||||||
"<li>Any information that can help the developers to solve the issue.</li>\n"
|
"<li>Any information that can help the developers to solve the issue.</li>\n"
|
||||||
"<li><strong>Do not provide any password or confidential information!</strong></li>\n"
|
"<li><strong>Do not provide any password or confidential information!</"
|
||||||
|
"strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Cuando envío el ticket, no se olvide proporcionar la siguiente información:</p>\n"
|
"<p>Cuando envío el ticket, no se olvide proporcionar la siguiente "
|
||||||
|
"información:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>Los pasos para reproducir el problema.</li>\n"
|
"<li>Los pasos para reproducir el problema.</li>\n"
|
||||||
"<li>La versión del software y tu sistema operativo.</li>\n"
|
"<li>La versión del software y tu sistema operativo.</li>\n"
|
||||||
"<li>Cualquier información que pueda ayudar a los desarrolladores para resolver la incidencia.</li>\n"
|
"<li>Cualquier información que pueda ayudar a los desarrolladores para "
|
||||||
"<li><strong>¡No proporcione ninguna contraseña o información confidencial!</strong></li>\n"
|
"resolver la incidencia.</li>\n"
|
||||||
|
"<li><strong>¡No proporcione ninguna contraseña o información confidencial!</"
|
||||||
|
"strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/create.html.php:10
|
#: IDF/gettexttemplates/idf/issues/create.html.php:10
|
||||||
msgid ""
|
msgid "The form contains some errors. Please correct them to submit the issue."
|
||||||
"The form contains some errors. Please correct them to submit the issue."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El formulario contiene algunos errores. Por favor, corríjalos para enviar el "
|
"El formulario contiene algunos errores. Por favor, corríjalos para enviar el "
|
||||||
"ticket."
|
"ticket."
|
||||||
@@ -2297,10 +2323,13 @@ msgstr "Propietario:"
|
|||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
||||||
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>"
|
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p><strong>Tickets abiertos:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Tickets abiertos:</strong> <a href=\"%%open_url%%\">%%open%%</a></"
|
||||||
"<p><strong>Tickets cerrados:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>"
|
"p>\n"
|
||||||
|
"<p><strong>Tickets cerrados:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:3
|
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:3
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -2344,23 +2373,26 @@ msgstr "Comentarios (más reciente primero):"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:3
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
msgid ""
|
||||||
|
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
||||||
msgid_plural ""
|
msgid_plural ""
|
||||||
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
"Ver <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% tickets "
|
"Ver <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% tickets cerrado</"
|
||||||
"cerrado</a>."
|
"a>."
|
||||||
msgstr[1] "Ver <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% cerrado</a>."
|
msgstr[1] ""
|
||||||
|
"Ver <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% cerrado</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:4
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:4
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
msgid ""
|
||||||
|
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
||||||
msgid_plural ""
|
msgid_plural ""
|
||||||
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
"Ver <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% tickets "
|
"Ver <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% tickets cerrado</a>."
|
||||||
"cerrado</a>."
|
msgstr[1] ""
|
||||||
msgstr[1] "Ver <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% cerrado</a>."
|
"Ver <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% cerrado</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:6
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/user/dashboard.html.php:7
|
#: IDF/gettexttemplates/idf/user/dashboard.html.php:7
|
||||||
@@ -2389,8 +2421,8 @@ msgstr "Reportado por %%submitter%%, %%c.creation_dtime%%"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Comment <a href=\"%%url%%\">%%i%%</a> by %%submitter%%, %%c.creation_dtime%%"
|
"Comment <a href=\"%%url%%\">%%i%%</a> by %%submitter%%, %%c.creation_dtime%%"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Comentario <a href=\"%%url%%\">%%i%%</a> por %%submitter%%, "
|
"Comentario <a href=\"%%url%%\">%%i%%</a> por %%submitter%%, %%c."
|
||||||
"%%c.creation_dtime%%"
|
"creation_dtime%%"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:5
|
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:5
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.php:5
|
#: IDF/gettexttemplates/idf/issues/view.html.php:5
|
||||||
@@ -2466,8 +2498,7 @@ msgstr "ver"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:21
|
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:21
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.php:21
|
#: IDF/gettexttemplates/idf/issues/view.html.php:21
|
||||||
msgid ""
|
msgid "The form contains some errors. Please correct them to change the issue."
|
||||||
"The form contains some errors. Please correct them to change the issue."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El formulario contiene algunos errores. Por favor, corríjalos para "
|
"El formulario contiene algunos errores. Por favor, corríjalos para "
|
||||||
"actualizar el ticket."
|
"actualizar el ticket."
|
||||||
@@ -2485,8 +2516,8 @@ msgstr "Seguido por:"
|
|||||||
#: IDF/gettexttemplates/idf/login_form.html.php:3
|
#: IDF/gettexttemplates/idf/login_form.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't have an account yet, you can create one <a "
|
"If you don't have an account yet, you can create one <a href=\"%%url%%"
|
||||||
"href=\"%%url%%\">here</a>."
|
"\">here</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si aún no tienes una cuenta, puedes crear una <a href=\"%%url%%\">aquí</a>."
|
"Si aún no tienes una cuenta, puedes crear una <a href=\"%%url%%\">aquí</a>."
|
||||||
|
|
||||||
@@ -2520,10 +2551,11 @@ msgstr "Se tarda menos de un minuto en crearte una cuenta."
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Welcome, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
msgid ""
|
||||||
|
"Welcome, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bienvenido, <strong><a class=\"userw\" "
|
"Bienvenido, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></"
|
||||||
"href=\"%%url%%\">%%user%%</a></strong>."
|
"strong>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:4
|
#: IDF/gettexttemplates/idf/main-menu.html.php:4
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
@@ -2668,8 +2700,8 @@ msgstr "Activar tu cuenta"
|
|||||||
#: IDF/gettexttemplates/idf/register/confirmation.html.php:8
|
#: IDF/gettexttemplates/idf/register/confirmation.html.php:8
|
||||||
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:8
|
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:8
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is the last step, but just <strong>be sure to have the cookies "
|
"This is the last step, but just <strong>be sure to have the cookies enabled</"
|
||||||
"enabled</strong> to log in afterwards."
|
"strong> to log in afterwards."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Este es el último paso, pero <strong>asegúrese de tener las cookies "
|
"Este es el último paso, pero <strong>asegúrese de tener las cookies "
|
||||||
"activadas</strong> para identificarte."
|
"activadas</strong> para identificarte."
|
||||||
@@ -2700,14 +2732,14 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"With your account, you will able to participate in the life of all the "
|
"With your account, you will able to participate in the life of all the "
|
||||||
"projects hosted here. Participating in a software project must be fun, so if "
|
"projects hosted here. Participating in a software project must be fun, so if "
|
||||||
" you have troubles, you can <a href=\"%%url%%\">let us know about your "
|
"you have troubles, you can <a href=\"%%url%%\">let us know about your issues "
|
||||||
"issues at anytime</a>!"
|
"at anytime</a>!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Con su cuenta, será capaz de participar en el desarrollo de todos los "
|
"Con su cuenta, será capaz de participar en el desarrollo de todos los "
|
||||||
"proyectos alojados aquí. Participar en un proyecto software tiene que ser "
|
"proyectos alojados aquí. Participar en un proyecto software tiene que ser "
|
||||||
"algo divertido e interesante, así que si tiene problemas, puede <a "
|
"algo divertido e interesante, así que si tiene problemas, puede <a href="
|
||||||
"href=\"%%url%%\">¡hacernos saber cuáles son sus inquietudes en cualquier "
|
"\"%%url%%\">¡hacernos saber cuáles son sus inquietudes en cualquier momento</"
|
||||||
"momento</a>!"
|
"a>!"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/register/index.html.php:6
|
#: IDF/gettexttemplates/idf/register/index.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/register/index.html~.php:5
|
#: IDF/gettexttemplates/idf/register/index.html~.php:5
|
||||||
@@ -2778,22 +2810,27 @@ msgstr "Iniciar revisión del Código"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"<p>To start a code review, you need to provide:</p>\n"
|
"<p>To start a code review, you need to provide:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>A commit or revision of the current code in the repository from which you started your work.</li>\n"
|
"<li>A commit or revision of the current code in the repository from which "
|
||||||
"<li>A patch describing your changes with respect to the reference commit.</li>\n"
|
"you started your work.</li>\n"
|
||||||
"<li><strong>Check your patch does not provide any password or confidential information!</strong></li>\n"
|
"<li>A patch describing your changes with respect to the reference commit.</"
|
||||||
|
"li>\n"
|
||||||
|
"<li><strong>Check your patch does not provide any password or confidential "
|
||||||
|
"information!</strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Para iniciar una revisión de código, debe proporcionar:</p>\n"
|
"<p>Para iniciar una revisión de código, debe proporcionar:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>Un commit o revisión del actual código del repositorio, desde el que ha comenzado su trabajo.</li>\n"
|
"<li>Un commit o revisión del actual código del repositorio, desde el que ha "
|
||||||
"<li>Un parche que describa los cambios con respecto al commit referenciado.</li>\n"
|
"comenzado su trabajo.</li>\n"
|
||||||
"<li><strong>¡Asegúrese de que el parche no contiene ninguna contraseña o información confidencial!</strong></li>\n"
|
"<li>Un parche que describa los cambios con respecto al commit referenciado.</"
|
||||||
|
"li>\n"
|
||||||
|
"<li><strong>¡Asegúrese de que el parche no contiene ninguna contraseña o "
|
||||||
|
"información confidencial!</strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/create.html.php:9
|
#: IDF/gettexttemplates/idf/review/create.html.php:9
|
||||||
msgid ""
|
msgid ""
|
||||||
"The form contains some errors. Please correct them to submit the code "
|
"The form contains some errors. Please correct them to submit the code review."
|
||||||
"review."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"El formulario contiene algunos errores. Por favor, corríjalos para enviar la "
|
"El formulario contiene algunos errores. Por favor, corríjalos para enviar la "
|
||||||
"revisión de código."
|
"revisión de código."
|
||||||
@@ -2864,11 +2901,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"La revisión de código es una proceso en el que\n"
|
"La revisión de código es una proceso en el que\n"
|
||||||
"antes o después los cambios son commited en el código del repositorio,\n"
|
"antes o después los cambios son commited en el código del repositorio,\n"
|
||||||
"diferentes personas discuten sobre los cambios en el código. El objetivo es \n"
|
"diferentes personas discuten sobre los cambios en el código. El objetivo "
|
||||||
|
"es \n"
|
||||||
"<strong>mejorar la calidad del código y las\n"
|
"<strong>mejorar la calidad del código y las\n"
|
||||||
"contribuciones</strong>, por esto, debe ser pragmático cuando escriba \n"
|
"contribuciones</strong>, por esto, debe ser pragmático cuando escriba \n"
|
||||||
"sus comentarios. Menciona correctamente los números de línea (tanto en el antiguo como en el \n"
|
"sus comentarios. Menciona correctamente los números de línea (tanto en el "
|
||||||
"nuevo código) y trata de mantener un buen equilibrio entre seriedad y diversión\n"
|
"antiguo como en el \n"
|
||||||
|
"nuevo código) y trata de mantener un buen equilibrio entre seriedad y "
|
||||||
|
"diversión\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/view.html.php:13
|
#: IDF/gettexttemplates/idf/review/view.html.php:13
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -2880,9 +2920,12 @@ msgid ""
|
|||||||
"to propose more contributions</strong>.\n"
|
"to propose more contributions</strong>.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<strong>La propuesta para revisar código es intimidante</strong>, debes saber \n"
|
"<strong>La propuesta para revisar código es intimidante</strong>, debes "
|
||||||
"que recibirás críticas, así que por favor, como revisor, <strong>haz que este \n"
|
"saber \n"
|
||||||
"proceso sea divertido</strong>, úsalo para para ayudar al colaborador a aprender tus \n"
|
"que recibirás críticas, así que por favor, como revisor, <strong>haz que "
|
||||||
|
"este \n"
|
||||||
|
"proceso sea divertido</strong>, úsalo para para ayudar al colaborador a "
|
||||||
|
"aprender tus \n"
|
||||||
"normas de codificación y a estructurar el código y <strong>hacer que \n"
|
"normas de codificación y a estructurar el código y <strong>hacer que \n"
|
||||||
"quieran proponer más contribuciones</strong>.\n"
|
"quieran proponer más contribuciones</strong>.\n"
|
||||||
|
|
||||||
@@ -2892,8 +2935,8 @@ msgid ""
|
|||||||
"Comment <a href=\"%%url%%\">%%i%%</a> by <a href=\"%%whourl%%\">%%who%%</a>, "
|
"Comment <a href=\"%%url%%\">%%i%%</a> by <a href=\"%%whourl%%\">%%who%%</a>, "
|
||||||
"%%c.creation_dtime%%"
|
"%%c.creation_dtime%%"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Comentario <a href=\"%%url%%\">%%i%%</a> por <a "
|
"Comentario <a href=\"%%url%%\">%%i%%</a> por <a href=\"%%whourl%%\">%%who%%</"
|
||||||
"href=\"%%whourl%%\">%%who%%</a>, %%c.creation_dtime%%"
|
"a>, %%c.creation_dtime%%"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/view.html.php:21
|
#: IDF/gettexttemplates/idf/review/view.html.php:21
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3217,15 +3260,13 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"You may need to <a href=\"%%url%%\">provide your SSH key</a>. The "
|
"You may need to <a href=\"%%url%%\">provide your SSH key</a>. The "
|
||||||
"synchronization of your SSH key can take a couple of minutes. You can learn "
|
"synchronization of your SSH key can take a couple of minutes. You can learn "
|
||||||
"more about <a "
|
"more about <a href=\"http://www.google.com/search?q=public+ssh+key"
|
||||||
"href=\"http://www.google.com/search?q=public+ssh+key+authentication\">SSH "
|
"+authentication\">SSH key authentication</a>."
|
||||||
"key authentication</a>."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Puede que tenga que <a href=\"%%url%%\">proporcionar su clave SSH</a>. La "
|
"Puede que tenga que <a href=\"%%url%%\">proporcionar su clave SSH</a>. La "
|
||||||
"sincronización de la clave SSH puede tomar un par de minutos. Puede saber "
|
"sincronización de la clave SSH puede tomar un par de minutos. Puede saber "
|
||||||
"más acerca de <a "
|
"más acerca de <a href=\"http://www.google.com/search?q=public+ssh+key"
|
||||||
"href=\"http://www.google.com/search?q=public+ssh+key+authentication\">autenticación"
|
"+authentication\">autenticación de claves SSH</a>."
|
||||||
" de claves SSH</a>."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/git/help.html.php:7
|
#: IDF/gettexttemplates/idf/source/git/help.html.php:7
|
||||||
#: IDF/gettexttemplates/idf/source/mtn/help.html.php:6
|
#: IDF/gettexttemplates/idf/source/mtn/help.html.php:6
|
||||||
@@ -3305,7 +3346,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Si se trata de un nuevo repositorio, la razón de este error\n"
|
"Si se trata de un nuevo repositorio, la razón de este error\n"
|
||||||
"podría ser que no ha realizado ningún commit y / o push hasta el momento.\n"
|
"podría ser que no ha realizado ningún commit y / o push hasta el momento.\n"
|
||||||
"En este caso, por favor eche un vistazo a la <a href=\"%%url%%\">Página de Ayuda</a>\n"
|
"En este caso, por favor eche un vistazo a la <a href=\"%%url%%\">Página de "
|
||||||
|
"Ayuda</a>\n"
|
||||||
"sobre cómo tener acceso a su repositorio."
|
"sobre cómo tener acceso a su repositorio."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:3
|
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:3
|
||||||
@@ -3498,8 +3540,7 @@ msgstr "Clave de API"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Your API key will be regenerated automatically if you change your password."
|
"Your API key will be regenerated automatically if you change your password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La clave de la API se regenera automáticamente si usted cambia su "
|
"La clave de la API se regenera automáticamente si usted cambia su contraseña."
|
||||||
"contraseña."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:12
|
#: IDF/gettexttemplates/idf/user/myaccount.html.php:12
|
||||||
msgid "Update Your Account"
|
msgid "Update Your Account"
|
||||||
@@ -3688,12 +3729,15 @@ msgstr "Crear Página"
|
|||||||
#: IDF/gettexttemplates/idf/wiki/delete.html.php:3
|
#: IDF/gettexttemplates/idf/wiki/delete.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You are looking at an old revision (<em>%%oldrev.summary%%</em>) of the page \n"
|
"You are looking at an old revision (<em>%%oldrev.summary%%</em>) of the "
|
||||||
|
"page \n"
|
||||||
"<a href=\"%%url%%\">%%page.title%%</a>. This revision was created\n"
|
"<a href=\"%%url%%\">%%page.title%%</a>. This revision was created\n"
|
||||||
"by %%submitter%%."
|
"by %%submitter%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Está viendo una revisión antigua (<em>%%oldrev.summary%%</em>) de la página \n"
|
"Está viendo una revisión antigua (<em>%%oldrev.summary%%</em>) de la "
|
||||||
"<a href=\"%%url%%\">%%page.title%%</a>. Esta revisión fue creada por %%submitter%%."
|
"página \n"
|
||||||
|
"<a href=\"%%url%%\">%%page.title%%</a>. Esta revisión fue creada por "
|
||||||
|
"%%submitter%%."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/delete.html.php:6
|
#: IDF/gettexttemplates/idf/wiki/delete.html.php:6
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -3720,8 +3764,8 @@ msgid ""
|
|||||||
"recover it</strong>."
|
"recover it</strong>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si elimina esta página de documentación, será eliminada de la base de datos "
|
"Si elimina esta página de documentación, será eliminada de la base de datos "
|
||||||
"con todas las revisiones relacionadas y <strong>no será capaz de "
|
"con todas las revisiones relacionadas y <strong>no será capaz de recuperarla."
|
||||||
"recuperarla.</strong>"
|
"</strong>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/deletepage.html.php:6
|
#: IDF/gettexttemplates/idf/wiki/deletepage.html.php:6
|
||||||
msgid "Delete Page"
|
msgid "Delete Page"
|
||||||
@@ -3732,15 +3776,23 @@ msgstr "Eliminar página"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>The content of the page can use the <a href=\"%%burl%%\">Markdown syntax</a> with the <a href=\"%%eurl%%\"><em>Extra</em> extension</a>.</p>\n"
|
"<p>The content of the page can use the <a href=\"%%burl%%\">Markdown syntax</"
|
||||||
"<p>Website addresses are automatically linked and you can link to another page in the documentation using double square brackets like that [[AnotherPage]].</p>\n"
|
"a> with the <a href=\"%%eurl%%\"><em>Extra</em> extension</a>.</p>\n"
|
||||||
"<p>To directly include a file content from the repository, embrace its path with triple square brackets: [[[path/to/file.txt]]].</p>\n"
|
"<p>Website addresses are automatically linked and you can link to another "
|
||||||
|
"page in the documentation using double square brackets like that "
|
||||||
|
"[[AnotherPage]].</p>\n"
|
||||||
|
"<p>To directly include a file content from the repository, embrace its path "
|
||||||
|
"with triple square brackets: [[[path/to/file.txt]]].</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instrucciones:</strong></p>\n"
|
"<p><strong>Instrucciones:</strong></p>\n"
|
||||||
"<p>El contenido de la página puede usar <a href=\"%%burl%%\">sintaxis de Marcado</a> con la extensión <a href=\"%%eurl%%\"><em>Extra</em></a>.</p>\n"
|
"<p>El contenido de la página puede usar <a href=\"%%burl%%\">sintaxis de "
|
||||||
"<p>Las direcciones Web se enlazan automáticamente y se puede vincular con otras páginas de la documentación usando corchetes dobles como: [[OtraPágina]].</p>\n"
|
"Marcado</a> con la extensión <a href=\"%%eurl%%\"><em>Extra</em></a>.</p>\n"
|
||||||
"<p>Para incluir directamente el contenido de un fichero del repositorio, rodee la ruta con corchetes triples como: [[[ruta/al/fichero.txt]]].</p>\n"
|
"<p>Las direcciones Web se enlazan automáticamente y se puede vincular con "
|
||||||
|
"otras páginas de la documentación usando corchetes dobles como: "
|
||||||
|
"[[OtraPágina]].</p>\n"
|
||||||
|
"<p>Para incluir directamente el contenido de un fichero del repositorio, "
|
||||||
|
"rodee la ruta con corchetes triples como: [[[ruta/al/fichero.txt]]].</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/index.html.php:3
|
#: IDF/gettexttemplates/idf/wiki/index.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3777,7 +3829,8 @@ msgid ""
|
|||||||
"use it as reference only if you are sure you need these specific information."
|
"use it as reference only if you are sure you need these specific information."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>¡Atención!</strong> Esta página está marcada como obsoleta,\n"
|
"<strong>¡Atención!</strong> Esta página está marcada como obsoleta,\n"
|
||||||
"úsala como referencia solamente si está seguro de que usted necesita específicamente esta información ."
|
"úsala como referencia solamente si está seguro de que usted necesita "
|
||||||
|
"específicamente esta información ."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/view.html.php:5
|
#: IDF/gettexttemplates/idf/wiki/view.html.php:5
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3787,7 +3840,8 @@ msgid ""
|
|||||||
"by %%submitter%%."
|
"by %%submitter%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Está viendo una revisión antigua de la página \n"
|
"Está viendo una revisión antigua de la página \n"
|
||||||
"<a href=\"%%url%%\">%%page.title%%</a>. Esta revisión fue creada por %%submitter%%."
|
"<a href=\"%%url%%\">%%page.title%%</a>. Esta revisión fue creada por "
|
||||||
|
"%%submitter%%."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/view.html.php:10
|
#: IDF/gettexttemplates/idf/wiki/view.html.php:10
|
||||||
msgid "Table of Content"
|
msgid "Table of Content"
|
||||||
@@ -3845,8 +3899,10 @@ msgstr "fecha de modificación"
|
|||||||
|
|
||||||
#: IDF/Issue.php:194 IDF/IssueComment.php:143
|
#: IDF/Issue.php:194 IDF/IssueComment.php:143
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "<a href=\"%1$s\" class=\"%2$s\" title=\"View issue\">Issue %3$d</a>, %4$s"
|
msgid ""
|
||||||
msgstr "<a href=\"%1$s\" class=\"%2$s\" title=\"Ver ticket\">Ticket %3$d</a>, %4$s"
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"View issue\">Issue %3$d</a>, %4$s"
|
||||||
|
msgstr ""
|
||||||
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"Ver ticket\">Ticket %3$d</a>, %4$s"
|
||||||
|
|
||||||
#: IDF/Issue.php:196
|
#: IDF/Issue.php:196
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4001,8 +4057,8 @@ msgstr "No se puede examinar la configuración usher en \"%s\": %s"
|
|||||||
#, php-format
|
#, php-format
|
||||||
msgid "usher configuration already contains a server entry named \"%s\""
|
msgid "usher configuration already contains a server entry named \"%s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La configuración usher ya contiene una entrada para el servidor llamada "
|
"La configuración usher ya contiene una entrada para el servidor llamada \"%s"
|
||||||
"\"%s\""
|
"\""
|
||||||
|
|
||||||
#: IDF/Plugin/SyncMonotone.php:320 IDF/Plugin/SyncMonotone.php:510
|
#: IDF/Plugin/SyncMonotone.php:320 IDF/Plugin/SyncMonotone.php:510
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4047,7 +4103,8 @@ msgstr "No se pudo escribir read-permissions para el proyecto \"%s\""
|
|||||||
#: IDF/Plugin/SyncMonotone.php:617 IDF/Plugin/SyncMonotone.php:717
|
#: IDF/Plugin/SyncMonotone.php:617 IDF/Plugin/SyncMonotone.php:717
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Could not write write-permissions file for project \"%s\""
|
msgid "Could not write write-permissions file for project \"%s\""
|
||||||
msgstr "No se pudo escribir el fichero write-permissions para el proyecto \"%s\""
|
msgstr ""
|
||||||
|
"No se pudo escribir el fichero write-permissions para el proyecto \"%s\""
|
||||||
|
|
||||||
#: IDF/Plugin/SyncMonotone.php:790
|
#: IDF/Plugin/SyncMonotone.php:790
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4106,13 +4163,17 @@ msgstr "voto"
|
|||||||
|
|
||||||
#: IDF/Review/Comment.php:139 IDF/Review/Patch.php:151
|
#: IDF/Review/Comment.php:139 IDF/Review/Patch.php:151
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "<a href=\"%1$s\" class=\"%2$s\" title=\"View review\">Review %3$d</a>, %4$s"
|
msgid ""
|
||||||
msgstr "<a href=\"%1$s\" class=\"%2$s\" title=\"Ver revisión\">Revisión %3$d</a>, %4$s"
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"View review\">Review %3$d</a>, %4$s"
|
||||||
|
msgstr ""
|
||||||
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"Ver revisión\">Revisión %3$d</a>, "
|
||||||
|
"%4$s"
|
||||||
|
|
||||||
#: IDF/Review/Comment.php:141
|
#: IDF/Review/Comment.php:141
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Update of <a href=\"%s\" class=\"%s\">review %d</a>, by %s"
|
msgid "Update of <a href=\"%s\" class=\"%s\">review %d</a>, by %s"
|
||||||
msgstr "Actualización de <a href=\"%s\" class=\"%s\">revisión %d</a>, por %s"
|
msgstr ""
|
||||||
|
"Actualización de <a href=\"%s\" class=\"%s\">revisión %d</a>, por %s"
|
||||||
|
|
||||||
#: IDF/Review/Comment.php:151
|
#: IDF/Review/Comment.php:151
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4856,8 +4917,7 @@ msgid "Confirm Your Account Creation"
|
|||||||
msgstr "Confirma la creación de tu cuenta"
|
msgstr "Confirma la creación de tu cuenta"
|
||||||
|
|
||||||
#: IDF/Views.php:172
|
#: IDF/Views.php:172
|
||||||
msgid ""
|
msgid "Welcome! You can now participate in the life of your project of choice."
|
||||||
"Welcome! You can now participate in the life of your project of choice."
|
|
||||||
msgstr "¡Bienvenido! Ahora puedes participar en el proyecto elegido."
|
msgstr "¡Bienvenido! Ahora puedes participar en el proyecto elegido."
|
||||||
|
|
||||||
#: IDF/Views.php:198 IDF/Views.php:222 IDF/Views.php:263
|
#: IDF/Views.php:198 IDF/Views.php:222 IDF/Views.php:263
|
||||||
|
@@ -11,10 +11,10 @@ msgstr ""
|
|||||||
"PO-Revision-Date: 2011-03-28 07:33+0000\n"
|
"PO-Revision-Date: 2011-03-28 07:33+0000\n"
|
||||||
"Last-Translator: Delkia <wysman@gmail.com>\n"
|
"Last-Translator: Delkia <wysman@gmail.com>\n"
|
||||||
"Language-Team: French <>\n"
|
"Language-Team: French <>\n"
|
||||||
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: fr\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||||
|
|
||||||
#: IDF/Commit.php:55 IDF/Conf.php:54 IDF/Issue.php:52 IDF/Review.php:65
|
#: IDF/Commit.php:55 IDF/Conf.php:54 IDF/Issue.php:52 IDF/Review.php:65
|
||||||
@@ -460,7 +460,8 @@ msgstr "Résumé"
|
|||||||
#: IDF/Form/IssueCreate.php:72 IDF/Form/IssueUpdate.php:65
|
#: IDF/Form/IssueCreate.php:72 IDF/Form/IssueUpdate.php:65
|
||||||
#: IDF/Form/ReviewCreate.php:83
|
#: IDF/Form/ReviewCreate.php:83
|
||||||
msgid "The \"upload_issue_path\" configuration variable was not set."
|
msgid "The \"upload_issue_path\" configuration variable was not set."
|
||||||
msgstr "La variable de configuration \"upload_issue_path\" n'a pas été définie."
|
msgstr ""
|
||||||
|
"La variable de configuration \"upload_issue_path\" n'a pas été définie."
|
||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:82 IDF/Form/IssueUpdate.php:75
|
#: IDF/Form/IssueCreate.php:82 IDF/Form/IssueUpdate.php:75
|
||||||
msgid "Attach a file"
|
msgid "Attach a file"
|
||||||
@@ -487,8 +488,8 @@ msgstr "Étiquettes"
|
|||||||
#: IDF/Form/IssueCreate.php:192
|
#: IDF/Form/IssueCreate.php:192
|
||||||
msgid "You cannot add a label with the \"Status\" prefix to an issue."
|
msgid "You cannot add a label with the \"Status\" prefix to an issue."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous ne pouvez pas donner à un ticket une étiquette ayant le préfixe "
|
"Vous ne pouvez pas donner à un ticket une étiquette ayant le préfixe \"Status"
|
||||||
"\"Status\"."
|
"\"."
|
||||||
|
|
||||||
#: IDF/Form/IssueCreate.php:193 IDF/Form/IssueCreate.php:200
|
#: IDF/Form/IssueCreate.php:193 IDF/Form/IssueCreate.php:200
|
||||||
#: IDF/Form/UpdateUpload.php:110 IDF/Form/Upload.php:120
|
#: IDF/Form/UpdateUpload.php:110 IDF/Form/Upload.php:120
|
||||||
@@ -670,8 +671,7 @@ msgstr "J'accepte les conditions d'usage du service."
|
|||||||
|
|
||||||
#: IDF/Form/Register.php:88
|
#: IDF/Form/Register.php:88
|
||||||
msgid ""
|
msgid ""
|
||||||
"We know, this is boring, but you need to agree with the terms and "
|
"We know, this is boring, but you need to agree with the terms and conditions."
|
||||||
"conditions."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nous savons que c'est inintéressant, mais vous devez accepter les conditions "
|
"Nous savons que c'est inintéressant, mais vous devez accepter les conditions "
|
||||||
"d'usage du service."
|
"d'usage du service."
|
||||||
@@ -897,8 +897,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/Form/UserAccount.php:354
|
#: IDF/Form/UserAccount.php:354
|
||||||
msgid ""
|
msgid ""
|
||||||
"Please check the key as it does not appear to be a valid monotone public "
|
"Please check the key as it does not appear to be a valid monotone public key."
|
||||||
"key."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vérifiez s'il vous plaît la clef car elle ne semble pas être une clef "
|
"Vérifiez s'il vous plaît la clef car elle ne semble pas être une clef "
|
||||||
"publique monotone valide."
|
"publique monotone valide."
|
||||||
@@ -928,8 +927,7 @@ msgstr "Étiquettes prédéfinies des pages"
|
|||||||
|
|
||||||
#: IDF/Form/WikiConf.php:58
|
#: IDF/Form/WikiConf.php:58
|
||||||
msgid ""
|
msgid ""
|
||||||
"Each documentation page may have at most one label with each of these "
|
"Each documentation page may have at most one label with each of these classes"
|
||||||
"classes"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Chaque page ne peut avoir qu'une seule étiquette pour chacune de ces classes"
|
"Chaque page ne peut avoir qu'une seule étiquette pour chacune de ces classes"
|
||||||
|
|
||||||
@@ -973,8 +971,7 @@ msgstr "Titre"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"The page name must contains only letters, digits and the dash (-) character."
|
"The page name must contains only letters, digits and the dash (-) character."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le nom de la page ne doit contenir que des lettres, chiffres et le tiret "
|
"Le nom de la page ne doit contenir que des lettres, chiffres et le tiret (-)."
|
||||||
"(-)."
|
|
||||||
|
|
||||||
#: IDF/Form/WikiCreate.php:71 IDF/Form/WikiUpdate.php:61
|
#: IDF/Form/WikiCreate.php:71 IDF/Form/WikiUpdate.php:61
|
||||||
msgid "This one line description is displayed in the list of pages."
|
msgid "This one line description is displayed in the list of pages."
|
||||||
@@ -1047,12 +1044,14 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>List one status value per line in desired sort-order.</p>\n"
|
"<p>List one status value per line in desired sort-order.</p>\n"
|
||||||
"<p>Optionally, use an equals-sign to document the meaning of each status value.</p>\n"
|
"<p>Optionally, use an equals-sign to document the meaning of each status "
|
||||||
|
"value.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions :</strong></p>\n"
|
"<p><strong>Instructions :</strong></p>\n"
|
||||||
"<p>Liste un status par ligne dans l'ordre désiré d'affichage.</p>\n"
|
"<p>Liste un status par ligne dans l'ordre désiré d'affichage.</p>\n"
|
||||||
"<p>Vous pouvez aussi utiliser le signe = pour documenter la signification de chaque valeur.</p>\n"
|
"<p>Vous pouvez aussi utiliser le signe = pour documenter la signification de "
|
||||||
|
"chaque valeur.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/downloads.html.php:8
|
#: IDF/gettexttemplates/idf/admin/downloads.html.php:8
|
||||||
#: IDF/gettexttemplates/idf/admin/issue-tracking.html.php:8
|
#: IDF/gettexttemplates/idf/admin/issue-tracking.html.php:8
|
||||||
@@ -1069,12 +1068,14 @@ msgstr "Enregistrer les changements"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>Specify each person by its login. Each person must have already registered with the given login.</p>\n"
|
"<p>Specify each person by its login. Each person must have already "
|
||||||
|
"registered with the given login.</p>\n"
|
||||||
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions :</strong></p>\n"
|
"<p><strong>Instructions :</strong></p>\n"
|
||||||
"<p>Spécifiez chaque personne par son identifiant. Chaque personne doit avoir préalablement créé son compte.</p>\n"
|
"<p>Spécifiez chaque personne par son identifiant. Chaque personne doit avoir "
|
||||||
|
"préalablement créé son compte.</p>\n"
|
||||||
"<p>Séparez les identifiants par des virgules ou des sauts de ligne.</p>\n"
|
"<p>Séparez les identifiants par des virgules ou des sauts de ligne.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/members.html.php:8
|
#: IDF/gettexttemplates/idf/admin/members.html.php:8
|
||||||
@@ -1083,17 +1084,22 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Notes:</strong></p>\n"
|
"<p><strong>Notes:</strong></p>\n"
|
||||||
"<p>A project owner may make any change to this project, including removing other project owners. You need to be carefull when you give owner rights.</p>\n"
|
"<p>A project owner may make any change to this project, including removing "
|
||||||
"<p>A project member will not have access to the administration area but will have more options available in the use of the project.</p>\n"
|
"other project owners. You need to be carefull when you give owner rights.</"
|
||||||
|
"p>\n"
|
||||||
|
"<p>A project member will not have access to the administration area but will "
|
||||||
|
"have more options available in the use of the project.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Notes :</strong></p>\n"
|
"<p><strong>Notes :</strong></p>\n"
|
||||||
"<p>Le propriétaire d'un projet peut faire tous les changements sur un projet, cela inclut la suppression d'autres propriétaires. Soyez donc prudent quand vous ajoutez un propriétaire.</p>\n"
|
"<p>Le propriétaire d'un projet peut faire tous les changements sur un "
|
||||||
"<p>Un membre du projet ne va pas avoir accès à l'onglet d'administration mais aura plus d'options dans l'utilisation du site.</p>\n"
|
"projet, cela inclut la suppression d'autres propriétaires. Soyez donc "
|
||||||
|
"prudent quand vous ajoutez un propriétaire.</p>\n"
|
||||||
|
"<p>Un membre du projet ne va pas avoir accès à l'onglet d'administration "
|
||||||
|
"mais aura plus d'options dans l'utilisation du site.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/source.html.php:3
|
#: IDF/gettexttemplates/idf/admin/source.html.php:3
|
||||||
msgid ""
|
msgid "You can find here the current repository configuration of your project."
|
||||||
"You can find here the current repository configuration of your project."
|
|
||||||
msgstr "Vous pouvez trouver ici la configuration du dépôt du projet."
|
msgstr "Vous pouvez trouver ici la configuration du dépôt du projet."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/source.html.php:4
|
#: IDF/gettexttemplates/idf/admin/source.html.php:4
|
||||||
@@ -1102,7 +1108,8 @@ msgid ""
|
|||||||
"request is sent after each repository commit. If this field is empty,\n"
|
"request is sent after each repository commit. If this field is empty,\n"
|
||||||
"notifications are disabled.</p>\n"
|
"notifications are disabled.</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for example:</p>\n"
|
"<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for "
|
||||||
|
"example:</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>http://domain.com/commit</li>\n"
|
"<li>http://domain.com/commit</li>\n"
|
||||||
@@ -1121,11 +1128,13 @@ msgid ""
|
|||||||
"post-commit URL http://mydomain.com/%p/%r would send a request to\n"
|
"post-commit URL http://mydomain.com/%p/%r would send a request to\n"
|
||||||
"http://mydomain.com/my-project/123.</p>"
|
"http://mydomain.com/my-project/123.</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Le paramètre d'URL de webhook spécifie une URL sur laquelle une requête HTTP POST \n"
|
"<p>Le paramètre d'URL de webhook spécifie une URL sur laquelle une requête "
|
||||||
|
"HTTP POST \n"
|
||||||
"est envoyée après chaque commit sur un des dépôt. Si ce champ est vide,\n"
|
"est envoyée après chaque commit sur un des dépôt. Si ce champ est vide,\n"
|
||||||
"les notifications sont désactivées.</p>\n"
|
"les notifications sont désactivées.</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Seules des URLS <strong>HTTP</strong> proprement échappées sont acceptées, par exemple :</p>\n"
|
"<p>Seules des URLS <strong>HTTP</strong> proprement échappées sont "
|
||||||
|
"acceptées, par exemple :</p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>http://domaine.com/commit</li>\n"
|
"<li>http://domaine.com/commit</li>\n"
|
||||||
@@ -1133,14 +1142,16 @@ msgstr ""
|
|||||||
"</ul>\n"
|
"</ul>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>De plusl'URL peut contenir la mention \"%\", qui\n"
|
"<p>De plusl'URL peut contenir la mention \"%\", qui\n"
|
||||||
"sera remplacée avec des valeurs spécifiques du projet pour chaque commit:</p>\n"
|
"sera remplacée avec des valeurs spécifiques du projet pour chaque commit:</"
|
||||||
|
"p>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>%p - nom du projet</li>\n"
|
"<li>%p - nom du projet</li>\n"
|
||||||
"<li>%r - numéro de révision</li>\n"
|
"<li>%r - numéro de révision</li>\n"
|
||||||
"</ul>\n"
|
"</ul>\n"
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Par exemple, un commit de la révision 123 sur le projet 'mon-projet' avec\n"
|
"<p>Par exemple, un commit de la révision 123 sur le projet 'mon-projet' "
|
||||||
|
"avec\n"
|
||||||
"l'URL de post-commit http://domaine.com/%p/%r enverrait une requête à\n"
|
"l'URL de post-commit http://domaine.com/%p/%r enverrait une requête à\n"
|
||||||
"http://domaine.com/mon-project/123.</p>"
|
"http://domaine.com/mon-project/123.</p>"
|
||||||
|
|
||||||
@@ -1173,11 +1184,13 @@ msgstr "Clef d'authentification post-commit : "
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>The description of the project can be improved using the <a href=\"%%url%%\">Markdown syntax</a>.</p>\n"
|
"<p>The description of the project can be improved using the <a href=\"%%url%%"
|
||||||
|
"\">Markdown syntax</a>.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions :</strong></p>\n"
|
"<p><strong>Instructions :</strong></p>\n"
|
||||||
"<p>La description du projet peut être enrichie en utilisant la <a href=\"%%url%%\">syntaxe Markdown</a>.</p>\n"
|
"<p>La description du projet peut être enrichie en utilisant la <a href="
|
||||||
|
"\"%%url%%\">syntaxe Markdown</a>.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/summary.html.php:7
|
#: IDF/gettexttemplates/idf/admin/summary.html.php:7
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1195,9 +1208,12 @@ msgid ""
|
|||||||
"password or SSH key."
|
"password or SSH key."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Seuls les administrateurs et membres du projet ont accès au code source.<br />\n"
|
"Seuls les administrateurs et membres du projet ont accès au code source.<br /"
|
||||||
"Si vous faites la restriction de l'accès au code, l'accès anonyme n'est pas<br />\n"
|
">\n"
|
||||||
"activé et les utilisateurs doivent s'authentifier avec leur mot de passe ou clef SSH."
|
"Si vous faites la restriction de l'accès au code, l'accès anonyme n'est "
|
||||||
|
"pas<br />\n"
|
||||||
|
"activé et les utilisateurs doivent s'authentifier avec leur mot de passe ou "
|
||||||
|
"clef SSH."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/tabs.html.php:8
|
#: IDF/gettexttemplates/idf/admin/tabs.html.php:8
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1216,8 +1232,8 @@ msgid ""
|
|||||||
"commas (','). If you do not want to send emails for a given type of changes, "
|
"commas (','). If you do not want to send emails for a given type of changes, "
|
||||||
"simply leave the corresponding field empty."
|
"simply leave the corresponding field empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Les emails de notifications seront envoyés depuis l'adresse "
|
"Les emails de notifications seront envoyés depuis l'adresse <strong>"
|
||||||
"<strong>%%from_email%%</strong>. Si vous envoyez les emails à une liste de "
|
"%%from_email%%</strong>. Si vous envoyez les emails à une liste de "
|
||||||
"diffusion, vous devez probablement valider cette adresse email. Plusieurs "
|
"diffusion, vous devez probablement valider cette adresse email. Plusieurs "
|
||||||
"adresses email doivent être séparées par des virgules (','). Si vous ne "
|
"adresses email doivent être séparées par des virgules (','). Si vous ne "
|
||||||
"voulez pas envoyer d'emails pour un type de changement, laissez vide le "
|
"voulez pas envoyer d'emails pour un type de changement, laissez vide le "
|
||||||
@@ -1228,14 +1244,14 @@ msgid ""
|
|||||||
"If you mark a project as private, only the project members and "
|
"If you mark a project as private, only the project members and "
|
||||||
"administrators, together with the extra authorized users you provide will "
|
"administrators, together with the extra authorized users you provide will "
|
||||||
"have access to the project. You will still be able to define further access "
|
"have access to the project. You will still be able to define further access "
|
||||||
"rights for the different tabs but the \"Open to all\" and \"Signed in "
|
"rights for the different tabs but the \"Open to all\" and \"Signed in users"
|
||||||
"users\" will default to authorized users only."
|
"\" will default to authorized users only."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous marquez un projet comme privé, seuls les membres du projet et les "
|
"Si vous marquez un projet comme privé, seuls les membres du projet et les "
|
||||||
"administrateurs, associés aux utilisateurs supplémentaires autorisés, "
|
"administrateurs, associés aux utilisateurs supplémentaires autorisés, "
|
||||||
"pourront accéder au projet. Vous pourrez toujours définir un niveau "
|
"pourront accéder au projet. Vous pourrez toujours définir un niveau "
|
||||||
"supplémentaire de droits d'accès aux onglets mais les options \"Ouvert à "
|
"supplémentaire de droits d'accès aux onglets mais les options \"Ouvert à tous"
|
||||||
"tous\" et \"Utilisateurs authentifiés\" correspondront aux utilisateurs "
|
"\" et \"Utilisateurs authentifiés\" correspondront aux utilisateurs "
|
||||||
"supplémentaires."
|
"supplémentaires."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/admin/tabs.html.php:11
|
#: IDF/gettexttemplates/idf/admin/tabs.html.php:11
|
||||||
@@ -1560,27 +1576,27 @@ msgstr "Projets"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"<p>This is simple:</p>\n"
|
"<p>This is simple:</p>\n"
|
||||||
"<ol>\n"
|
"<ol>\n"
|
||||||
"<li>Write in the comments \"This is a duplicate of issue 123\", change 123 with the corresponding issue number.</li>\n"
|
"<li>Write in the comments \"This is a duplicate of issue 123\", change 123 "
|
||||||
|
"with the corresponding issue number.</li>\n"
|
||||||
"<li>Change the status of the current issue to <em>Duplicate</em>.</li>\n"
|
"<li>Change the status of the current issue to <em>Duplicate</em>.</li>\n"
|
||||||
"<li>Submit the changes.</li>\n"
|
"<li>Submit the changes.</li>\n"
|
||||||
"</ol>"
|
"</ol>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>C'est simple :</p>\n"
|
"<p>C'est simple :</p>\n"
|
||||||
"<ol>\n"
|
"<ol>\n"
|
||||||
"<li>Écrivez dans le commentaire \"Ceci est un doublon du ticket 123\", avec 123 le numéro correspondant au ticket en question.</li>\n"
|
"<li>Écrivez dans le commentaire \"Ceci est un doublon du ticket 123\", avec "
|
||||||
|
"123 le numéro correspondant au ticket en question.</li>\n"
|
||||||
"<li>Changez le statut du ticket vers <em>Duplicate</em>.</li>\n"
|
"<li>Changez le statut du ticket vers <em>Duplicate</em>.</li>\n"
|
||||||
"<li>Soumettez les changements.</li>\n"
|
"<li>Soumettez les changements.</li>\n"
|
||||||
"</ol>"
|
"</ol>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:9
|
#: IDF/gettexttemplates/idf/faq.html.php:9
|
||||||
msgid ""
|
msgid ""
|
||||||
"You need to create an account on <a "
|
"You need to create an account on <a href=\"http://en.gravatar.com/"
|
||||||
"href=\"http://en.gravatar.com/\">Gravatar</a>, this takes about 5 minutes "
|
"\">Gravatar</a>, this takes about 5 minutes and is free."
|
||||||
"and is free."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez créer un compte sur <a "
|
"Vous devez créer un compte sur <a href=\"http://fr.gravatar.com/\">Gravatar</"
|
||||||
"href=\"http://fr.gravatar.com/\">Gravatar</a>, cela prend environ 5 minutes "
|
"a>, cela prend environ 5 minutes et c'est gratuit."
|
||||||
"et c'est gratuit."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/faq.html.php:10
|
#: IDF/gettexttemplates/idf/faq.html.php:10
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1720,8 +1736,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:4
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:4
|
||||||
msgid ""
|
msgid ""
|
||||||
"<strong>Once you have defined the repository type, you cannot change "
|
"<strong>Once you have defined the repository type, you cannot change it</"
|
||||||
"it</strong>."
|
"strong>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<strong>Une fois que vous avez défini le type de dépôt, vous ne pouvez pas "
|
"<strong>Une fois que vous avez défini le type de dépôt, vous ne pouvez pas "
|
||||||
"le changer</strong>."
|
"le changer</strong>."
|
||||||
@@ -1729,11 +1745,14 @@ msgstr ""
|
|||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:5
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:5
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Specify each person by its login. Each person must have already registered with the given login.</p>\n"
|
"<p>Specify each person by its login. Each person must have already "
|
||||||
|
"registered with the given login.</p>\n"
|
||||||
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
"<p>Separate the logins with commas and/or new lines.</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p>Spécifiez chaque personne par son identifiant. Chaque personne doit avoir préalablement créé son compte.</p><p>Séparez les identifiants par des virgules ou des sauts de ligne.</p>\n"
|
"<p>Spécifiez chaque personne par son identifiant. Chaque personne doit avoir "
|
||||||
|
"préalablement créé son compte.</p><p>Séparez les identifiants par des "
|
||||||
|
"virgules ou des sauts de ligne.</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:14
|
#: IDF/gettexttemplates/idf/gadmin/projects/create.html.php:14
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -1765,7 +1784,9 @@ msgid ""
|
|||||||
"project <strong>will be deleted</strong>.\n"
|
"project <strong>will be deleted</strong>.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<strong>Attention !</strong> Supprimer un projet est une opération rapide qui a pour conséquence <strong>la suppression de toutes les données relatives au projet</strong>.\n"
|
"<strong>Attention !</strong> Supprimer un projet est une opération rapide "
|
||||||
|
"qui a pour conséquence <strong>la suppression de toutes les données "
|
||||||
|
"relatives au projet</strong>.\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:10
|
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:10
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -2194,10 +2215,13 @@ msgstr "Retour au ticket"
|
|||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
||||||
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>\n"
|
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p><strong>Tickets ouverts :</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Tickets ouverts :</strong> <a href=\"%%open_url%%\">%%open%%</a></"
|
||||||
"<p><strong>Tickets fermés :</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>\n"
|
"p>\n"
|
||||||
|
"<p><strong>Tickets fermés :</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/by-label.html.php:7
|
#: IDF/gettexttemplates/idf/issues/by-label.html.php:7
|
||||||
msgid "Label:"
|
msgid "Label:"
|
||||||
@@ -2209,25 +2233,29 @@ msgstr "Accomplissement :"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/create.html.php:3
|
#: IDF/gettexttemplates/idf/issues/create.html.php:3
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p>When you submit the issue do not forget to provide the following information:</p>\n"
|
"<p>When you submit the issue do not forget to provide the following "
|
||||||
|
"information:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>The steps to reproduce the problem.</li>\n"
|
"<li>The steps to reproduce the problem.</li>\n"
|
||||||
"<li>The version of the software and your operating system.</li>\n"
|
"<li>The version of the software and your operating system.</li>\n"
|
||||||
"<li>Any information that can help the developers to solve the issue.</li>\n"
|
"<li>Any information that can help the developers to solve the issue.</li>\n"
|
||||||
"<li><strong>Do not provide any password or confidential information!</strong></li>\n"
|
"<li><strong>Do not provide any password or confidential information!</"
|
||||||
|
"strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Quand vous soumettez un ticket, n'oubliez de fournir les informations suivantes :</p>\n"
|
"<p>Quand vous soumettez un ticket, n'oubliez de fournir les informations "
|
||||||
|
"suivantes :</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>Les étapes pour reproduire le problème.</li>\n"
|
"<li>Les étapes pour reproduire le problème.</li>\n"
|
||||||
"<li>La version de votre logiciel et de votre système d'exploitation.</li>\n"
|
"<li>La version de votre logiciel et de votre système d'exploitation.</li>\n"
|
||||||
"<li>Toute information qui pourrait aider les développeurs à corriger votre problème.</li>\n"
|
"<li>Toute information qui pourrait aider les développeurs à corriger votre "
|
||||||
"<li><strong>Ne fournissez aucun mot de passe ou information confidentielle !</strong></li>\n"
|
"problème.</li>\n"
|
||||||
|
"<li><strong>Ne fournissez aucun mot de passe ou information confidentielle !"
|
||||||
|
"</strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/create.html.php:10
|
#: IDF/gettexttemplates/idf/issues/create.html.php:10
|
||||||
msgid ""
|
msgid "The form contains some errors. Please correct them to submit the issue."
|
||||||
"The form contains some errors. Please correct them to submit the issue."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le formulaire contient des erreurs. Corrigez s'il vous plaît ces erreurs "
|
"Le formulaire contient des erreurs. Corrigez s'il vous plaît ces erreurs "
|
||||||
"pour soumettre le ticket."
|
"pour soumettre le ticket."
|
||||||
@@ -2306,10 +2334,13 @@ msgstr "Propriétaire :"
|
|||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Open issues:</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
||||||
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>"
|
"<p><strong>Closed issues:</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p><strong>Tickets ouverts :</strong> <a href=\"%%open_url%%\">%%open%%</a></p>\n"
|
"<p><strong>Tickets ouverts :</strong> <a href=\"%%open_url%%\">%%open%%</a></"
|
||||||
"<p><strong>Tickets fermés :</strong> <a href=\"%%closed_url%%\">%%closed%%</a></p>"
|
"p>\n"
|
||||||
|
"<p><strong>Tickets fermés :</strong> <a href=\"%%closed_url%%\">%%closed%%</"
|
||||||
|
"a></p>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:3
|
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:3
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -2351,7 +2382,8 @@ msgstr "Commentaires (le dernier en premier) :"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:3
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
msgid ""
|
||||||
|
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
||||||
msgid_plural ""
|
msgid_plural ""
|
||||||
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
"See the <a href=\"%%submit_closed_url%%\">%%nb_submit_closed%% closed</a>."
|
||||||
msgstr[0] "Voir le <a href=\"%%submit_closed_url%%\">ticket fermé</a>."
|
msgstr[0] "Voir le <a href=\"%%submit_closed_url%%\">ticket fermé</a>."
|
||||||
@@ -2360,11 +2392,13 @@ msgstr[1] ""
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:4
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:4
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
msgid ""
|
||||||
|
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
||||||
msgid_plural ""
|
msgid_plural ""
|
||||||
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
"See the <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% closed</a>."
|
||||||
msgstr[0] "Voir le <a href=\"%%owner_closed_url%%\">ticket fermé</a>."
|
msgstr[0] "Voir le <a href=\"%%owner_closed_url%%\">ticket fermé</a>."
|
||||||
msgstr[1] "Voir les <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% fermés</a>."
|
msgstr[1] ""
|
||||||
|
"Voir les <a href=\"%%owner_closed_url%%\">%%nb_owner_closed%% fermés</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:6
|
#: IDF/gettexttemplates/idf/issues/my-issues.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/user/dashboard.html.php:7
|
#: IDF/gettexttemplates/idf/user/dashboard.html.php:7
|
||||||
@@ -2393,8 +2427,8 @@ msgstr "Soumis par %%submitter%%, %%c.creation_dtime%%"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Comment <a href=\"%%url%%\">%%i%%</a> by %%submitter%%, %%c.creation_dtime%%"
|
"Comment <a href=\"%%url%%\">%%i%%</a> by %%submitter%%, %%c.creation_dtime%%"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Commentaire <a href=\"%%url%%\">%%i%%</a> par %%submitter%%, "
|
"Commentaire <a href=\"%%url%%\">%%i%%</a> par %%submitter%%, %%c."
|
||||||
"%%c.creation_dtime%%"
|
"creation_dtime%%"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:5
|
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:5
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.php:5
|
#: IDF/gettexttemplates/idf/issues/view.html.php:5
|
||||||
@@ -2470,8 +2504,7 @@ msgstr "vue"
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:21
|
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:21
|
||||||
#: IDF/gettexttemplates/idf/issues/view.html.php:21
|
#: IDF/gettexttemplates/idf/issues/view.html.php:21
|
||||||
msgid ""
|
msgid "The form contains some errors. Please correct them to change the issue."
|
||||||
"The form contains some errors. Please correct them to change the issue."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le formulaire contient des erreurs. Merci de les corriger pour mettre à jour "
|
"Le formulaire contient des erreurs. Merci de les corriger pour mettre à jour "
|
||||||
"ce ticket."
|
"ce ticket."
|
||||||
@@ -2489,11 +2522,11 @@ msgstr "Suivi par :"
|
|||||||
#: IDF/gettexttemplates/idf/login_form.html.php:3
|
#: IDF/gettexttemplates/idf/login_form.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't have an account yet, you can create one <a "
|
"If you don't have an account yet, you can create one <a href=\"%%url%%"
|
||||||
"href=\"%%url%%\">here</a>."
|
"\">here</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous n'avez pas encore de compte, vous pouvez en créer un <a "
|
"Si vous n'avez pas encore de compte, vous pouvez en créer un <a href=\"%%url"
|
||||||
"href=\"%%url%%\">içi</a>."
|
"%%\">içi</a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/login_form.html.php:4
|
#: IDF/gettexttemplates/idf/login_form.html.php:4
|
||||||
msgid "What is your account information?"
|
msgid "What is your account information?"
|
||||||
@@ -2525,8 +2558,10 @@ msgstr "La création d'un compte prend moins d'une minute."
|
|||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
#: IDF/gettexttemplates/idf/main-menu.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Welcome, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
msgid ""
|
||||||
msgstr "Bienvenue, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
"Welcome, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
||||||
|
msgstr ""
|
||||||
|
"Bienvenue, <strong><a class=\"userw\" href=\"%%url%%\">%%user%%</a></strong>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/main-menu.html.php:4
|
#: IDF/gettexttemplates/idf/main-menu.html.php:4
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
@@ -2671,8 +2706,8 @@ msgstr "Activez votre compte"
|
|||||||
#: IDF/gettexttemplates/idf/register/confirmation.html.php:8
|
#: IDF/gettexttemplates/idf/register/confirmation.html.php:8
|
||||||
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:8
|
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:8
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is the last step, but just <strong>be sure to have the cookies "
|
"This is the last step, but just <strong>be sure to have the cookies enabled</"
|
||||||
"enabled</strong> to log in afterwards."
|
"strong> to log in afterwards."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"C'est la dernière étape, mais <strong>assurez-vous que les cookies soient "
|
"C'est la dernière étape, mais <strong>assurez-vous que les cookies soient "
|
||||||
"activés dans votre navigateur</strong> pour vous connecter par la suite."
|
"activés dans votre navigateur</strong> pour vous connecter par la suite."
|
||||||
@@ -2703,13 +2738,13 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"With your account, you will able to participate in the life of all the "
|
"With your account, you will able to participate in the life of all the "
|
||||||
"projects hosted here. Participating in a software project must be fun, so if "
|
"projects hosted here. Participating in a software project must be fun, so if "
|
||||||
" you have troubles, you can <a href=\"%%url%%\">let us know about your "
|
"you have troubles, you can <a href=\"%%url%%\">let us know about your issues "
|
||||||
"issues at anytime</a>!"
|
"at anytime</a>!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Avec votre compte vous pourrez participer à la vie de tous les projets "
|
"Avec votre compte vous pourrez participer à la vie de tous les projets "
|
||||||
"administrés ici. Participer à la vie d'un logiciel doit être sympa, alors si "
|
"administrés ici. Participer à la vie d'un logiciel doit être sympa, alors si "
|
||||||
" vous rencontrez des problèmes, vous pouvez <a href=\"%%url%%\">nous le "
|
"vous rencontrez des problèmes, vous pouvez <a href=\"%%url%%\">nous le faire "
|
||||||
"faire savoir à tout instant</a> !"
|
"savoir à tout instant</a> !"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/register/index.html.php:6
|
#: IDF/gettexttemplates/idf/register/index.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/register/index.html~.php:5
|
#: IDF/gettexttemplates/idf/register/index.html~.php:5
|
||||||
@@ -2780,22 +2815,27 @@ msgstr "Nouvelle revue de code"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"<p>To start a code review, you need to provide:</p>\n"
|
"<p>To start a code review, you need to provide:</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>A commit or revision of the current code in the repository from which you started your work.</li>\n"
|
"<li>A commit or revision of the current code in the repository from which "
|
||||||
"<li>A patch describing your changes with respect to the reference commit.</li>\n"
|
"you started your work.</li>\n"
|
||||||
"<li><strong>Check your patch does not provide any password or confidential information!</strong></li>\n"
|
"<li>A patch describing your changes with respect to the reference commit.</"
|
||||||
|
"li>\n"
|
||||||
|
"<li><strong>Check your patch does not provide any password or confidential "
|
||||||
|
"information!</strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Pour démarrer une revue de code vous devez fournir :</p>\n"
|
"<p>Pour démarrer une revue de code vous devez fournir :</p>\n"
|
||||||
"<ul>\n"
|
"<ul>\n"
|
||||||
"<li>La révision ou le commit de référence qui a servi de base à votre travail.</li>\n"
|
"<li>La révision ou le commit de référence qui a servi de base à votre "
|
||||||
"<li>Un patch qui décrit les changements par rapport à la référence.</li>\n"
|
"travail.</li>\n"
|
||||||
"<li><strong>Vérifiez votre patch pour ne fournir aucun mot de passe ou information confidentielle !</strong></li>\n"
|
"<li>Un patch qui décrit les changements par rapport à la référence."
|
||||||
|
"</li>\n"
|
||||||
|
"<li><strong>Vérifiez votre patch pour ne fournir aucun mot de "
|
||||||
|
"passe ou information confidentielle !</strong></li>\n"
|
||||||
"</ul>"
|
"</ul>"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/create.html.php:9
|
#: IDF/gettexttemplates/idf/review/create.html.php:9
|
||||||
msgid ""
|
msgid ""
|
||||||
"The form contains some errors. Please correct them to submit the code "
|
"The form contains some errors. Please correct them to submit the code review."
|
||||||
"review."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le formulaire contient des erreurs. Merci de les corriger pour soumettre "
|
"Le formulaire contient des erreurs. Merci de les corriger pour soumettre "
|
||||||
"votre revue de code."
|
"votre revue de code."
|
||||||
@@ -2882,7 +2922,11 @@ msgid ""
|
|||||||
"to propose more contributions</strong>.\n"
|
"to propose more contributions</strong>.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<strong>Proposer des changements pour revue est intimidant</strong>, vous savez que vous allez recevoirdes critiques. Comme participant à la revue, <strong>gardez une bonne ambiance</strong> et aidez le contributeur à apprendre la structure de votre code et vos exigences de qualité. <strong>Donnez-lui envie de proposer de nouvelles contributions</strong>.\n"
|
"<strong>Proposer des changements pour revue est intimidant</strong>, vous "
|
||||||
|
"savez que vous allez recevoirdes critiques. Comme participant à la revue, "
|
||||||
|
"<strong>gardez une bonne ambiance</strong> et aidez le contributeur à "
|
||||||
|
"apprendre la structure de votre code et vos exigences de qualité. "
|
||||||
|
"<strong>Donnez-lui envie de proposer de nouvelles contributions</strong>.\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/view.html.php:20
|
#: IDF/gettexttemplates/idf/review/view.html.php:20
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -2890,8 +2934,8 @@ msgid ""
|
|||||||
"Comment <a href=\"%%url%%\">%%i%%</a> by <a href=\"%%whourl%%\">%%who%%</a>, "
|
"Comment <a href=\"%%url%%\">%%i%%</a> by <a href=\"%%whourl%%\">%%who%%</a>, "
|
||||||
"%%c.creation_dtime%%"
|
"%%c.creation_dtime%%"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Commentaire <a href=\"%%url%%\">%%i%%</a> par <a "
|
"Commentaire <a href=\"%%url%%\">%%i%%</a> par <a href=\"%%whourl%%\">%%who"
|
||||||
"href=\"%%whourl%%\">%%who%%</a>, %%c.creation_dtime%%"
|
"%%</a>, %%c.creation_dtime%%"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/review/view.html.php:21
|
#: IDF/gettexttemplates/idf/review/view.html.php:21
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3215,12 +3259,15 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"You may need to <a href=\"%%url%%\">provide your SSH key</a>. The "
|
"You may need to <a href=\"%%url%%\">provide your SSH key</a>. The "
|
||||||
"synchronization of your SSH key can take a couple of minutes. You can learn "
|
"synchronization of your SSH key can take a couple of minutes. You can learn "
|
||||||
"more about <a "
|
"more about <a href=\"http://www.google.com/search?q=public+ssh+key"
|
||||||
"href=\"http://www.google.com/search?q=public+ssh+key+authentication\">SSH "
|
"+authentication\">SSH key authentication</a>."
|
||||||
"key authentication</a>."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez probablement fournir <a href=\"%%url%%\">votre clef SSH</a>. La synchronisation de votre clef SSH peut prendre quelques minutes. Vous pouvez en apprendre plus sur l'authentification <a href=\"http://www.google.fr/search?\"\n"
|
"Vous devez probablement fournir <a href=\"%%url%%\">votre clef SSH</"
|
||||||
"\"q=authentification+clef+ssh+publique\">avec une clef SSH publique</a>."
|
"a>. La synchronisation de votre clef SSH peut prendre quelques minutes. "
|
||||||
|
"Vous pouvez en apprendre plus sur l'authentification <a href=\"http://www."
|
||||||
|
"google.fr/search?\"\n"
|
||||||
|
"\"q=authentification+clef+ssh+publique\">avec une clef SSH publique</"
|
||||||
|
"a>."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/git/help.html.php:7
|
#: IDF/gettexttemplates/idf/source/git/help.html.php:7
|
||||||
#: IDF/gettexttemplates/idf/source/mtn/help.html.php:6
|
#: IDF/gettexttemplates/idf/source/mtn/help.html.php:6
|
||||||
@@ -3298,7 +3345,8 @@ msgid ""
|
|||||||
"how to access your repository."
|
"how to access your repository."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"S'il s'agit d'un nouveau dépôt, la raison de cette erreur\n"
|
"S'il s'agit d'un nouveau dépôt, la raison de cette erreur\n"
|
||||||
"peut être que vous n'avez pas encore fait de commit et / ou envoyé aucun changement.Dans ce cas veuillez lire la page d'<a href=\"%%url%%\">aide</a>\n"
|
"peut être que vous n'avez pas encore fait de commit et / ou envoyé aucun "
|
||||||
|
"changement.Dans ce cas veuillez lire la page d'<a href=\"%%url%%\">aide</a>\n"
|
||||||
"sur comment accéder au dépôt. "
|
"sur comment accéder au dépôt. "
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:3
|
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:3
|
||||||
@@ -3308,8 +3356,8 @@ msgid ""
|
|||||||
"the <strong>Mercurial</strong> software to manage the source\n"
|
"the <strong>Mercurial</strong> software to manage the source\n"
|
||||||
"code."
|
"code."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"L'équipe de développement du projet %%project%% utilise "
|
"L'équipe de développement du projet %%project%% utilise <strong>Mercurial</"
|
||||||
"<strong>Mercurial</strong> pour gérer le code source."
|
"strong> pour gérer le code source."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:6
|
#: IDF/gettexttemplates/idf/source/mercurial/help.html.php:6
|
||||||
#: IDF/gettexttemplates/idf/source/svn/help.html.php:6
|
#: IDF/gettexttemplates/idf/source/svn/help.html.php:6
|
||||||
@@ -3333,8 +3381,8 @@ msgid ""
|
|||||||
"the <strong>monotone</strong> software to manage the source\n"
|
"the <strong>monotone</strong> software to manage the source\n"
|
||||||
"code."
|
"code."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"L'équipe de développement du projet %%project%% utilise "
|
"L'équipe de développement du projet %%project%% utilise <strong>Monotone</"
|
||||||
"<strong>Monotone</strong> pour gérer le code source."
|
"strong> pour gérer le code source."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/svn/changelog.html.php:3
|
#: IDF/gettexttemplates/idf/source/svn/changelog.html.php:3
|
||||||
#: IDF/gettexttemplates/idf/source/svn/commit.html.php:3
|
#: IDF/gettexttemplates/idf/source/svn/commit.html.php:3
|
||||||
@@ -3367,8 +3415,8 @@ msgid ""
|
|||||||
"the <strong>subversion</strong> software to manage the source\n"
|
"the <strong>subversion</strong> software to manage the source\n"
|
||||||
"code."
|
"code."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"L'équipe de développement du projet %%project%% utilise "
|
"L'équipe de développement du projet %%project%% utilise <strong>Subversion</"
|
||||||
"<strong>Subversion</strong> pour gérer le code source."
|
"strong> pour gérer le code source."
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:8
|
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:8
|
||||||
msgid "Rev"
|
msgid "Rev"
|
||||||
@@ -3421,7 +3469,8 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"%%key%%\n"
|
"%%key%%\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Si vous ne voulez pas changer votre adresse email,ignorez simplement ce message.\n"
|
"Si vous ne voulez pas changer votre adresse email,ignorez simplement ce "
|
||||||
|
"message.\n"
|
||||||
"Cordialement,\n"
|
"Cordialement,\n"
|
||||||
"l'équipe de développement.\n"
|
"l'équipe de développement.\n"
|
||||||
|
|
||||||
@@ -3581,7 +3630,10 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Bonjour %%user%%,\n"
|
"Bonjour %%user%%,\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Vous avez perdu votre mot de passe et voulez le retrouver. Pour définir un nouveau mot de passe pour votre compte, vous devez juste suivre le lien suivant et un formulaire vous permettra de donner de nouveau un mot de passe :\n"
|
"Vous avez perdu votre mot de passe et voulez le retrouver. Pour définir un "
|
||||||
|
"nouveau mot de passe pour votre compte, vous devez juste suivre le lien "
|
||||||
|
"suivant et un formulaire vous permettra de donner de nouveau un mot de "
|
||||||
|
"passe :\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%%url%%\n"
|
"%%url%%\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -3593,7 +3645,9 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"%%key%%\n"
|
"%%key%%\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Si vous n'êtes pas la personne ayant fait la demande de récupération de votre mot de passe, ignorez simplement cet email et votre mot de passe restera inchangé. \n"
|
"Si vous n'êtes pas la personne ayant fait la demande de récupération de "
|
||||||
|
"votre mot de passe, ignorez simplement cet email et votre mot de passe "
|
||||||
|
"restera inchangé. \n"
|
||||||
"\n"
|
"\n"
|
||||||
"Très cordialement,\n"
|
"Très cordialement,\n"
|
||||||
"l'équipe de développement.\n"
|
"l'équipe de développement.\n"
|
||||||
@@ -3661,8 +3715,7 @@ msgstr "Prévisualisation de la page"
|
|||||||
#: IDF/gettexttemplates/idf/wiki/create.html.php:4
|
#: IDF/gettexttemplates/idf/wiki/create.html.php:4
|
||||||
msgid "The form contains some errors. Please correct them to create the page."
|
msgid "The form contains some errors. Please correct them to create the page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le formulaire contient des erreurs. Merci de les corriger pour créer la "
|
"Le formulaire contient des erreurs. Merci de les corriger pour créer la page."
|
||||||
"page."
|
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/create.html.php:6
|
#: IDF/gettexttemplates/idf/wiki/create.html.php:6
|
||||||
msgid "Create Page"
|
msgid "Create Page"
|
||||||
@@ -3671,7 +3724,8 @@ msgstr "Création d'une page"
|
|||||||
#: IDF/gettexttemplates/idf/wiki/delete.html.php:3
|
#: IDF/gettexttemplates/idf/wiki/delete.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You are looking at an old revision (<em>%%oldrev.summary%%</em>) of the page \n"
|
"You are looking at an old revision (<em>%%oldrev.summary%%</em>) of the "
|
||||||
|
"page \n"
|
||||||
"<a href=\"%%url%%\">%%page.title%%</a>. This revision was created\n"
|
"<a href=\"%%url%%\">%%page.title%%</a>. This revision was created\n"
|
||||||
"by %%submitter%%."
|
"by %%submitter%%."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -3716,15 +3770,23 @@ msgstr "Supprimer la page"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions:</strong></p>\n"
|
"<p><strong>Instructions:</strong></p>\n"
|
||||||
"<p>The content of the page can use the <a href=\"%%burl%%\">Markdown syntax</a> with the <a href=\"%%eurl%%\"><em>Extra</em> extension</a>.</p>\n"
|
"<p>The content of the page can use the <a href=\"%%burl%%\">Markdown syntax</"
|
||||||
"<p>Website addresses are automatically linked and you can link to another page in the documentation using double square brackets like that [[AnotherPage]].</p>\n"
|
"a> with the <a href=\"%%eurl%%\"><em>Extra</em> extension</a>.</p>\n"
|
||||||
"<p>To directly include a file content from the repository, embrace its path with triple square brackets: [[[path/to/file.txt]]].</p>\n"
|
"<p>Website addresses are automatically linked and you can link to another "
|
||||||
|
"page in the documentation using double square brackets like that "
|
||||||
|
"[[AnotherPage]].</p>\n"
|
||||||
|
"<p>To directly include a file content from the repository, embrace its path "
|
||||||
|
"with triple square brackets: [[[path/to/file.txt]]].</p>\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"<p><strong>Instructions :</strong></p>\n"
|
"<p><strong>Instructions :</strong></p>\n"
|
||||||
"<p>Le contenu de la page peut utiliser la syntaxe <a href=\"%%url%%\">Markdown</a> avec son <a href=\"%%eurl%%\">extension <em>Markdown Extra</em></a>.</p>\n"
|
"<p>Le contenu de la page peut utiliser la syntaxe <a href=\"%%url%%"
|
||||||
"<p>Vous pouvez faire un lien vers une autre page de la documentation en utilisant des crochets doubles, comme cela [[UneAutrePage]].</p>\n"
|
"\">Markdown</a> avec son <a href=\"%%eurl%%\">extension <em>Markdown Extra</"
|
||||||
"<p>Pour inclure directement le contenu d'un fichier du dépôt, entourez son chemin avec des crochets triples : [[[chemin/vers/fichier.txt]]].</p>\n"
|
"em></a>.</p>\n"
|
||||||
|
"<p>Vous pouvez faire un lien vers une autre page de la documentation en "
|
||||||
|
"utilisant des crochets doubles, comme cela [[UneAutrePage]].</p>\n"
|
||||||
|
"<p>Pour inclure directement le contenu d'un fichier du dépôt, entourez son "
|
||||||
|
"chemin avec des crochets triples : [[[chemin/vers/fichier.txt]]].</p>\n"
|
||||||
|
|
||||||
#: IDF/gettexttemplates/idf/wiki/index.html.php:3
|
#: IDF/gettexttemplates/idf/wiki/index.html.php:3
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3831,8 +3893,11 @@ msgstr "date de modification"
|
|||||||
|
|
||||||
#: IDF/Issue.php:194 IDF/IssueComment.php:143
|
#: IDF/Issue.php:194 IDF/IssueComment.php:143
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "<a href=\"%1$s\" class=\"%2$s\" title=\"View issue\">Issue %3$d</a>, %4$s"
|
msgid ""
|
||||||
msgstr "<a href=\"%1$s\" class=\"%2$s\" title=\"Voir le ticket\">Ticket %3$d</a>, %4$s"
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"View issue\">Issue %3$d</a>, %4$s"
|
||||||
|
msgstr ""
|
||||||
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"Voir le ticket\">Ticket %3$d</a>, "
|
||||||
|
"%4$s"
|
||||||
|
|
||||||
#: IDF/Issue.php:196
|
#: IDF/Issue.php:196
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3875,7 +3940,8 @@ msgstr "Tableau sérialisé des changements du ticket."
|
|||||||
#: IDF/IssueComment.php:171
|
#: IDF/IssueComment.php:171
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Comment on <a href=\"%s\" class=\"%s\">issue %d</a>, by %s"
|
msgid "Comment on <a href=\"%s\" class=\"%s\">issue %d</a>, by %s"
|
||||||
msgstr "Commentaire sur le <a href=\"%s\" class=\"%s\">ticket %d</a>, par %s"
|
msgstr ""
|
||||||
|
"Commentaire sur le <a href=\"%s\" class=\"%s\">ticket %d</a>, par %s"
|
||||||
|
|
||||||
#: IDF/IssueComment.php:182
|
#: IDF/IssueComment.php:182
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -3922,8 +3988,7 @@ msgstr "Le dépôt %s existe déjà."
|
|||||||
#: IDF/Plugin/SyncMercurial.php:142
|
#: IDF/Plugin/SyncMercurial.php:142
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s does not exist or is not writable."
|
msgid "%s does not exist or is not writable."
|
||||||
msgstr ""
|
msgstr "%s n'existe pas ou vous ne disposez pas des droits pour écrire dedans."
|
||||||
"%s n'existe pas ou vous ne disposez pas des droits pour écrire dedans."
|
|
||||||
|
|
||||||
#: IDF/Plugin/SyncMonotone.php:86 IDF/Plugin/SyncMonotone.php:457
|
#: IDF/Plugin/SyncMonotone.php:86 IDF/Plugin/SyncMonotone.php:457
|
||||||
#: IDF/Plugin/SyncMonotone.php:783
|
#: IDF/Plugin/SyncMonotone.php:783
|
||||||
@@ -3990,7 +4055,8 @@ msgstr "Impossible de parcourir la configuration d'usher dans \"%s\" : %s"
|
|||||||
#: IDF/Plugin/SyncMonotone.php:295
|
#: IDF/Plugin/SyncMonotone.php:295
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "usher configuration already contains a server entry named \"%s\""
|
msgid "usher configuration already contains a server entry named \"%s\""
|
||||||
msgstr "la configuration d'usher contient déja une entrée serveur appelée \"%s\""
|
msgstr ""
|
||||||
|
"la configuration d'usher contient déja une entrée serveur appelée \"%s\""
|
||||||
|
|
||||||
#: IDF/Plugin/SyncMonotone.php:320 IDF/Plugin/SyncMonotone.php:510
|
#: IDF/Plugin/SyncMonotone.php:320 IDF/Plugin/SyncMonotone.php:510
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4096,13 +4162,16 @@ msgstr "vote"
|
|||||||
|
|
||||||
#: IDF/Review/Comment.php:139 IDF/Review/Patch.php:151
|
#: IDF/Review/Comment.php:139 IDF/Review/Patch.php:151
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "<a href=\"%1$s\" class=\"%2$s\" title=\"View review\">Review %3$d</a>, %4$s"
|
msgid ""
|
||||||
msgstr "<a href=\"%1$s\" class=\"%2$s\" title=\"Voir la revue\">Revue %3$d</a>, %4$s"
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"View review\">Review %3$d</a>, %4$s"
|
||||||
|
msgstr ""
|
||||||
|
"<a href=\"%1$s\" class=\"%2$s\" title=\"Voir la revue\">Revue %3$d</a>, %4$s"
|
||||||
|
|
||||||
#: IDF/Review/Comment.php:141
|
#: IDF/Review/Comment.php:141
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Update of <a href=\"%s\" class=\"%s\">review %d</a>, by %s"
|
msgid "Update of <a href=\"%s\" class=\"%s\">review %d</a>, by %s"
|
||||||
msgstr "Mise à jour de la <a href=\"%s\" class=\"%s\">revue %d</a>, par %s"
|
msgstr ""
|
||||||
|
"Mise à jour de la <a href=\"%s\" class=\"%s\">revue %d</a>, par %s"
|
||||||
|
|
||||||
#: IDF/Review/Comment.php:151
|
#: IDF/Review/Comment.php:151
|
||||||
#, php-format
|
#, php-format
|
||||||
@@ -4480,8 +4549,7 @@ msgstr "Liste de surveillance : Tickets fermés"
|
|||||||
|
|
||||||
#: IDF/Views/Issue.php:196
|
#: IDF/Views/Issue.php:196
|
||||||
msgid "This table shows the closed issues in your watch list."
|
msgid "This table shows the closed issues in your watch list."
|
||||||
msgstr ""
|
msgstr "Ce tableau montre les tickets fermés dans votre liste de surveillance."
|
||||||
"Ce tableau montre les tickets fermés dans votre liste de surveillance."
|
|
||||||
|
|
||||||
#: IDF/Views/Issue.php:201
|
#: IDF/Views/Issue.php:201
|
||||||
msgid "Watch List: Open Issues"
|
msgid "Watch List: Open Issues"
|
||||||
@@ -4849,8 +4917,7 @@ msgid "Confirm Your Account Creation"
|
|||||||
msgstr "Confirmez la création de votre compte"
|
msgstr "Confirmez la création de votre compte"
|
||||||
|
|
||||||
#: IDF/Views.php:172
|
#: IDF/Views.php:172
|
||||||
msgid ""
|
msgid "Welcome! You can now participate in the life of your project of choice."
|
||||||
"Welcome! You can now participate in the life of your project of choice."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bienvenue ! Vous pouvez maintenant prendre part à la vie du projet de votre "
|
"Bienvenue ! Vous pouvez maintenant prendre part à la vie du projet de votre "
|
||||||
"choix."
|
"choix."
|
||||||
|
@@ -70,7 +70,6 @@
|
|||||||
<div id="ft">{block foot}{/block}</div>
|
<div id="ft">{block foot}{/block}</div>
|
||||||
</div>
|
</div>
|
||||||
{include 'idf/js-hotkeys.html'}
|
{include 'idf/js-hotkeys.html'}
|
||||||
{include 'idf/list-filter.html'}
|
|
||||||
{block javascript}{/block}
|
{block javascript}{/block}
|
||||||
{if $project}
|
{if $project}
|
||||||
<script type="text/javascript" charset="utf-8">{literal}
|
<script type="text/javascript" charset="utf-8">{literal}
|
||||||
|
@@ -49,7 +49,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="yui-b context">{block context}{/block}</div>
|
<div class="yui-b context" id="context">{block context}{/block}</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="ft">{block foot}{/block}</div>
|
<div id="ft">{block foot}{/block}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="yui-b context">{block context}{/block}</div>
|
<div class="yui-b context" id="context">{block context}{/block}</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="ft">{block foot}{/block}</div>
|
<div id="ft">{block foot}{/block}</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -84,6 +84,21 @@ $(document).ready(function(){
|
|||||||
else if (frag.length > 3 && frag.substring(0, 3) == '#ic') {
|
else if (frag.length > 3 && frag.substring(0, 3) == '#ic') {
|
||||||
$(frag).addClass("issue-comment-focus");
|
$(frag).addClass("issue-comment-focus");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var contextTop = $('div#context').position().top;
|
||||||
|
var contextFixEnabled = true;
|
||||||
|
$(window).scroll(function() {
|
||||||
|
if (!contextFixEnabled || $(window).scrollTop() < contextTop)
|
||||||
|
$('div#context').css('position', 'relative');
|
||||||
|
else
|
||||||
|
$('div#context').css('position', 'fixed');
|
||||||
|
});
|
||||||
|
$(window).resize(function() {
|
||||||
|
contextFixEnabled =
|
||||||
|
$('div#context').offset().top + $('div#context').height() <
|
||||||
|
$(window).height();
|
||||||
|
});
|
||||||
|
$(window).resize();
|
||||||
});
|
});
|
||||||
//]]>{/literal}
|
//]]>{/literal}
|
||||||
</script>{/if}
|
</script>{/if}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
{block body}
|
{block body}
|
||||||
|
|
||||||
<div class="download-file">
|
<div class="download-file">
|
||||||
<a href="{url 'IDF_Views_Download::download', array($project.shortname, $file.id)}">{$file}</a> - {$file.filesize|size}
|
<a href="{url 'IDF_Views_Download::download', array($project.shortname, $file.file)}">{$file}</a> - {$file.filesize|size}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>{blocktrans}<strong>Attention!</strong> If you want to delete a specific version of your software, maybe, someone is depending on this specific version to run his systems. Are you sure, you will not affect anybody when removing this file?{/blocktrans}</p>
|
<p>{blocktrans}<strong>Attention!</strong> If you want to delete a specific version of your software, maybe, someone is depending on this specific version to run his systems. Are you sure, you will not affect anybody when removing this file?{/blocktrans}</p>
|
||||||
|
@@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
<div class="download-file">
|
<div class="download-file">
|
||||||
{if $deprecated}<p class="smaller">{blocktrans}<strong>Attention!</strong> This file is marked as deprecated, download it only if you are sure you need this specific version.{/blocktrans}</p>{/if}
|
{if $deprecated}<p class="smaller">{blocktrans}<strong>Attention!</strong> This file is marked as deprecated, download it only if you are sure you need this specific version.{/blocktrans}</p>{/if}
|
||||||
<a href="{url 'IDF_Views_Download::download', array($project.shortname, $file.id)}">{$file}</a> - {$file.filesize|size}
|
<a href="{url 'IDF_Views_Download::download', array($project.shortname, $file.file)}">{$file}</a> - {$file.filesize|size}
|
||||||
|
<br />
|
||||||
|
<span class="helptext">{trans 'md5:'} {$file.md5}</span>
|
||||||
</div>
|
</div>
|
||||||
{if $file.changelog}
|
{if $file.changelog}
|
||||||
<h2 class="changes">{trans 'Changes'}</h2>
|
<h2 class="changes">{trans 'Changes'}</h2>
|
||||||
|
@@ -8,12 +8,18 @@
|
|||||||
<th>{trans "address"}</th>
|
<th>{trans "address"}</th>
|
||||||
<th>{trans "port"}</th>
|
<th>{trans "port"}</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
{if count($connections) == 0}
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="center">{trans 'No connections found.'}</td>
|
||||||
|
</tr>
|
||||||
|
{else}
|
||||||
{foreach $connections as $connection}
|
{foreach $connections as $connection}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$connection.address}</td>
|
<td>{$connection.address}</td>
|
||||||
<td>{$connection.port}</td>
|
<td>{$connection.port}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
{/if}
|
||||||
</table>
|
</table>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
@@ -9,6 +9,11 @@
|
|||||||
<th>{trans "status"}</th>
|
<th>{trans "status"}</th>
|
||||||
<th>{trans "action"}</th>
|
<th>{trans "action"}</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
{if count($servers) == 0}
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" align="center">{trans 'No monotone servers configured.'}</td>
|
||||||
|
</tr>
|
||||||
|
{else}
|
||||||
{foreach $servers as $server}
|
{foreach $servers as $server}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$server.name}</td>
|
<td>{$server.name}</td>
|
||||||
@@ -31,6 +36,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
{/if}
|
||||||
</table>
|
</table>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
@@ -2,7 +2,8 @@
|
|||||||
{block tabissues} class="active"{/block}
|
{block tabissues} class="active"{/block}
|
||||||
{block subtabs}
|
{block subtabs}
|
||||||
<div id="sub-tabs">
|
<div id="sub-tabs">
|
||||||
<a {if $inOpenIssues}class="active" {/if}href="{url 'IDF_Views_Issue::index', array($project.shortname)}">{trans 'Open Issues'}</a>
|
<a {if $inSummaryIssues}class="active" {/if}href="{url 'IDF_Views_Issue::summary', array($project.shortname)}">{trans 'Summary'}</a>
|
||||||
|
| <a {if $inOpenIssues}class="active" {/if}href="{url 'IDF_Views_Issue::index', array($project.shortname)}">{trans 'Open Issues'}</a>
|
||||||
{if !$user.isAnonymous()} | <a {if $inCreate}class="active" {/if}href="{url 'IDF_Views_Issue::create', array($project.shortname)}">{trans 'New Issue'}</a> | <a {if $inMyIssues}class="active" {/if}href="{url 'IDF_Views_Issue::myIssues', array($project.shortname, 'submit')}">{trans 'My Issues'}</a>
|
{if !$user.isAnonymous()} | <a {if $inCreate}class="active" {/if}href="{url 'IDF_Views_Issue::create', array($project.shortname)}">{trans 'New Issue'}</a> | <a {if $inMyIssues}class="active" {/if}href="{url 'IDF_Views_Issue::myIssues', array($project.shortname, 'submit')}">{trans 'My Issues'}</a>
|
||||||
| <a {if $inWatchList}class="active" {/if}href="{url 'IDF_Views_Issue::watchList', array($project.shortname, 'open')}">{trans 'My watch list'}</a>{/if} |
|
| <a {if $inWatchList}class="active" {/if}href="{url 'IDF_Views_Issue::watchList', array($project.shortname, 'open')}">{trans 'My watch list'}</a>{/if} |
|
||||||
<form class="star" action="{url 'IDF_Views_Issue::search', array($project.shortname)}" method="get">
|
<form class="star" action="{url 'IDF_Views_Issue::search', array($project.shortname)}" method="get">
|
||||||
|
@@ -14,8 +14,18 @@
|
|||||||
</ul>{/if}
|
</ul>{/if}
|
||||||
{if $c.changes}
|
{if $c.changes}
|
||||||
{foreach $c.changes as $w => $v}
|
{foreach $c.changes as $w => $v}
|
||||||
<strong>{if $w == 'su'}{trans 'Summary:'}{/if}{if $w == 'st'}{trans 'Status:'}{/if}{if $w == 'ow'}{trans 'Owner:'}{/if}{if $w == 'lb'}{trans 'Labels:'}{/if}</strong> {if $w == 'lb'}{assign $l = implode(', ', $v)}{$l}{else}{$v}{/if}<br />
|
<strong>{if $w == 'su'}{trans 'Summary:'}{/if}{if $w == 'st'}{trans 'Status:'}{/if}{if $w == 'ow'}{trans 'Owner:'}{/if}{if $w == 'lb'}{trans 'Labels:'}{/if}{if $w == 'rel'}{trans 'Relations:'}{/if}</strong>
|
||||||
|
{if $w == 'lb' or $w == 'rel'}
|
||||||
|
{foreach $v as $t => $ls}
|
||||||
|
{foreach $ls as $l}
|
||||||
|
{if $t == 'rem'}<s>{/if}{$l}{if $t == 'rem'}</s>{/if}
|
||||||
|
{/foreach}
|
||||||
|
{/foreach}
|
||||||
|
{else}
|
||||||
|
{$v}
|
||||||
|
{/if}<br />
|
||||||
{/foreach}
|
{/foreach}
|
||||||
{/if}
|
{/if}
|
||||||
</div></content>
|
</div></content>
|
||||||
</entry>
|
</entry>
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
{if strlen($c.content) > 0}{$c.content|safe}{/if}{if $c.changedIssue()}
|
{if strlen($c.content) > 0}{$c.content|safe}{/if}{if $c.changedIssue()}
|
||||||
{foreach $c.changes as $w => $v}
|
{foreach $c.changes as $w => $v}
|
||||||
{if $w == 'su'}{trans 'Summary:'}{/if}{if $w == 'st'}{trans 'Status:'}{/if}{if $w == 'ow'}{trans 'Owner:'}{/if}{if $w == 'lb'}{trans 'Labels:'}{/if} {if $w == 'lb'}{assign $l = implode(', ', $v)}{$l}{else}{$v}{/if}{/foreach}{/if}{assign $attachments = $c.get_attachment_list()}{if $attachments.count() > 0}
|
{if $w == 'su'}{trans 'Summary:'}{/if}{if $w == 'st'}{trans 'Status:'}{/if}{if $w == 'ow'}{trans 'Owner:'}{/if}{if $w == 'lb'}{trans 'Labels:'}{/if}{if $w == 'rel'}{trans 'Relations:'}{/if} {if $w == 'lb' or $w == 'rel'}{foreach $v as $t => $ls}{foreach $ls as $l}{if $t == 'rem'}-{/if}{$l} {/foreach}{/foreach}{else}{$v}{/if}{/foreach}{/if}{assign $attachments = $c.get_attachment_list()}{if $attachments.count() > 0}
|
||||||
|
|
||||||
{trans 'Attachments:'}{foreach $attachments as $a}
|
{trans 'Attachments:'}{foreach $attachments as $a}
|
||||||
- {$a.filename|safe} - {$a.filesize|ssize}
|
- {$a.filename|safe} - {$a.filesize|ssize}
|
||||||
|
95
src/IDF/templates/idf/issues/summary.html
Normal file
95
src/IDF/templates/idf/issues/summary.html
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
{extends "idf/issues/base.html"}
|
||||||
|
|
||||||
|
{block docclass}yui-t2{assign $inSummaryIssues=true}{/block}
|
||||||
|
|
||||||
|
{block body}
|
||||||
|
{if $trackerEmpty}
|
||||||
|
{aurl 'create_url', 'IDF_Views_Issue::create', array($project.shortname)}
|
||||||
|
<p>{blocktrans}The issue tracker is empty.<br />You can create your first issue <a href="{$create_url}">here</a>.{/blocktrans}</p>
|
||||||
|
{else}
|
||||||
|
<div class='issue-summary'>
|
||||||
|
{foreach $tagStatistics as $key => $class}
|
||||||
|
<div>
|
||||||
|
<h2>{blocktrans}Unresolved: By {$key}{/blocktrans}</h2>
|
||||||
|
<table class='issue-summary'>
|
||||||
|
<tbody>
|
||||||
|
{foreach $class as $key => $value}
|
||||||
|
<tr>
|
||||||
|
<td class="name"><a href="{url 'IDF_Views_Issue::listLabel', array($project.shortname, $value[2], 'open')}">{$key}</a></td>
|
||||||
|
<td class="count">{$value[0]}</td>
|
||||||
|
<td class="graph">
|
||||||
|
<table class='graph'>
|
||||||
|
<tbody><tr>
|
||||||
|
<td style="width:{$value[1] * 0.8 + 1}%" class="graph-color" valign="center">
|
||||||
|
<div class="colour-bar"></div>
|
||||||
|
</td>
|
||||||
|
<td class="graph-percent">{$value[1]}%</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/foreach}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{/foreach}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='issue-summary'>
|
||||||
|
{if $status}
|
||||||
|
<div>
|
||||||
|
<h2>{blocktrans}Status Summary{/blocktrans}</h2>
|
||||||
|
<table class='issue-summary'>
|
||||||
|
<tbody>
|
||||||
|
{foreach $status as $key => $value}
|
||||||
|
<tr>
|
||||||
|
<td class="name"><a href="{url 'IDF_Views_Issue::listStatus', array($project.shortname, $key)}">{$key}</a></td>
|
||||||
|
<td class="count">{$value[0]}</td>
|
||||||
|
<td class="graph">
|
||||||
|
<table class='graph'>
|
||||||
|
<tbody><tr>
|
||||||
|
<td style="width:{$value[1] * 0.8 + 1}%" class="graph-color" valign="center">
|
||||||
|
<div class="colour-bar"></div>
|
||||||
|
</td>
|
||||||
|
<td class="graph-percent">{$value[1]}%</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/foreach}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{if $ownerStatistics}
|
||||||
|
<div>
|
||||||
|
<h2>{blocktrans}Unresolved: By Assignee{/blocktrans}</h2>
|
||||||
|
<table class='issue-summary'>
|
||||||
|
<tbody>
|
||||||
|
{foreach $ownerStatistics as $key => $value}
|
||||||
|
<tr>
|
||||||
|
<td class="name">{$key}</td>
|
||||||
|
<td class="count">{$value[0]}</td>
|
||||||
|
<td class="graph">
|
||||||
|
<table class='graph'>
|
||||||
|
<tbody><tr>
|
||||||
|
<td style="width:{$value[1] * 0.8 + 1}%" class="graph-color" valign="center">
|
||||||
|
<div class="colour-bar"></div>
|
||||||
|
</td>
|
||||||
|
<td class="graph-percent">{$value[1]}%</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/foreach}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
{/block}
|
@@ -21,7 +21,9 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</p>
|
</p>
|
||||||
<p><strong>Subscribe to this timeline</strong><br /><img src="{media '/idf/img/rss.png'}" alt="{trans 'RSS'}" /> <a href="{$feedurl}" >Atom feeds</a></p>
|
<p><strong>{trans 'Subscribe to this timeline'}</strong><br />
|
||||||
|
<span class="label"><img src="{media '/idf/img/rss.png'}" alt="{trans 'RSS'}" /> <a href="{$feedurl}">{trans 'Atom feed'}</a></span>
|
||||||
|
</p>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -34,6 +34,9 @@
|
|||||||
{foreach $changes.renames as $oldname => $newname}
|
{foreach $changes.renames as $oldname => $newname}
|
||||||
<tr><td><span class="scm-action renamed" title="{trans 'renamed'}">R</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $newname)}">{$oldname} → {$newname}</a></td></tr>
|
<tr><td><span class="scm-action renamed" title="{trans 'renamed'}">R</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $newname)}">{$oldname} → {$newname}</a></td></tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
{foreach $changes.copies as $srcname => $destname}
|
||||||
|
<tr><td><span class="scm-action copied" title="{trans 'copied'}">C</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $destname)}">{$srcname} → {$destname}</a></td></tr>
|
||||||
|
{/foreach}
|
||||||
{foreach $changes.additions as $filename}
|
{foreach $changes.additions as $filename}
|
||||||
<tr><td><span class="scm-action added" title="{trans 'added'}">A</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>{if !empty($diff.files[$filename])} (<a href="#diff-{$filename|md5}">{trans 'full'}</a>){/if}</td></tr>
|
<tr><td><span class="scm-action added" title="{trans 'added'}">A</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>{if !empty($diff.files[$filename])} (<a href="#diff-{$filename|md5}">{trans 'full'}</a>){/if}</td></tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
2
src/IDF/templates/idf/source/git/invalid_revision.html
Normal file
2
src/IDF/templates/idf/source/git/invalid_revision.html
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{extends "idf/source/invalid_revision.html"}
|
||||||
|
|
@@ -32,13 +32,13 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="fileicon"><img src="{media '/idf/img/'~$file.type~'.png'}" alt="{$file.type}" /></td>
|
<td class="fileicon"><img src="{media '/idf/img/'~$file.type~'.png'}" alt="{$file.type}" /></td>
|
||||||
{if $file.type != 'extern'}
|
{if $file.type != 'extern'}
|
||||||
<td{if $file.type == 'tree'} colspan="4"{/if}><a href="{$url}">{$file.file}</a></td>{else}<td><a href="#" title="{$file.hash}">{$file.file}</a></td>{/if}
|
<td{if $file.type == 'tree'} colspan="4"{/if}><a href="{$url}"><nobr>{$file.file}</nobr></a></td>{else}<td><a href="#" title="{$file.hash}"><nobr>{$file.file}</nobr></a></td>{/if}
|
||||||
{if $file.type == 'blob'}
|
{if $file.type == 'blob'}
|
||||||
{if isset($file.date) and $file.log != '----'}
|
{if isset($file.date) and $file.log != '----'}
|
||||||
<td><span class="smaller">{$file.date|dateago:"without"}</span></td>
|
<td><span class="smaller"><nobr>{$file.date|dateago:"without"}</nobr></span></td>
|
||||||
<td><span class="smaller">{$file.author|strip_tags|trim}{trans ':'} {issuetext $file.log, $request, true, false}</span></td>
|
<td><span class="smaller">{$file.author|strip_tags|trim}{trans ':'} {issuetext $file.log, $request, true, false}</span></td>
|
||||||
{else}<td colspan="2"></td>{/if}
|
{else}<td colspan="2"></td>{/if}
|
||||||
<td>{$file.size|size}</td>{/if}
|
<td><nobr>{$file.size|size}</nobr></td>{/if}
|
||||||
{if $file.type == 'extern'}
|
{if $file.type == 'extern'}
|
||||||
<td colspan="3">{$file.extern}</td>
|
<td colspan="3">{$file.extern}</td>
|
||||||
{/if}
|
{/if}
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
<p>{blocktrans}The branch or revision <b>{$commit}</b> is not valid or does not exist
|
<p>{blocktrans}The branch or revision <b>{$commit}</b> is not valid or does not exist
|
||||||
in this repository.{/blocktrans}</p>
|
in this repository.{/blocktrans}</p>
|
||||||
|
|
||||||
|
{if count($branches) > 0}
|
||||||
<p>{blocktrans}The following list shows all available branches:{/blocktrans}</p>
|
<p>{blocktrans}The following list shows all available branches:{/blocktrans}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{foreach $branches as $branch => $path}
|
{foreach $branches as $branch => $path}
|
||||||
@@ -14,6 +15,7 @@ in this repository.{/blocktrans}</p>
|
|||||||
</li>
|
</li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</ul>
|
</ul>
|
||||||
|
{/if}
|
||||||
|
|
||||||
{if $isOwner or $isMember}
|
{if $isOwner or $isMember}
|
||||||
{aurl 'url', 'IDF_Views_Source::help', array($project.shortname)}
|
{aurl 'url', 'IDF_Views_Source::help', array($project.shortname)}
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
{extends "idf/source/invalid_revision.html"}
|
||||||
|
|
@@ -5,12 +5,25 @@
|
|||||||
<h2 class="top"><a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $commit)}">{trans 'Root'}</a><span class="sep">/</span>{if $breadcrumb}{$breadcrumb|safe}{/if}</h2>
|
<h2 class="top"><a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $commit)}">{trans 'Root'}</a><span class="sep">/</span>{if $breadcrumb}{$breadcrumb|safe}{/if}</h2>
|
||||||
|
|
||||||
<table class="code" summary=" ">
|
<table class="code" summary=" ">
|
||||||
{if !$tree_in and !$tags_in}
|
{if (!$tree_in and !$tags_in) or $props}
|
||||||
{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $commit)}
|
{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $commit)}
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr><th colspan="2">{blocktrans}Source at commit <a class="mono" href="{$url}">{$commit}</a> created {$cobject.date|dateago}.{/blocktrans}<br/>
|
{if $props}
|
||||||
<span class="smaller">{blocktrans}By {$cobject.author|strip_tags|trim}, {$cobject.title}{/blocktrans}</span>
|
<tr><th colspan="2">
|
||||||
|
<ul>
|
||||||
|
{foreach $props as $prop => $val}
|
||||||
|
<li>{blocktrans}Property <strong>{$prop}</strong> set to <em>{$val}</em>{/blocktrans}</li>
|
||||||
|
{/foreach}
|
||||||
|
</ul>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
|
{/if}
|
||||||
|
{if !$tree_in and !$tags_in}
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">{blocktrans}Source at commit <a class="mono" href="{$url}">{$commit}</a> created {$cobject.date|dateago}.{/blocktrans}<br/>
|
||||||
|
<span class="smaller">{blocktrans}By {$cobject.author|strip_tags|trim}, {$cobject.title}{/blocktrans}</span>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
{/if}
|
||||||
</tfoot>
|
</tfoot>
|
||||||
{/if}
|
{/if}
|
||||||
<tbody>
|
<tbody>
|
||||||
|
2
src/IDF/templates/idf/source/mtn/invalid_revision.html
Normal file
2
src/IDF/templates/idf/source/mtn/invalid_revision.html
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{extends "idf/source/invalid_revision.html"}
|
||||||
|
|
@@ -11,14 +11,27 @@
|
|||||||
<th>{trans 'Message'}</th>
|
<th>{trans 'Message'}</th>
|
||||||
<th>{trans 'Size'}</th>
|
<th>{trans 'Size'}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>{if !$tree_in and !$tags_in}
|
</thead>
|
||||||
|
{if (!$tree_in and !$tags_in) or $props}
|
||||||
{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $commit)}
|
{aurl 'url', 'IDF_Views_Source::commit', array($project.shortname, $commit)}
|
||||||
<tfoot>
|
<tfoot>
|
||||||
|
{if $props}
|
||||||
|
<tr><th colspan="5">
|
||||||
|
<ul>
|
||||||
|
{foreach $props as $prop => $val}
|
||||||
|
<li>{blocktrans}Property <strong>{$prop}</strong> set to <em>{$val}</em>{/blocktrans}</li>
|
||||||
|
{/foreach}
|
||||||
|
</ul>
|
||||||
|
</th></tr>
|
||||||
|
{/if}
|
||||||
|
{if !$tree_in and !$tags_in}
|
||||||
<tr><th colspan="5">{blocktrans}Source at commit <a class="mono" href="{$url}">{$commit}</a> created {$cobject.date|dateago}.{/blocktrans}<br/>
|
<tr><th colspan="5">{blocktrans}Source at commit <a class="mono" href="{$url}">{$commit}</a> created {$cobject.date|dateago}.{/blocktrans}<br/>
|
||||||
<span class="smaller">{blocktrans}By {$cobject.author|strip_tags|trim}, {$cobject.title}{/blocktrans}</span>
|
<span class="smaller">{blocktrans}By {$cobject.author|strip_tags|trim}, {$cobject.title}{/blocktrans}</span>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
|
{/if}
|
||||||
|
{/if}
|
||||||
</tfoot>
|
</tfoot>
|
||||||
{/if}<tbody>
|
<tbody>
|
||||||
{if $base}
|
{if $base}
|
||||||
<tr>
|
<tr>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<p><strong>{trans 'Revision:'}</strong> {$commit}</p>
|
<p><strong>{trans 'Revision:'}</strong> {$commit}</p>
|
||||||
<p>
|
<p>
|
||||||
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
||||||
<input type="submit" name="s" value="{trans 'Go to revision'}" />
|
<input type="submit" name="s" value="{trans 'Switch'}" />
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
{/block}
|
{/block}
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<p><strong>{trans 'Revision:'}</strong> {$commit}</p>
|
<p><strong>{trans 'Revision:'}</strong> {$commit}</p>
|
||||||
<p>
|
<p>
|
||||||
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5"/>
|
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5"/>
|
||||||
<input type="submit" name="s" value="{trans 'Go to revision'}"/>
|
<input type="submit" name="s" value="{trans 'Switch'}"/>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
{/block}
|
{/block}
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
<tr><th colspan="2">
|
<tr><th colspan="2">
|
||||||
<ul>
|
<ul>
|
||||||
{foreach $props as $prop => $val}
|
{foreach $props as $prop => $val}
|
||||||
<li>{trans 'Property'} <strong>{$prop}</strong> {trans 'set to:'} <em>{$val}</em></li>
|
<li>{blocktrans}Property <strong>{$prop}</strong> set to <em>{$val}</em>{/blocktrans}</li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</ul>
|
</ul>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<p>
|
<p>
|
||||||
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
||||||
<input type="hidden" name="sourcefile" value="{$base}"/>
|
<input type="hidden" name="sourcefile" value="{$base}"/>
|
||||||
<input type="submit" name="s" value="{trans 'Go to revision'}" /></p>
|
<input type="submit" name="s" value="{trans 'Switch'}" /></p>
|
||||||
</form>
|
</form>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
30
src/IDF/templates/idf/source/svn/invalid_revision.html
Normal file
30
src/IDF/templates/idf/source/svn/invalid_revision.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{extends "idf/source/base.html"}
|
||||||
|
{block docclass}yui-t2{assign $inError=true}{/block}
|
||||||
|
{block body}
|
||||||
|
|
||||||
|
<p>{blocktrans}The revision <b>{$commit}</b> is not valid or does not exist
|
||||||
|
in this repository.{/blocktrans}</p>
|
||||||
|
|
||||||
|
{if count($branches) > 0}
|
||||||
|
<p>{blocktrans}The following list shows all available branches:{/blocktrans}</p>
|
||||||
|
<ul>
|
||||||
|
{foreach $branches as $branch => $path}
|
||||||
|
{if $path}{aurl 'url', 'IDF_Views_Source::tree', array($project.shortname, 'HEAD', $path)}
|
||||||
|
{else}{aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, 'HEAD')}{/if}
|
||||||
|
<li class="label">
|
||||||
|
<a href="{$url}" class="label">{$branch}</a>
|
||||||
|
</li>
|
||||||
|
{/foreach}
|
||||||
|
</ul>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{if $isOwner or $isMember}
|
||||||
|
{aurl 'url', 'IDF_Views_Source::help', array($project.shortname)}
|
||||||
|
<p>{blocktrans}If this is a new repository, the reason for this error
|
||||||
|
could be that you have not committed and / or pushed any change so far.
|
||||||
|
In this case please take a look at the <a href="{$url}">Help</a> page
|
||||||
|
how to access your repository.{/blocktrans}</p>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{/block}
|
||||||
|
|
@@ -19,7 +19,7 @@
|
|||||||
<tr><th colspan="6">
|
<tr><th colspan="6">
|
||||||
<ul>
|
<ul>
|
||||||
{foreach $props as $prop => $val}
|
{foreach $props as $prop => $val}
|
||||||
<li>{trans 'Property'} <strong>{$prop}</strong> {trans 'set to:'} <em>{$val}</em></li>
|
<li>{blocktrans}Property <strong>{$prop}</strong> set to <em>{$val}</em>{/blocktrans}</li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</ul>
|
</ul>
|
||||||
</th></tr>
|
</th></tr>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
<p>
|
<p>
|
||||||
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
<input accesskey="4" type="text" value="{$commit}" name="rev" size="5" />
|
||||||
<input type="hidden" name="sourcefile" value="{$base}"/>
|
<input type="hidden" name="sourcefile" value="{$base}"/>
|
||||||
<input type="submit" name="s" value="{trans 'Go to revision'}" /></p>
|
<input type="submit" name="s" value="{trans 'Switch'}" /></p>
|
||||||
</form>
|
</form>
|
||||||
<p><strong>{trans 'Branches:'}</strong><br />
|
<p><strong>{trans 'Branches:'}</strong><br />
|
||||||
{foreach $branches as $branch => $path}
|
{foreach $branches as $branch => $path}
|
||||||
|
90
test/IDF/ProjectTest.php
Normal file
90
test/IDF/ProjectTest.php
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
/*
|
||||||
|
# ***** BEGIN LICENSE BLOCK *****
|
||||||
|
# This file is part of InDefero, an open source project management application.
|
||||||
|
# Copyright (C) 2008-2011 Céondo Ltd and contributors.
|
||||||
|
#
|
||||||
|
# InDefero is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# InDefero is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
#
|
||||||
|
# ***** END LICENSE BLOCK ***** */
|
||||||
|
|
||||||
|
class IDF_ProjectTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testGetIssueCountByOwner()
|
||||||
|
{
|
||||||
|
// Add users
|
||||||
|
$user1 = new Pluf_User();
|
||||||
|
$user1->login = 'user1';
|
||||||
|
$user1->create();
|
||||||
|
$user2 = new Pluf_User();
|
||||||
|
$user2->login = 'user2';
|
||||||
|
$user2->create();
|
||||||
|
|
||||||
|
// Add a project
|
||||||
|
$prj = new IDF_Project();
|
||||||
|
$prj->create();
|
||||||
|
$tag = $prj->getTagIdsByStatus('open');
|
||||||
|
|
||||||
|
// First test with no issue
|
||||||
|
$stats = $prj->getIssueCountByOwner();
|
||||||
|
$this->assertEquals($stats, array());
|
||||||
|
|
||||||
|
// Add some issues
|
||||||
|
$issue1 = new IDF_Issue();
|
||||||
|
$issue1->project = $prj;
|
||||||
|
$issue1->submitter = $user1;
|
||||||
|
$issue1->owner = $user1;
|
||||||
|
$issue1->status = new IDF_Tag($tag[0]);
|
||||||
|
$issue1->create();
|
||||||
|
|
||||||
|
$issue2 = new IDF_Issue();
|
||||||
|
$issue2->project = $prj;
|
||||||
|
$issue2->submitter = $user2;
|
||||||
|
$issue2->owner = $user1;
|
||||||
|
$issue2->status = new IDF_Tag($tag[0]);
|
||||||
|
$issue2->create();
|
||||||
|
|
||||||
|
$issue3 = new IDF_Issue();
|
||||||
|
$issue3->project = $prj;
|
||||||
|
$issue3->submitter = $user2;
|
||||||
|
$issue3->status = new IDF_Tag($tag[0]);
|
||||||
|
$issue3->create();
|
||||||
|
|
||||||
|
$issue4 = new IDF_Issue();
|
||||||
|
$issue4->project = $prj;
|
||||||
|
$issue4->submitter = $user2;
|
||||||
|
$issue4->owner = $user2;
|
||||||
|
$issue4->status = new IDF_Tag($tag[0]);
|
||||||
|
$issue4->create();
|
||||||
|
|
||||||
|
// 2nd test
|
||||||
|
$stats = $prj->getIssueCountByOwner();
|
||||||
|
$expected = array(0 => 1,
|
||||||
|
$user2->id => 1,
|
||||||
|
$user1->id => 2);
|
||||||
|
$this->assertEquals($stats, $expected);
|
||||||
|
|
||||||
|
// Clean DB
|
||||||
|
$issue4->delete();
|
||||||
|
$issue3->delete();
|
||||||
|
$issue2->delete();
|
||||||
|
$issue1->delete();
|
||||||
|
$prj->delete();
|
||||||
|
$user2->delete();
|
||||||
|
$user1->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@@ -625,6 +625,7 @@ END;
|
|||||||
'additions' => array('new_dir', 'new_dir/new_file'),
|
'additions' => array('new_dir', 'new_dir/new_file'),
|
||||||
'deletions' => array('old_dir', 'old_dir/old_file'),
|
'deletions' => array('old_dir', 'old_dir/old_file'),
|
||||||
'renames' => array('dir_with_old_name' => 'new_dir/dir_with_new_name'),
|
'renames' => array('dir_with_old_name' => 'new_dir/dir_with_new_name'),
|
||||||
|
'copies' => array(), // this is always empty
|
||||||
'patches' => array('existing_file'),
|
'patches' => array('existing_file'),
|
||||||
'properties' => array(
|
'properties' => array(
|
||||||
'new_dir/dir_with_new_name' => array(
|
'new_dir/dir_with_new_name' => array(
|
||||||
@@ -714,6 +715,31 @@ END;
|
|||||||
$this->assertEquals('', $commit->diff);
|
$this->assertEquals('', $commit->diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetProperties()
|
||||||
|
{
|
||||||
|
$rev = "2345678901234567890123456789012345678901";
|
||||||
|
|
||||||
|
$instance = $this->createMock();
|
||||||
|
$instance->getStdio()->setExpectedOutput(array('interface_version'), array(), '13.1');
|
||||||
|
|
||||||
|
$stdio =<<<END
|
||||||
|
attr "foo" "bar"
|
||||||
|
state "unchanged"
|
||||||
|
|
||||||
|
attr "some new
|
||||||
|
line" "and more <weird>-
|
||||||
|
nesses"
|
||||||
|
END;
|
||||||
|
$instance->getStdio()->setExpectedOutput(array('get_attributes', 'foo'), array('r' => $rev), $stdio);
|
||||||
|
$res = $instance->getProperties($rev, 'foo');
|
||||||
|
|
||||||
|
$this->assertEquals(2, count($res));
|
||||||
|
$this->assertEquals(array(
|
||||||
|
'foo' => 'bar',
|
||||||
|
"some new\nline" => "and more <weird>-\nnesses"
|
||||||
|
), $res);
|
||||||
|
}
|
||||||
|
|
||||||
public function testGetExtraProperties()
|
public function testGetExtraProperties()
|
||||||
{
|
{
|
||||||
$instance = $this->createMock();
|
$instance = $this->createMock();
|
||||||
|
@@ -86,6 +86,14 @@ a.soft:visited {
|
|||||||
|
|
||||||
div.context {
|
div.context {
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.context h3 {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 10px 0 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,9 +135,9 @@ ul.errorlist {
|
|||||||
div.user-messages {
|
div.user-messages {
|
||||||
border: 1px solid rgb(229, 225, 169);
|
border: 1px solid rgb(229, 225, 169);
|
||||||
background-color: #fffde3;
|
background-color: #fffde3;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 2em;
|
||||||
margin-left: -1px;
|
margin-left: -1px;
|
||||||
width: 90%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.theterms {
|
div.theterms {
|
||||||
@@ -275,7 +283,7 @@ div.issue-changes-timeline {
|
|||||||
|
|
||||||
div.issue-prev-next {
|
div.issue-prev-next {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: -25px;
|
margin-top: -1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.issue-submit-info {
|
div.issue-submit-info {
|
||||||
@@ -295,6 +303,11 @@ span.label {
|
|||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.label img {
|
||||||
|
max-height: 13px;
|
||||||
|
vertical-align: -10%;
|
||||||
|
}
|
||||||
|
|
||||||
a.label {
|
a.label {
|
||||||
color: #204a87;
|
color: #204a87;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -923,14 +936,6 @@ ol > li {
|
|||||||
/**
|
/**
|
||||||
* List expander for tag and branch view
|
* List expander for tag and branch view
|
||||||
*/
|
*/
|
||||||
.context {}
|
|
||||||
|
|
||||||
.context h3 {
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: bold;
|
|
||||||
margin: 10px 0 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.context > .expander {
|
.context > .expander {
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -1053,6 +1058,10 @@ span.scm-action.renamed {
|
|||||||
background-color: purple;
|
background-color: purple;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
span.scm-action.copied {
|
||||||
|
background-color: orchid;
|
||||||
|
}
|
||||||
|
|
||||||
span.scm-action.property-changed {
|
span.scm-action.property-changed {
|
||||||
background-color: blue;
|
background-color: blue;
|
||||||
}
|
}
|
||||||
@@ -1095,3 +1104,53 @@ div.p-list-private {
|
|||||||
right: -3px;
|
right: -3px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue summary
|
||||||
|
*/
|
||||||
|
div.issue-summary {
|
||||||
|
float: left;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.issue-summary > div {
|
||||||
|
margin-right: 3em;
|
||||||
|
padding-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.issue-summary h2 {
|
||||||
|
border-bottom: 1px solid #A5E26A;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary tr td {
|
||||||
|
border: 0;
|
||||||
|
padding: .1em .005em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary td.graph {
|
||||||
|
width: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary td.count {
|
||||||
|
text-align: right;
|
||||||
|
padding-right: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.graph {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary td.graph-color {
|
||||||
|
background: #3C78B5;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.issue-summary td.graph-percent {
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user