44 Commits

Author SHA1 Message Date
Thomas Keller
b36b8e3afb Final adjustions to the project logo code
- remove the question mark from the default logo for simplification,
  add a soft drop shadow to make the logo more visible on not so light
  backgrounds
- display the project logo and the lock icon in the project list dropdown
- re-position the project title and display the lock icon (if needed)
  on top of the main logo
The code now works best with uploaded logos of 32x32px^2; smaller logos
will be downsampled and repositioned on a best breed basis.
2011-04-27 00:03:44 +02:00
William MARTIN
dc31155de1 Second pass of code review 2011-04-11 15:37:40 +02:00
Thomas Keller
0bae69908b Spelling 2011-04-07 22:40:32 +02:00
Thomas Keller
47a077bc82 Merge branch 'feature.better-home' of projects.ceondo.com:indefero into feature.better-home 2011-04-07 22:38:40 +02:00
William MARTIN
836ff71364 Update code to fix thomas review's 2011-04-06 15:33:26 +02:00
Thomas Keller
576c06ffaf Merge branch 'feature.better-home' of git://projects.ceondo.com/indefero into feature.better-home 2011-04-02 00:17:51 +02:00
William MARTIN
352dc3e179 Add IDF_Form_ProjectConf
Update template
2011-04-01 16:05:32 +02:00
William MARTIN
aa164936f4 Remove commented code 2011-04-01 14:19:07 +02:00
William MARTIN
9a93acd1a5 Update the admin template 2011-04-01 14:17:56 +02:00
William MARTIN
587aa11cda Update the index template 2011-04-01 14:14:30 +02:00
William MARTIN
d04ecd60c4 Add default logo for project without one 2011-04-01 14:13:42 +02:00
Thomas Keller
aa68fe3485 Note fix for issue 655. 2011-03-30 00:19:18 +02:00
Thomas Keller
e408fe8733 Make the function static again; this change silently slipped through. 2011-03-30 00:17:35 +02:00
Thomas Keller
836986462a Add Stewart to AUTHORS. 2011-03-30 00:13:50 +02:00
Stewart Platt
51c6cdb20d Only display those filter options for items the user actually has access to
(fixes issue 655)
2011-03-30 00:12:07 +02:00
Thomas Keller
766232f29b Add missing license header. 2011-03-30 00:00:22 +02:00
Thomas Keller
2ed021f30b Merge branch 'develop' of projects.ceondo.com:indefero into develop 2011-03-28 18:00:23 +02:00
Thomas Keller
899fe561df Merge branch 'release-1.1' into develop 2011-03-28 17:59:08 +02:00
Thomas Keller
67d8936083 Start 1.1.2 development 2011-03-28 17:57:15 +02:00
Thomas Keller
78f5cef5bd Enter a release date (i.e. release) 1.1.1 2011-03-28 17:52:53 +02:00
Fernando Sayago Gil
8928b1654c One new string translated. 2011-03-28 17:46:08 +02:00
William MARTIN
977fa0d1d4 Translate a new string. 2011-03-28 12:46:06 +02:00
Thomas Keller
1d89cec2cf Merge branch 'release-1.1' into develop 2011-03-28 01:26:20 +02:00
Thomas Keller
6c6b7d6bb2 Bump to 1.1.1 (not released yet, though) 2011-03-28 01:21:10 +02:00
Thomas Keller
f92e88e9b4 Note the recent fixes 2011-03-28 01:20:54 +02:00
Thomas Keller
6e58899fdf Add the new string to idf.pot and update the German translation
accordingly.
2011-03-28 01:15:22 +02:00
Thomas Keller
1513598420 Add a short sentence about password recovery on the registration page
(fixes issue 652)
2011-03-28 01:13:15 +02:00
Thomas Keller
9cfc060760 Improve a translation. 2011-03-28 00:56:44 +02:00
Patrick Georgi
a531e34ec2 Add IDF_EmailAddress to backup 2011-03-25 20:39:11 +01:00
Jean-Philippe Fleury
2cce23b5b4 Fix a typo in the French translation and add myself to AUTHORS. 2011-03-25 13:17:49 +01:00
Sindre Myren
e518bc9b68 Updated gitserve.py to work with python 3.x 2011-03-25 11:08:18 +01:00
Thomas Keller
8e02d05ba9 Notice the fix of issue 643 in NEWS 2011-03-25 00:53:12 +01:00
Thomas Keller
f131083315 Skip linking to a non-existing diff section for changed binary files
(fixes issue 643)
2011-03-25 00:45:06 +01:00
Thomas Keller
39ba5b37ef Ignore a couple of files for code coverage that should not be covered;
add a simle run-tests script that steals some code from photon to
return the code coverage at the end of the test execution
(we're only at about 8% - lots of work left...)
2011-03-25 00:29:50 +01:00
Thomas Keller
002fa05c7f Merge branch 'release-1.1' into develop 2011-03-25 00:14:26 +01:00
Thomas Keller
1a52133fd4 getArchiveStream() should actually be public (issue 648) 2011-03-25 00:11:44 +01:00
Thomas Keller
30900f7196 monotone zip archive entries now all carry the revision date as mtime (issue 645);
add a test case for the zip render response that works with and without PHP's
zip extension
2011-03-24 23:54:52 +01:00
Thomas Keller
b753cf0837 Fix a coment. 2011-03-24 01:19:05 +01:00
Thomas Keller
53ab5b6aff Expand the bootstrap script to setup an empty IDF environment. 2011-03-24 00:41:22 +01:00
Thomas Keller
78a0402351 Prepare the Stdio class for easier testing.
- create an interface that describes the basic methods
- let the real stdio class implement this interface
- inject the stdio instance into IDF_Scm_Monotone and do not
  create it in the constructor
- ensure in IDF_Scm_Monotone_ZipRender that we get the proper
  constructor arguments
On a slighly unrelated note, make _getAuthOptions() in the stdio
implementation private.
2011-03-23 00:47:17 +01:00
Thomas Keller
5b5705fe90 Add a unit test for monotone's basicio parser and compiler.
Also note a couple of quirks and be less strict (for now) when it
comes to hash parsing and stanza lines without values.
2011-03-23 00:26:26 +01:00
Thomas Keller
f08b5c5e3f Note syncmonotone.mdtext in INSTALL.mdtext 2011-03-20 14:19:53 +01:00
Thomas Keller
aa87acd432 Start 1.2 development. 2011-03-20 13:48:49 +01:00
Thomas Keller
7af7ef8357 Merge branch 'release-1.1' into develop 2011-03-20 13:46:45 +01:00
40 changed files with 8403 additions and 6974 deletions

3
.gitignore vendored
View File

@@ -9,3 +9,6 @@ indefero-*.zip
src/IDF/conf/path.php src/IDF/conf/path.php
.tx/config .tx/config
src/IDF/locale/idf.pot.bak src/IDF/locale/idf.pot.bak
test/test.db
test/tmp
test/config.php

View File

@@ -18,6 +18,7 @@ Much appreciated contributors (in alphabetical order):
Fernando Sayago Gil <mikados.mikados@gmail.com> - Spanish translation Fernando Sayago Gil <mikados.mikados@gmail.com> - Spanish translation
Jakub Viták <mainiak@gmail.com> - Czech translation Jakub Viták <mainiak@gmail.com> - Czech translation
Janez Troha <http://www.dz0ny.info> - Slovenian translation Janez Troha <http://www.dz0ny.info> - Slovenian translation
Jean-Philippe Fleury <jpfleury>
Jerry <lxb429@gmail.com> - Chinese translation Jerry <lxb429@gmail.com> - Chinese translation
Julien Issler <julien@issler.net> Julien Issler <julien@issler.net>
Ludovic Bellière <xrogaan> Ludovic Bellière <xrogaan>
@@ -30,6 +31,7 @@ Much appreciated contributors (in alphabetical order):
Raphaël Emourgeon <raphael> Raphaël Emourgeon <raphael>
Samuel Suther <info@suther.de> - German translation Samuel Suther <info@suther.de> - German translation
Sindre R. Myren <sindrero@stud.ntnu.no> Sindre R. Myren <sindrero@stud.ntnu.no>
Stewart Platt <stew@futurete.ch>
Thomas Keller <me@thomaskeller.biz> - Monotone support Thomas Keller <me@thomaskeller.biz> - Monotone support
Vladimir Solomatin <slash> Vladimir Solomatin <slash>
William Martin <william.martin@lcpc.fr> William Martin <william.martin@lcpc.fr>

View File

@@ -4,6 +4,12 @@ The installation of InDefero is composed of 2 parts, first the
installation of the [Pluf framework](http://www.pluf.org) and second, installation of the [Pluf framework](http://www.pluf.org) and second,
the installation of InDefero by itself. the installation of InDefero by itself.
## PHP modules for indefero
Indefero need the GD module for PHP. It's named "php5-gd" in debian.
$ apt-get install php5-gd
## Recommended Layout of the Files ## Recommended Layout of the Files
If your server document root is in `/var/www` a good thing is to keep If your server document root is in `/var/www` a good thing is to keep
@@ -126,6 +132,7 @@ The documentation is available in the `doc` folder.
* Subversion: `doc/syncsvn.mdtext`. * Subversion: `doc/syncsvn.mdtext`.
* Mercurial: `doc/syncmercurial.mdtext`. * Mercurial: `doc/syncmercurial.mdtext`.
* Git: `doc/syncgit.mdtext`. * Git: `doc/syncgit.mdtext`.
* Monotone: `doc/syncmonotone.mdtext`
## For the Apache Webserver Users ## For the Apache Webserver Users

View File

@@ -1,3 +1,27 @@
# InDefero 1.2 - xxx xxx xx xx:xx 2011 UTC
## New Features
## Bugfixes
- 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)
## Documentation
## Translations
# InDefero 1.1.1 - Mon Mar 28 15:52 2011 UTC
## Bugfixes
- Fix an incompatibility with Python 3.1 in gitserve.py (issue 554)
- Fix PHP error when the commit view shows a commit with changed binary files (issue 643)
- A migration problem prevented the preferences page being displayed properly (issues 644 and 653)
- Fix PHP error when trying to create Mercurial source archives (issue 648)
- Improve the French translation (issue 651)
- Registration page missed a link to password recovery that was mentioned in a form error (issue 652)
# InDefero 1.1 - Sun Mar 20 11:44 2011 UTC # InDefero 1.1 - Sun Mar 20 11:44 2011 UTC
## New Features ## New Features

173
logo/no_logo.svg Normal file
View File

@@ -0,0 +1,173 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="no_logo.svg"
inkscape:version="0.47 r22583"
id="svg2985"
height="32"
width="32"
version="1.1"
inkscape:export-filename="/Users/tommyd/Entwicklung/indefero/www/media/idf/img/no_logo.png"
inkscape:export-xdpi="89.989998"
inkscape:export-ydpi="89.989998">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1440"
inkscape:window-height="852"
id="namedview9"
showgrid="false"
inkscape:zoom="16.0625"
inkscape:cx="8.5507561"
inkscape:cy="16.122403"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="g2847"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
orientation="1,0"
position="16,25.836575"
id="guide3752" />
<sodipodi:guide
orientation="0,1"
position="-18.677042,16"
id="guide3754" />
</sodipodi:namedview>
<defs
id="defs2987">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 16 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="32 : 16 : 1"
inkscape:persp3d-origin="16 : 10.666667 : 1"
id="perspective13" />
<inkscape:perspective
id="perspective2863"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3676"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3717"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<filter
inkscape:collect="always"
id="filter3816"
x="-0.14434362"
width="1.2886872"
y="-0.11562817"
height="1.2312563">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.1799243"
id="feGaussianBlur3818" />
</filter>
</defs>
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="shadow"
style="display:inline"
sodipodi:insensitive="true">
<g
transform="translate(0.44042901,0.78704792)"
id="g2847-8"
style="opacity:0.79710143;fill:#000000;stroke:#000000;stroke-opacity:1;filter:url(#filter3816)">
<g
id="g3838-0"
style="fill:#000000;stroke:#000000;stroke-opacity:1" />
<g
id="g2401-2"
transform="matrix(0.21219597,0,0,0.21219597,-70.751966,-27.73328)"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2.4000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:export-filename="/home/loa/Projects/indefero/logo/powered-by-indefero.png"
inkscape:export-xdpi="12.330909"
inkscape:export-ydpi="12.330909">
<path
id="path2383-4"
d="m 396.19089,173.14471 c -7.67621,0.80661 -14.40195,5.39406 -19.58101,10.89131 -7.23597,7.88004 -11.69742,18.07908 -13.32198,28.60362 -1.7236,11.28173 -0.25925,23.20635 5.07686,33.37271 3.78607,7.24384 9.53161,13.92339 17.29701,16.96772 3.86478,1.53937 8.98362,1.03284 11.67912,-2.41036 2.64357,-3.5671 2.69463,-8.234 2.85756,-12.48867 0.045,-7.61054 -0.54749,-15.25544 0.45618,-22.83193 0.87131,-9.50623 4.03944,-18.56751 6.71612,-27.66851 1.16242,-4.44333 2.25094,-9.02808 1.97499,-13.64988 -0.48817,-4.62476 -3.58059,-9.31042 -8.2964,-10.4067 -1.57489,-0.44882 -3.23412,-0.48948 -4.85845,-0.37931 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0" />
<path
id="path2391-8"
d="m 433.14691,149.28687 c 7.2059,2.76589 12.51512,8.93778 16.09494,15.58815 4.94991,9.48434 6.61962,20.49058 5.46486,31.07695 -1.25505,11.34342 -5.75582,22.48271 -13.54134,30.92159 -5.53192,6.01709 -12.81048,10.98198 -21.09918,11.91276 -4.13154,0.4866 -8.94486,-1.32748 -10.65734,-5.35104 -1.63027,-4.12976 -0.4717,-8.65084 0.47212,-12.80269 1.92628,-7.36287 4.47721,-14.59393 5.4687,-22.17201 1.61875,-9.40784 0.90381,-18.98034 0.67386,-28.46402 0.0272,-4.59278 0.1624,-9.30303 1.62515,-13.69592 1.66851,-4.34082 5.86829,-8.06645 10.70716,-7.90484 1.63738,-0.0259 3.25061,0.36424 4.79107,0.89107 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="logo"
style="display:inline">
<g
id="layer1"
transform="translate(-0.06540759,0.09444087)">
<g
id="g2847">
<g
id="g3838" />
<g
id="g2401"
transform="matrix(0.21219597,0,0,0.21219597,-70.751966,-27.73328)"
style="fill:#e6e6e6;fill-opacity:1;stroke:#a0a0a0;stroke-width:2.4000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:export-filename="/home/loa/Projects/indefero/logo/powered-by-indefero.png"
inkscape:export-xdpi="12.330909"
inkscape:export-ydpi="12.330909">
<path
id="path2383"
d="m 396.19089,173.14471 c -7.67621,0.80661 -14.40195,5.39406 -19.58101,10.89131 -7.23597,7.88004 -11.69742,18.07908 -13.32198,28.60362 -1.7236,11.28173 -0.25925,23.20635 5.07686,33.37271 3.78607,7.24384 9.53161,13.92339 17.29701,16.96772 3.86478,1.53937 8.98362,1.03284 11.67912,-2.41036 2.64357,-3.5671 2.69463,-8.234 2.85756,-12.48867 0.045,-7.61054 -0.54749,-15.25544 0.45618,-22.83193 0.87131,-9.50623 4.03944,-18.56751 6.71612,-27.66851 1.16242,-4.44333 2.25094,-9.02808 1.97499,-13.64988 -0.48817,-4.62476 -3.58059,-9.31042 -8.2964,-10.4067 -1.57489,-0.44882 -3.23412,-0.48948 -4.85845,-0.37931 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#a0a0a0;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0" />
<path
id="path2391"
d="m 433.14691,149.28687 c 7.2059,2.76589 12.51512,8.93778 16.09494,15.58815 4.94991,9.48434 6.61962,20.49058 5.46486,31.07695 -1.25505,11.34342 -5.75582,22.48271 -13.54134,30.92159 -5.53192,6.01709 -12.81048,10.98198 -21.09918,11.91276 -4.13154,0.4866 -8.94486,-1.32748 -10.65734,-5.35104 -1.63027,-4.12976 -0.4717,-8.65084 0.47212,-12.80269 1.92628,-7.36287 4.47721,-14.59393 5.4687,-22.17201 1.61875,-9.40784 0.90381,-18.98034 0.67386,-28.46402 0.0272,-4.59278 0.1624,-9.30303 1.62515,-13.69592 1.66851,-4.34082 5.86829,-8.06645 10.70716,-7.90484 1.63738,-0.0259 3.25061,0.36424 4.79107,0.89107 z"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#a0a0a0;stroke-width:2.4000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -12,4 +12,16 @@
<directory>test/IDF/</directory> <directory>test/IDF/</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
<filter>
<whitelist>
<directory suffix=".php">src/IDF</directory>
<exclude>
<directory suffix=".php">src/IDF/Tests</directory>
<directory suffix=".php">src/IDF/conf</directory>
<file>src/IDF/version.php</file>
</exclude>
</whitelist>
</filter>
</phpunit> </phpunit>

14
run-tests Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env php
<?php
$xmlfile = dirname(__FILE__) .'/test/report.xml';
passthru('phpunit --coverage-clover='.$xmlfile);
$xml = simplexml_load_string(file_get_contents($xmlfile));
unlink($xmlfile);
printf(
'>>> code coverage %s/%s (%s%%)'."\n",
$xml->project->metrics['coveredstatements'],
$xml->project->metrics['statements'],
round(($xml->project->metrics['coveredstatements']/(float)$xml->project->metrics['statements']) * 100.0, 2)
);

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# ***** BEGIN LICENSE BLOCK ***** # ***** BEGIN LICENSE BLOCK *****
# This file is part of InDefero, an open source project management application. # This file is part of InDefero, an open source project management application.
# Copyright (C) 2008 Céondo Ltd and contributors. # Copyright (C) 2008 Céondo Ltd and contributors.
@@ -23,14 +23,17 @@
import os import os
import sys import sys
import commands import subprocess
import traceback
SCRIPTDIR = os.path.abspath(__file__).rsplit(os.path.sep, 1)[0]
GITSERVEPHP = '%s/gitserve.php' % SCRIPTDIR
process = subprocess.Popen(['php', GITSERVEPHP, sys.argv[1]],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = str.encode("\n").join(process.communicate()).strip()
status = process.wait()
n = len("/gitserve.py")
GITSERVEPHP = '%s/gitserve.php' % traceback.extract_stack(limit=1)[0][0][0:-n]
status, output = commands.getstatusoutput('php %s %s' % (GITSERVEPHP, sys.argv[1]))
if status == 0: if status == 0:
os.execvp('git', ['git', 'shell', '-c', output.strip()]) os.execvp('git', ['git', 'shell', '-c', output.strip()])
else: else:
sys.stderr.write("%s\n" % output) sys.stderr.write("%s\n" % output.strip())
sys.exit(1) sys.exit(1)

View File

@@ -0,0 +1,140 @@
<?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 ***** */
/**
* Configuration of the project.
*/
class IDF_Form_ProjectConf extends Pluf_Form
{
public $project = null;
public function initFields($extra=array())
{
$this->project = $extra['project'];
// Basic part
$this->fields['name'] = new Pluf_Form_Field_Varchar(array('required' => true,
'label' => __('Name'),
'initial' => $this->project->name,
));
$this->fields['shortdesc'] = new Pluf_Form_Field_Varchar(array('required' => true,
'label' => __('Short Description'),
'initial' => $this->project->shortdesc,
'widget_attrs' => array('size' => '68'),
));
$this->fields['description'] = new Pluf_Form_Field_Varchar(array('required' => true,
'label' => __('Description'),
'initial' => $this->project->description,
'widget_attrs' => array('cols' => 68,
'rows' => 26,
),
'widget' => 'Pluf_Form_Widget_TextareaInput',
));
// Logo part
$upload_path = Pluf::f('upload_path', false);
if (false === $upload_path) {
throw new Pluf_Exception_SettingError(__('The "upload_path" configuration variable was not set.'));
}
$upload_path .= '/' . $this->project->shortname;
$filename = '/%s';
$this->fields['logo'] = new Pluf_Form_Field_File(array('required' => false,
'label' => __('Update the logo'),
'initial' => '',
'help_text' => __('The logo must be a picture with a size of 32 by 32.'),
'max_size' => Pluf::f('max_upload_size', 5 * 1024),
'move_function_params' =>
array('upload_path' => $upload_path,
'upload_path_create' => true,
'file_name' => $filename,
)
));
$this->fields['logo_remove'] = new Pluf_Form_Field_Boolean(array('required' => false,
'label' => __('Remove the current logo'),
'initial' => false,
'widget' => 'Pluf_Form_Widget_CheckboxInput',
));
}
/**
* If we have uploaded a file, but the form failed remove it.
*
*/
function failed()
{
if (!empty($this->cleaned_data['logo'])
&& file_exists(Pluf::f('upload_path').'/'.$this->cleaned_data['logo'])) {
unlink(Pluf::f('upload_path').'/'.$this->cleaned_data['logo']);
}
}
public function clean()
{
if (!isset($this->cleaned_data['logo_remove'])) {
$this->cleaned_data['logo_remove'] = false;
}
return $this->cleaned_data;
}
public function clean_logo()
{
if (empty($this->cleaned_data['logo'])) {
return '';
}
$meta = getimagesize(Pluf::f('upload_path') . '/' . $this->project->shortname . $this->cleaned_data['logo']);
if ($meta === false) {
throw new Pluf_Form_Invalid("Could not determine the size of the uploaded picture.");
}
if ($meta[0] !== 32 || $meta[1] !== 32) {
throw new Pluf_Form_Invalid("The picture must have a size of 32 by 32.");
}
return $this->cleaned_data['logo'];
}
public function save($commit=true)
{
$conf = $this->project->getConf();
// Basic part
$this->project->name = $this->cleaned_data['name'];
$this->project->shortdesc = $this->cleaned_data['shortdesc'];
$this->project->description = $this->cleaned_data['description'];
$this->project->update();
// Logo part
if ($this->cleaned_data['logo'] !== "") {
$conf->setVal('logo', $this->cleaned_data['logo']);
}
if ($this->cleaned_data['logo_remove'] === true) {
@unlink(Pluf::f('upload_path') . '/' . $this->project->shortname . $conf->getVal('logo'));
$conf->delVal('logo');
}
}
}

View File

@@ -53,6 +53,7 @@ function IDF_Migrations_Backup_run($folder, $name=null)
'IDF_Scm_Cache_Git', 'IDF_Scm_Cache_Git',
'IDF_Queue', 'IDF_Queue',
'IDF_Gconf', 'IDF_Gconf',
'IDF_EmailAddress',
); );
$db = Pluf::db(); $db = Pluf::db();
// Now, for each table, we dump the content in json, this is a // Now, for each table, we dump the content in json, this is a
@@ -98,6 +99,7 @@ function IDF_Migrations_Backup_restore($folder, $name)
'IDF_Scm_Cache_Git', 'IDF_Scm_Cache_Git',
'IDF_Queue', 'IDF_Queue',
'IDF_Gconf', 'IDF_Gconf',
'IDF_EmailAddress',
); );
$db = Pluf::db(); $db = Pluf::db();
$schema = new Pluf_DB_Schema($db); $schema = new Pluf_DB_Schema($db);
@@ -110,4 +112,4 @@ function IDF_Migrations_Backup_restore($folder, $name)
Pluf_Test_Fixture::load($data, false); Pluf_Test_Fixture::load($data, false);
} }
return true; return true;
} }

View File

@@ -463,7 +463,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
* @param string Prefix ('git-repo-dump') * @param string Prefix ('git-repo-dump')
* @return Pluf_HTTP_Response The HTTP response containing the zip archive * @return Pluf_HTTP_Response The HTTP response containing the zip archive
*/ */
protected function getArchiveStream($commit, $prefix='') public function getArchiveStream($commit, $prefix='')
{ {
$cmd = sprintf(Pluf::f('idf_exec_cmd_prefix', ''). $cmd = sprintf(Pluf::f('idf_exec_cmd_prefix', '').
Pluf::f('hg_path', 'hg').' archive --type=zip -R %s -r %s -', Pluf::f('hg_path', 'hg').' archive --type=zip -R %s -r %s -',

View File

@@ -36,12 +36,12 @@ class IDF_Scm_Monotone extends IDF_Scm
private static $instances = array(); private static $instances = array();
/** /**
* @see IDF_Scm::__construct() * Constructor
*/ */
public function __construct($project) public function __construct(IDF_Project $project, IDF_Scm_Monotone_IStdio $stdio)
{ {
$this->project = $project; $this->project = $project;
$this->stdio = new IDF_Scm_Monotone_Stdio($project); $this->stdio = $stdio;
} }
/** /**
@@ -458,8 +458,9 @@ class IDF_Scm_Monotone extends IDF_Scm
public static function factory($project) public static function factory($project)
{ {
if (!array_key_exists($project->shortname, self::$instances)) { if (!array_key_exists($project->shortname, self::$instances)) {
$stdio = new IDF_Scm_Monotone_Stdio($project);
self::$instances[$project->shortname] = self::$instances[$project->shortname] =
new IDF_Scm_Monotone($project); new IDF_Scm_Monotone($project, $stdio);
} }
return self::$instances[$project->shortname]; return self::$instances[$project->shortname];
} }
@@ -676,8 +677,8 @@ class IDF_Scm_Monotone extends IDF_Scm
$parents = $this->stdio->exec(array('parents', $revs[0])); $parents = $this->stdio->exec(array('parents', $revs[0]));
$res['parents'] = preg_split("/\n/", $parents, -1, PREG_SPLIT_NO_EMPTY); $res['parents'] = preg_split("/\n/", $parents, -1, PREG_SPLIT_NO_EMPTY);
$certs = $this->_getCerts($revs[0]); $certs = $this->_getCerts($revs[0]);
// FIXME: this assumes that author, date and changelog are always given // FIXME: this assumes that author, date and changelog are always given
$res['author'] = implode(', ', $certs['author']); $res['author'] = implode(', ', $certs['author']);

View File

@@ -21,6 +21,8 @@
# #
# ***** END LICENSE BLOCK ***** */ # ***** END LICENSE BLOCK ***** */
require_once 'IDF/Scm/Exception.php';
/** /**
* Utility class to parse and compile basic_io stanzas * Utility class to parse and compile basic_io stanzas
* *
@@ -31,6 +33,11 @@ class IDF_Scm_Monotone_BasicIO
/** /**
* Parses monotone's basic_io format * Parses monotone's basic_io format
* *
* Known quirks:
* - does not handle multi-values starting with a hash '[]' (no known output)
* - does not validate hashes (should be /[0-9a-f]{40}/i)
* - does not handle forbidden \0
*
* @param string $in * @param string $in
* @return array of arrays * @return array of arrays
*/ */
@@ -54,50 +61,56 @@ class IDF_Scm_Monotone_BasicIO
$stanzaLine['key'] .= $ch; $stanzaLine['key'] .= $ch;
} }
// symbol w/o a value list // ensure we don't look at a symbol w/o a value list
if ($pos >= $length || $in[$pos] == "\n") break; if ($pos >= $length || $in[$pos] == "\n") {
if ($in[$pos] == '[') {
unset($stanzaLine['values']); unset($stanzaLine['values']);
++$pos; // opening square bracket
$stanzaLine['hash'] = substr($in, $pos, 40);
$pos += 40;
++$pos; // closing square bracket
}
else
{
unset($stanzaLine['hash']); unset($stanzaLine['hash']);
$valCount = 0; }
// if hashs and plain values are encountered in the same else {
// value list, we add the hash values as simple values as well if ($in[$pos] == '[') {
while ($in[$pos] == '"' || $in[$pos] == '[') { unset($stanzaLine['values']);
$isHashValue = $in[$pos] == '['; ++$pos; // opening square bracket
++$pos; // opening quote / bracket while ($pos < $length && $in[$pos] != ']') {
$stanzaLine['values'][$valCount] = ''; $stanzaLine['hash'] .= $in[$pos];
while ($pos < $length) {
$ch = $in[$pos]; $pr = $in[$pos-1];
if (($isHashValue && $ch == ']')
||(!$isHashValue && $ch == '"' && $pr != '\\'))
break;
++$pos; ++$pos;
$stanzaLine['values'][$valCount] .= $ch;
} }
++$pos; // closing quote ++$pos; // closing square bracket
}
else
{
unset($stanzaLine['hash']);
$valCount = 0;
// if hashs and plain values are encountered in the same
// value list, we add the hash values as simple values as well
while ($in[$pos] == '"' || $in[$pos] == '[') {
$isHashValue = $in[$pos] == '[';
++$pos; // opening quote / bracket
$stanzaLine['values'][$valCount] = '';
while ($pos < $length) {
$ch = $in[$pos]; $pr = $in[$pos-1];
if (($isHashValue && $ch == ']')
||(!$isHashValue && $ch == '"' && $pr != '\\'))
break;
++$pos;
$stanzaLine['values'][$valCount] .= $ch;
}
++$pos; // closing quote
if (!$isHashValue) { if (!$isHashValue) {
$stanzaLine['values'][$valCount] = str_replace( $stanzaLine['values'][$valCount] = str_replace(
array("\\\\", "\\\""), array("\\\\", "\\\""),
array("\\", "\""), array("\\", "\""),
$stanzaLine['values'][$valCount] $stanzaLine['values'][$valCount]
); );
} }
if ($pos >= $length) if ($pos >= $length)
break; break;
if ($in[$pos] == ' ') { if ($in[$pos] == ' ') {
++$pos; // space ++$pos; // space
++$valCount; ++$valCount;
}
} }
} }
} }
@@ -114,6 +127,12 @@ class IDF_Scm_Monotone_BasicIO
/** /**
* Compiles monotone's basicio format * Compiles monotone's basicio format
* *
* Known quirks:
* - does not validate keys for /[a-z_]+/
* - does not validate hashes (should be /[0-9a-f]{40}/i)
* - does not support intermixed value / hash formats
* - does not handle forbidden \0
*
* @param array $in Array of arrays * @param array $in Array of arrays
* @return string * @return string
*/ */
@@ -129,7 +148,7 @@ class IDF_Scm_Monotone_BasicIO
$maxkeylength = 0; $maxkeylength = 0;
foreach ((array)$stanza as $lx => $line) { foreach ((array)$stanza as $lx => $line) {
if (!array_key_exists('key', $line)) { if (!array_key_exists('key', $line) || empty($line['key'])) {
throw new IDF_Scm_Exception( throw new IDF_Scm_Exception(
'"key" not found in basicio stanza '.$sx.', line '.$lx '"key" not found in basicio stanza '.$sx.', line '.$lx
); );
@@ -157,13 +176,6 @@ class IDF_Scm_Monotone_BasicIO
$value).'"'; $value).'"';
} }
} }
else
{
throw new IDF_Scm_Exception(
'neither "hash" nor "values" found in basicio '.
'stanza '.$sx.', line '.$lx
);
}
$out .= "\n"; $out .= "\n";
} }

View File

@@ -0,0 +1,66 @@
<?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) 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 ***** */
/**
* Monotone stdio interface
*
* @author Thomas Keller <me@thomaskeller.biz>
*/
interface IDF_Scm_Monotone_IStdio
{
/**
* Constructor
*/
public function __construct(IDF_Project $project);
/**
* Starts the stdio process and resets the command counter
*/
public function start();
/**
* Stops the stdio process and closes all pipes
*/
public function stop();
/**
* Executes a command over stdio and returns its result
*
* @param array Array of arguments
* @param array Array of options as key-value pairs. Multiple options
* can be defined in sub-arrays, like
* "r" => array("123...", "456...")
* @return string
*/
public function exec(array $args, array $options = array());
/**
* Returns the last out-of-band output for a previously executed
* command as associative array with 'e' (error), 'w' (warning),
* 'p' (progress) and 't' (ticker, unparsed) as keys
*
* @return array
*/
public function getLastOutOfBandOutput();
}

View File

@@ -21,6 +21,8 @@
# #
# ***** END LICENSE BLOCK ***** */ # ***** END LICENSE BLOCK ***** */
require_once 'IDF/Scm/Monotone/IStdio.php';
/** /**
* Monotone stdio class * Monotone stdio class
* *
@@ -29,7 +31,7 @@
* *
* @author Thomas Keller <me@thomaskeller.biz> * @author Thomas Keller <me@thomaskeller.biz>
*/ */
class IDF_Scm_Monotone_Stdio class IDF_Scm_Monotone_Stdio implements IDF_Scm_Monotone_IStdio
{ {
/** this is the most recent STDIO version. The number is output /** this is the most recent STDIO version. The number is output
at the protocol start. Older versions of monotone (prior 0.47) at the protocol start. Older versions of monotone (prior 0.47)
@@ -68,7 +70,7 @@ class IDF_Scm_Monotone_Stdio
* *
* @return string * @return string
*/ */
public function _getAuthOptions() private function _getAuthOptions()
{ {
$prjconf = $this->project->getConf(); $prjconf = $this->project->getConf();
$name = $prjconf->getVal('mtn_client_key_name', false); $name = $prjconf->getVal('mtn_client_key_name', false);

View File

@@ -24,7 +24,7 @@
require_once(IDF_PATH.'/../contrib/zipstream-php-0.2.2/zipstream.php'); require_once(IDF_PATH.'/../contrib/zipstream-php-0.2.2/zipstream.php');
/** /**
* Special response object to output * Special response object to output
* *
* The Content-Length will not be set as it is not possible to predict it. * The Content-Length will not be set as it is not possible to predict it.
* *
@@ -45,7 +45,7 @@ class IDF_Scm_Monotone_ZipRender extends Pluf_HTTP_Response
private $stdio = null; private $stdio = null;
private $revision = null; private $revision = null;
function __construct($stdio, $revision) function __construct(IDF_Scm_Monotone_IStdio $stdio, $revision)
{ {
parent::__construct($revision, 'application/x-zip'); parent::__construct($revision, 'application/x-zip');
$this->stdio = $stdio; $this->stdio = $stdio;
@@ -60,6 +60,26 @@ class IDF_Scm_Monotone_ZipRender extends Pluf_HTTP_Response
$this->outputHeaders(); $this->outputHeaders();
if ($output_body) { if ($output_body) {
$certs = $this->stdio->exec(array('certs', $this->revision));
$stanzas = IDF_Scm_Monotone_BasicIO::parse($certs);
// use the revision's date (if there is one) as timestamp
// for all file entries
$timestamp = time();
foreach ($stanzas as $stanza) {
$next_is_date = false;
foreach ($stanza as $line) {
if ($line['key'] == 'name' && $line['values'][0] == 'date') {
$next_is_date = true;
continue;
}
if ($next_is_date && $line['key'] == 'value') {
$timestamp = strtotime($line['values'][0]);
break;
}
}
}
$manifest = $this->stdio->exec(array('get_manifest_of', $this->revision)); $manifest = $this->stdio->exec(array('get_manifest_of', $this->revision));
$stanzas = IDF_Scm_Monotone_BasicIO::parse($manifest); $stanzas = IDF_Scm_Monotone_BasicIO::parse($manifest);
@@ -69,7 +89,11 @@ class IDF_Scm_Monotone_ZipRender extends Pluf_HTTP_Response
if ($stanza[0]['key'] != 'file') if ($stanza[0]['key'] != 'file')
continue; continue;
$content = $this->stdio->exec(array('get_file', $stanza[1]['hash'])); $content = $this->stdio->exec(array('get_file', $stanza[1]['hash']));
$zip->add_file($stanza[0]['values'][0], $content); $zip->add_file(
$stanza[0]['values'][0],
$content,
array('time' => $timestamp)
);
} }
$zip->finish(); $zip->finish();

View File

@@ -41,7 +41,7 @@ class IDF_Views
{ {
$projects = self::getProjects($request->user); $projects = self::getProjects($request->user);
$stats = self::getProjectsStatistics ($projects); $stats = self::getProjectsStatistics ($projects);
if ($api == true) return $projects; if ($api == true) return $projects;
return Pluf_Shortcuts_RenderToResponse('idf/index.html', return Pluf_Shortcuts_RenderToResponse('idf/index.html',
array('page_title' => __('Projects'), array('page_title' => __('Projects'),

View File

@@ -31,6 +31,25 @@ Pluf::loadFunction('Pluf_Shortcuts_GetFormForModel');
*/ */
class IDF_Views_Project class IDF_Views_Project
{ {
/**
* Home page of a project.
*/
public $logo_precond = array('IDF_Precondition::baseAccess');
public function logo($request, $match)
{
$prj = $request->project;
$logo = $prj->getConf()->getVal('logo');
if (empty($logo)) {
$url = Pluf::f('url_media') . '/idf/img/no_logo.png';
return new Pluf_HTTP_Response_Redirect($url);
}
$info = IDF_FileUtil::getMimeType($logo);
return new Pluf_HTTP_Response_File(Pluf::f('upload_path') . '/' . $prj->shortname . $logo,
$info[0]);
}
/** /**
* Home page of a project. * Home page of a project.
*/ */
@@ -62,20 +81,26 @@ class IDF_Views_Project
} }
/** /**
* Returns an associative array with available model filters * Returns an associative array with all accessible model filters
* *
* @return array * @return array
*/ */
private static function getAvailableModelFilters() private static function getAccessibleModelFilters($request)
{ {
return array( $filters = array('all' => __('All Updates'));
'all' => __('All Updates'),
'commits' => __('Commits'), if (true === IDF_Precondition::accessSource($request))
'issues' => __('Issues and Comments'), $filters['commits'] = __('Commits');
'downloads' => __('Downloads'), if (true === IDF_Precondition::accessIssues($request))
'documents' => __('Documents'), $filters['issues'] = __('Issues and Comments');
'reviews' => __('Reviews and Patches'), if (true === IDF_Precondition::accessDownloads($request))
); $filters['downloads'] = __('Downloads');
if (true === IDF_Precondition::accessWiki($request))
$filters['documents'] = __('Documents');
if (true === IDF_Precondition::accessReview($request))
$filters['reviews'] = __('Reviews and Patches');
return $filters;
} }
/** /**
@@ -141,11 +166,11 @@ class IDF_Views_Project
$prj = $request->project; $prj = $request->project;
$model_filter = @$match[2]; $model_filter = @$match[2];
$all_model_filters = self::getAvailableModelFilters(); $accessible_model_filters = self::getAccessibleModelFilters($request);
if (!array_key_exists($model_filter, $all_model_filters)) { if (!array_key_exists($model_filter, $accessible_model_filters)) {
$model_filter = 'all'; $model_filter = 'all';
} }
$title = (string)$prj . ' ' . $all_model_filters[$model_filter]; $title = (string)$prj . ' ' . $accessible_model_filters[$model_filter];
$pag = new IDF_Timeline_Paginator(new IDF_Timeline()); $pag = new IDF_Timeline_Paginator(new IDF_Timeline());
$pag->class = 'recent-issues'; $pag->class = 'recent-issues';
@@ -183,7 +208,7 @@ class IDF_Views_Project
'feedurl' => $feedurl, 'feedurl' => $feedurl,
'timeline' => $pag, 'timeline' => $pag,
'model_filter' => $model_filter, 'model_filter' => $model_filter,
'all_model_filters' => $all_model_filters, 'accessible_model_filters' => $accessible_model_filters,
), ),
$request); $request);
@@ -214,11 +239,11 @@ class IDF_Views_Project
$prj = $request->project; $prj = $request->project;
$model_filter = @$match[2]; $model_filter = @$match[2];
$all_model_filters = self::getAvailableModelFilters(); $accessible_model_filters = self::getAccessibleModelFilters($request);
if (!array_key_exists($model_filter, $all_model_filters)) { if (!array_key_exists($model_filter, $accessible_model_filters)) {
$model_filter = 'all'; $model_filter = 'all';
} }
$title = $all_model_filters[$model_filter]; $title = $accessible_model_filters[$model_filter];
$classes = self::determineModelClasses($request, $model_filter); $classes = self::determineModelClasses($request, $model_filter);
$sqls = sprintf('model_class IN (%s)', implode(', ', $classes)); $sqls = sprintf('model_class IN (%s)', implode(', ', $classes));
@@ -266,32 +291,32 @@ class IDF_Views_Project
public function admin($request, $match) public function admin($request, $match)
{ {
$prj = $request->project; $prj = $request->project;
$title = sprintf(__('%s Project Summary'), (string) $prj); $title = sprintf(__('%s Project Summary'), (string) $prj);
$form_fields = array('fields'=> array('name', 'shortdesc', $extra = array('project' => $prj);
'description'));
if ($request->method == 'POST') { if ($request->method == 'POST') {
$form = Pluf_Shortcuts_GetFormForModel($prj, $request->POST, $form = new IDF_Form_ProjectConf(array_merge($request->POST,
$form_fields); $request->FILES),
$extra);
if ($form->isValid()) { if ($form->isValid()) {
$prj = $form->save(); $form->save();
$request->user->setMessage(__('The project has been updated.')); $request->user->setMessage(__('The project has been updated.'));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::admin', $url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::admin',
array($prj->shortname)); array($prj->shortname));
return new Pluf_HTTP_Response_Redirect($url); return new Pluf_HTTP_Response_Redirect($url);
} }
} else { } else {
$form = Pluf_Shortcuts_GetFormForModel($prj, $prj->getData(), $form = new IDF_Form_ProjectConf($prj->getData(), $extra);
$form_fields);
} }
$form->fields['description']->widget->attrs['cols'] = 68;
$form->fields['description']->widget->attrs['rows'] = 26; $logo = $prj->getConf()->getVal('logo');
$form->fields['shortdesc']->widget->attrs['size'] = 67;
return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html', return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html',
array( array(
'page_title' => $title, 'page_title' => $title,
'form' => $form, 'form' => $form,
'project' => $prj,
'logo' => $logo,
), ),
$request); $request);
} }
/** /**

View File

@@ -73,6 +73,11 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/$#',
'base' => $base, 'base' => $base,
'model' => 'IDF_Views_Project', 'model' => 'IDF_Views_Project',
'method' => 'home'); 'method' => 'home');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/logo/$#',
'base' => $base,
'model' => 'IDF_Views_Project',
'method' => 'logo');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/timeline/(\w+)/$#', $ctl[] = array('regex' => '#^/p/([\-\w]+)/timeline/(\w+)/$#',
'base' => $base, 'base' => $base,

File diff suppressed because it is too large Load Diff

View File

@@ -7,10 +7,10 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Indefero\n" "Project-Id-Version: Indefero\n"
"Report-Msgid-Bugs-To: http://projects.ceondo.com/p/indefero/issues/\n" "Report-Msgid-Bugs-To: http://projects.ceondo.com/p/indefero/issues/\n"
"POT-Creation-Date: 2011-03-18 23:30+0100\n" "POT-Creation-Date: 2011-03-28 01:13+0200\n"
"PO-Revision-Date: 2011-03-19 11:00+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: LANGUAGE <LL@li.org>\n" "Language-Team: Mika <mikados.mikados@gmail.com>\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"
@@ -751,7 +751,9 @@ msgstr "Saber más sobre <a href=\"%s\">WebHooks post-commit</a>."
#: IDF/Form/TabsConf.php:38 IDF/gettexttemplates/idf/admin/base.html.php:4 #: IDF/Form/TabsConf.php:38 IDF/gettexttemplates/idf/admin/base.html.php:4
#: IDF/gettexttemplates/idf/base-full.html.php:5 #: IDF/gettexttemplates/idf/base-full.html.php:5
#: IDF/gettexttemplates/idf/base-full.html~.php:5
#: IDF/gettexttemplates/idf/base.html.php:5 #: IDF/gettexttemplates/idf/base.html.php:5
#: IDF/gettexttemplates/idf/base.html~.php:5
#: IDF/gettexttemplates/idf/downloads/base.html.php:3 #: IDF/gettexttemplates/idf/downloads/base.html.php:3
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:14 #: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:14
#: IDF/Views/Project.php:75 #: IDF/Views/Project.php:75
@@ -759,24 +761,32 @@ msgid "Downloads"
msgstr "Descargas" msgstr "Descargas"
#: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.php:9 #: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.php:9
#: IDF/gettexttemplates/idf/base-full.html~.php:9
#: IDF/gettexttemplates/idf/base.html.php:9 #: IDF/gettexttemplates/idf/base.html.php:9
#: IDF/gettexttemplates/idf/base.html~.php:9
msgid "Code Review" msgid "Code Review"
msgstr "Revisión del Código" msgstr "Revisión del Código"
#: IDF/Form/TabsConf.php:40 IDF/gettexttemplates/idf/admin/base.html.php:5 #: IDF/Form/TabsConf.php:40 IDF/gettexttemplates/idf/admin/base.html.php:5
#: IDF/gettexttemplates/idf/base-full.html.php:6 #: IDF/gettexttemplates/idf/base-full.html.php:6
#: IDF/gettexttemplates/idf/base-full.html~.php:6
#: IDF/gettexttemplates/idf/base.html.php:6 #: IDF/gettexttemplates/idf/base.html.php:6
#: IDF/gettexttemplates/idf/base.html~.php:6
msgid "Documentation" msgid "Documentation"
msgstr "Documentación" msgstr "Documentación"
#: IDF/Form/TabsConf.php:41 IDF/gettexttemplates/idf/admin/base.html.php:7 #: IDF/Form/TabsConf.php:41 IDF/gettexttemplates/idf/admin/base.html.php:7
#: IDF/gettexttemplates/idf/base-full.html.php:8 #: IDF/gettexttemplates/idf/base-full.html.php:8
#: IDF/gettexttemplates/idf/base-full.html~.php:8
#: IDF/gettexttemplates/idf/base.html.php:8 #: IDF/gettexttemplates/idf/base.html.php:8
#: IDF/gettexttemplates/idf/base.html~.php:8
msgid "Source" msgid "Source"
msgstr "Fuentes" msgstr "Fuentes"
#: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.php:7 #: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.php:7
#: IDF/gettexttemplates/idf/base-full.html~.php:7
#: IDF/gettexttemplates/idf/base.html.php:7 #: IDF/gettexttemplates/idf/base.html.php:7
#: IDF/gettexttemplates/idf/base.html~.php:7
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:17 #: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:17
msgid "Issues" msgid "Issues"
msgstr "Tickets" msgstr "Tickets"
@@ -1248,7 +1258,9 @@ msgid "Instructions:"
msgstr "Instrucciones:" msgstr "Instrucciones:"
#: IDF/gettexttemplates/idf/base-full.html.php:3 #: IDF/gettexttemplates/idf/base-full.html.php:3
#: IDF/gettexttemplates/idf/base-full.html~.php:3
#: IDF/gettexttemplates/idf/base.html.php:3 #: IDF/gettexttemplates/idf/base.html.php:3
#: IDF/gettexttemplates/idf/base.html~.php:3
#, php-format #, php-format
msgid "" 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 "
@@ -1258,12 +1270,16 @@ msgstr ""
"añadir comentarios" "añadir comentarios"
#: IDF/gettexttemplates/idf/base-full.html.php:4 #: IDF/gettexttemplates/idf/base-full.html.php:4
#: IDF/gettexttemplates/idf/base-full.html~.php:4
#: IDF/gettexttemplates/idf/base.html.php:4 #: IDF/gettexttemplates/idf/base.html.php:4
#: IDF/gettexttemplates/idf/base.html~.php:4
msgid "Project Home" msgid "Project Home"
msgstr "Inicio del Proyecto" msgstr "Inicio del Proyecto"
#: IDF/gettexttemplates/idf/base-full.html.php:10 #: IDF/gettexttemplates/idf/base-full.html.php:10
#: IDF/gettexttemplates/idf/base-full.html~.php:10
#: IDF/gettexttemplates/idf/base.html.php:10 #: IDF/gettexttemplates/idf/base.html.php:10
#: IDF/gettexttemplates/idf/base.html~.php:10
msgid "Project Management" msgid "Project Management"
msgstr "Gestión de Proyecto" msgstr "Gestión de Proyecto"
@@ -1296,6 +1312,7 @@ msgstr ""
#: IDF/gettexttemplates/idf/downloads/delete.html.php:5 #: IDF/gettexttemplates/idf/downloads/delete.html.php:5
#: IDF/gettexttemplates/idf/downloads/view.html.php:4 #: IDF/gettexttemplates/idf/downloads/view.html.php:4
#: IDF/gettexttemplates/idf/issues/attachment.html.php:4 #: IDF/gettexttemplates/idf/issues/attachment.html.php:4
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:7
#: IDF/gettexttemplates/idf/issues/view.html.php:7 #: IDF/gettexttemplates/idf/issues/view.html.php:7
#: IDF/gettexttemplates/idf/wiki/delete.html.php:7 #: IDF/gettexttemplates/idf/wiki/delete.html.php:7
#: IDF/gettexttemplates/idf/wiki/delete.html.php:8 #: IDF/gettexttemplates/idf/wiki/delete.html.php:8
@@ -1319,9 +1336,11 @@ msgstr "Eliminar archivo"
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:5 #: IDF/gettexttemplates/idf/gadmin/users/create.html.php:5
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:14 #: IDF/gettexttemplates/idf/gadmin/users/update.html.php:14
#: IDF/gettexttemplates/idf/issues/create.html.php:14 #: IDF/gettexttemplates/idf/issues/create.html.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:25
#: IDF/gettexttemplates/idf/issues/view.html.php:25 #: IDF/gettexttemplates/idf/issues/view.html.php:25
#: IDF/gettexttemplates/idf/register/confirmation.html.php:7 #: IDF/gettexttemplates/idf/register/confirmation.html.php:7
#: IDF/gettexttemplates/idf/register/index.html.php:7 #: IDF/gettexttemplates/idf/register/index.html.php:8
#: IDF/gettexttemplates/idf/register/index.html~.php:7
#: IDF/gettexttemplates/idf/register/inputkey.html.php:5 #: IDF/gettexttemplates/idf/register/inputkey.html.php:5
#: IDF/gettexttemplates/idf/review/create.html.php:12 #: IDF/gettexttemplates/idf/review/create.html.php:12
#: IDF/gettexttemplates/idf/review/view.html.php:43 #: IDF/gettexttemplates/idf/review/view.html.php:43
@@ -1344,6 +1363,7 @@ msgstr "Subido por:"
#: IDF/gettexttemplates/idf/downloads/delete.html.php:9 #: IDF/gettexttemplates/idf/downloads/delete.html.php:9
#: IDF/gettexttemplates/idf/downloads/view.html.php:14 #: IDF/gettexttemplates/idf/downloads/view.html.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:27
#: IDF/gettexttemplates/idf/issues/view.html.php:27 #: IDF/gettexttemplates/idf/issues/view.html.php:27
#: IDF/gettexttemplates/idf/review/view.html.php:26 #: IDF/gettexttemplates/idf/review/view.html.php:26
#: IDF/gettexttemplates/idf/wiki/delete.html.php:12 #: IDF/gettexttemplates/idf/wiki/delete.html.php:12
@@ -1366,6 +1386,8 @@ msgstr "Descargas:"
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:9 #: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:9
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:10 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:10
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:15 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:15
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:20
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:31
#: IDF/gettexttemplates/idf/issues/view.html.php:20 #: IDF/gettexttemplates/idf/issues/view.html.php:20
#: IDF/gettexttemplates/idf/issues/view.html.php:31 #: IDF/gettexttemplates/idf/issues/view.html.php:31
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:6 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:6
@@ -1515,6 +1537,7 @@ msgstr "Aquí estamos, para ayudarte."
#: IDF/gettexttemplates/idf/faq-api.html.php:4 #: IDF/gettexttemplates/idf/faq-api.html.php:4
#: IDF/gettexttemplates/idf/faq.html.php:35 #: IDF/gettexttemplates/idf/faq.html.php:35
#: IDF/gettexttemplates/idf/gadmin/base.html.php:3 #: IDF/gettexttemplates/idf/gadmin/base.html.php:3
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:3
#: IDF/gettexttemplates/idf/index.html.php:3 IDF/Views/Admin.php:57 #: IDF/gettexttemplates/idf/index.html.php:3 IDF/Views/Admin.php:57
#: IDF/Views.php:47 #: IDF/Views.php:47
msgid "Projects" msgid "Projects"
@@ -1639,10 +1662,12 @@ msgid "<kbd>Alt+4</kbd>: Search (when available)."
msgstr "<kbd>Alt+4</kbd>: Búsqueda (cuando esté disponible)." msgstr "<kbd>Alt+4</kbd>: Búsqueda (cuando esté disponible)."
#: IDF/gettexttemplates/idf/gadmin/base.html.php:4 #: IDF/gettexttemplates/idf/gadmin/base.html.php:4
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:4
msgid "People" msgid "People"
msgstr "Personas" msgstr "Personas"
#: IDF/gettexttemplates/idf/gadmin/base.html.php:5 #: IDF/gettexttemplates/idf/gadmin/base.html.php:5
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:5
msgid "Usher" msgid "Usher"
msgstr "Usher" msgstr "Usher"
@@ -2097,6 +2122,7 @@ msgstr "Archivo adjunto al ticket <a href=\"%%url%%\">%%issue.id%%</a>"
#: IDF/gettexttemplates/idf/issues/attachment.html.php:5 #: IDF/gettexttemplates/idf/issues/attachment.html.php:5
#: IDF/gettexttemplates/idf/review/view.html.php:34 #: IDF/gettexttemplates/idf/review/view.html.php:34
#: IDF/gettexttemplates/idf/source/commit.html.php:22 #: IDF/gettexttemplates/idf/source/commit.html.php:22
#: IDF/gettexttemplates/idf/source/commit.html~.php:22
#: IDF/gettexttemplates/idf/source/git/file.html.php:6 #: IDF/gettexttemplates/idf/source/git/file.html.php:6
#: IDF/gettexttemplates/idf/source/git/tree.html.php:11 #: IDF/gettexttemplates/idf/source/git/tree.html.php:11
#: IDF/gettexttemplates/idf/source/mercurial/file.html.php:6 #: IDF/gettexttemplates/idf/source/mercurial/file.html.php:6
@@ -2116,6 +2142,7 @@ msgid "Download this file"
msgstr "Descargar este archivo" msgstr "Descargar este archivo"
#: IDF/gettexttemplates/idf/issues/attachment.html.php:7 #: IDF/gettexttemplates/idf/issues/attachment.html.php:7
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:26
#: IDF/gettexttemplates/idf/issues/view.html.php:26 #: IDF/gettexttemplates/idf/issues/view.html.php:26
#: IDF/gettexttemplates/idf/review/view.html.php:25 #: IDF/gettexttemplates/idf/review/view.html.php:25
#: IDF/gettexttemplates/idf/wiki/delete.html.php:11 #: IDF/gettexttemplates/idf/wiki/delete.html.php:11
@@ -2198,6 +2225,8 @@ msgstr ""
#: IDF/gettexttemplates/idf/issues/create.html.php:11 #: IDF/gettexttemplates/idf/issues/create.html.php:11
#: IDF/gettexttemplates/idf/issues/create.html.php:13 #: IDF/gettexttemplates/idf/issues/create.html.php:13
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:22
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:24
#: IDF/gettexttemplates/idf/issues/view.html.php:22 #: IDF/gettexttemplates/idf/issues/view.html.php:22
#: IDF/gettexttemplates/idf/issues/view.html.php:24 #: IDF/gettexttemplates/idf/issues/view.html.php:24
#: IDF/gettexttemplates/idf/wiki/create.html.php:5 #: IDF/gettexttemplates/idf/wiki/create.html.php:5
@@ -2210,12 +2239,15 @@ msgid "Submit Issue"
msgstr "Enviar Ticket" msgstr "Enviar Ticket"
#: IDF/gettexttemplates/idf/issues/create.html.php:15 #: IDF/gettexttemplates/idf/issues/create.html.php:15
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:32
#: IDF/gettexttemplates/idf/issues/view.html.php:32 #: IDF/gettexttemplates/idf/issues/view.html.php:32
msgid "Attach file" msgid "Attach file"
msgstr "Adjuntar archivo" msgstr "Adjuntar archivo"
#: IDF/gettexttemplates/idf/issues/create.html.php:16 #: IDF/gettexttemplates/idf/issues/create.html.php:16
#: IDF/gettexttemplates/idf/issues/create.html.php:17 #: IDF/gettexttemplates/idf/issues/create.html.php:17
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:33
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:34
#: IDF/gettexttemplates/idf/issues/view.html.php:33 #: IDF/gettexttemplates/idf/issues/view.html.php:33
#: IDF/gettexttemplates/idf/issues/view.html.php:34 #: IDF/gettexttemplates/idf/issues/view.html.php:34
msgid "Attach another file" msgid "Attach another file"
@@ -2223,6 +2255,7 @@ msgstr "Adjuntar otro archivo"
#: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:12 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:12
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:17
#: IDF/gettexttemplates/idf/issues/view.html.php:17 #: IDF/gettexttemplates/idf/issues/view.html.php:17
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/review/view.html.php:40 #: IDF/gettexttemplates/idf/review/view.html.php:40
@@ -2236,6 +2269,8 @@ msgstr "Resumen:"
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:7 #: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:7
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:7 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:7
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:13 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:13
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:18
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:28
#: IDF/gettexttemplates/idf/issues/view.html.php:18 #: IDF/gettexttemplates/idf/issues/view.html.php:18
#: IDF/gettexttemplates/idf/issues/view.html.php:28 #: IDF/gettexttemplates/idf/issues/view.html.php:28
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:4 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:4
@@ -2247,6 +2282,8 @@ msgstr "Estado:"
#: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:5 #: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:5
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:14 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:19
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:29
#: IDF/gettexttemplates/idf/issues/view.html.php:19 #: IDF/gettexttemplates/idf/issues/view.html.php:19
#: IDF/gettexttemplates/idf/issues/view.html.php:29 #: IDF/gettexttemplates/idf/issues/view.html.php:29
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:5 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:5
@@ -2339,11 +2376,13 @@ msgstr "Tickets en curso:"
msgid "Found issues:" msgid "Found issues:"
msgstr "Tickets encontrados:" msgstr "Tickets encontrados:"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:3
#: IDF/gettexttemplates/idf/issues/view.html.php:3 #: IDF/gettexttemplates/idf/issues/view.html.php:3
#, php-format #, php-format
msgid "Reported by %%submitter%%, %%c.creation_dtime%%" msgid "Reported by %%submitter%%, %%c.creation_dtime%%"
msgstr "Reportado por %%submitter%%, %%c.creation_dtime%%" msgstr "Reportado por %%submitter%%, %%c.creation_dtime%%"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:4
#: IDF/gettexttemplates/idf/issues/view.html.php:4 #: IDF/gettexttemplates/idf/issues/view.html.php:4
#: IDF/gettexttemplates/idf/review/view.html.php:22 #: IDF/gettexttemplates/idf/review/view.html.php:22
#, php-format #, php-format
@@ -2353,11 +2392,13 @@ msgstr ""
"Comentario <a href=\"%%url%%\">%%i%%</a> por %%submitter%%, " "Comentario <a href=\"%%url%%\">%%i%%</a> por %%submitter%%, "
"%%c.creation_dtime%%" "%%c.creation_dtime%%"
#: 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
#, php-format #, php-format
msgid "<a href=\"%%url%%\">Sign in</a> to reply to this comment." msgid "<a href=\"%%url%%\">Sign in</a> to reply to this comment."
msgstr "<a href=\"%%url%%\">Accede</a> para contestar a este comentario." msgstr "<a href=\"%%url%%\">Accede</a> para contestar a este comentario."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:6
#: IDF/gettexttemplates/idf/issues/view.html.php:6 #: IDF/gettexttemplates/idf/issues/view.html.php:6
msgid "" msgid ""
"This issue is marked as closed, add a comment only if you think this issue " "This issue is marked as closed, add a comment only if you think this issue "
@@ -2367,6 +2408,7 @@ msgstr ""
"este problema sigue activo y se necesita más trabajo hasta su completa " "este problema sigue activo y se necesita más trabajo hasta su completa "
"revisión." "revisión."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:8
#: IDF/gettexttemplates/idf/issues/view.html.php:8 #: IDF/gettexttemplates/idf/issues/view.html.php:8
#, php-format #, php-format
msgid "%%interested%% person" msgid "%%interested%% person"
@@ -2374,38 +2416,55 @@ msgid_plural "%%interested%% persons"
msgstr[0] "%%interested%% persona" msgstr[0] "%%interested%% persona"
msgstr[1] "%%interested%% personas" msgstr[1] "%%interested%% personas"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:9
#: IDF/gettexttemplates/idf/issues/view.html.php:9 #: IDF/gettexttemplates/idf/issues/view.html.php:9
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:3
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:7
msgid "Remove this issue from your watch list" msgid "Remove this issue from your watch list"
msgstr "Eliminar este ticket de mi lista de seguimiento" msgstr "Eliminar este ticket de mi lista de seguimiento"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:10
#: IDF/gettexttemplates/idf/issues/view.html.php:10 #: IDF/gettexttemplates/idf/issues/view.html.php:10
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:4
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:8
msgid "Add this issue to your watch list" msgid "Add this issue to your watch list"
msgstr "Añadir este ticket a mi lista de seguimiento" msgstr "Añadir este ticket a mi lista de seguimiento"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:11
#: IDF/gettexttemplates/idf/issues/view.html.php:11 #: IDF/gettexttemplates/idf/issues/view.html.php:11
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:5
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:9
msgid "Click here to view the previous closed issue" msgid "Click here to view the previous closed issue"
msgstr "Haga clic aquí para ver el anterior ticket cerrado" msgstr "Haga clic aquí para ver el anterior ticket cerrado"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:12
#: IDF/gettexttemplates/idf/issues/view.html.php:12 #: IDF/gettexttemplates/idf/issues/view.html.php:12
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:6
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:10
msgid "Click here to view the previous open issue" msgid "Click here to view the previous open issue"
msgstr "Haga clic aquí para ver el anterior ticket abierto" msgstr "Haga clic aquí para ver el anterior ticket abierto"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:13
#: IDF/gettexttemplates/idf/issues/view.html.php:13 #: IDF/gettexttemplates/idf/issues/view.html.php:13
msgid "Click here to view the next closed issue" msgid "Click here to view the next closed issue"
msgstr "Haga clic aquí para ver la siguiente ticket cerrado" msgstr "Haga clic aquí para ver la siguiente ticket cerrado"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:14
#: IDF/gettexttemplates/idf/issues/view.html.php:14 #: IDF/gettexttemplates/idf/issues/view.html.php:14
msgid "Click here to view the next open issue" msgid "Click here to view the next open issue"
msgstr "Haga clic aquí para ver la siguiente ticket abierto" msgstr "Haga clic aquí para ver la siguiente ticket abierto"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:15
#: IDF/gettexttemplates/idf/issues/view.html.php:15 #: IDF/gettexttemplates/idf/issues/view.html.php:15
msgid "download" msgid "download"
msgstr "descarga" msgstr "descarga"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:16
#: IDF/gettexttemplates/idf/issues/view.html.php:16 #: IDF/gettexttemplates/idf/issues/view.html.php:16
msgid "view" msgid "view"
msgstr "ver" msgstr "ver"
#: 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."
@@ -2413,10 +2472,12 @@ 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."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:23
#: IDF/gettexttemplates/idf/issues/view.html.php:23 #: IDF/gettexttemplates/idf/issues/view.html.php:23
msgid "Submit Changes" msgid "Submit Changes"
msgstr "Enviar cambios" msgstr "Enviar cambios"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:30
#: IDF/gettexttemplates/idf/issues/view.html.php:30 #: IDF/gettexttemplates/idf/issues/view.html.php:30
msgid "Followed by:" msgid "Followed by:"
msgstr "Seguido por:" msgstr "Seguido por:"
@@ -2614,6 +2675,7 @@ msgstr ""
"activadas</strong> para identificarte." "activadas</strong> para identificarte."
#: IDF/gettexttemplates/idf/register/index.html.php:3 #: IDF/gettexttemplates/idf/register/index.html.php:3
#: IDF/gettexttemplates/idf/register/index.html~.php:3
msgid "" msgid ""
"Read the <a id=\"showterms\" href=\"#theterms\">terms and conditions</a> " "Read the <a id=\"showterms\" href=\"#theterms\">terms and conditions</a> "
"&ndash; basically <em>\"Please be nice, we respect you\"</em>." "&ndash; basically <em>\"Please be nice, we respect you\"</em>."
@@ -2624,6 +2686,18 @@ msgstr ""
#: IDF/gettexttemplates/idf/register/index.html.php:4 #: IDF/gettexttemplates/idf/register/index.html.php:4
#, php-format #, php-format
msgid "" msgid ""
"If you have just forgotten your login information, then there is no need to "
"create a new account. Just go <a href=\"%%url%%\">here</a> to recover your "
"login name and password."
msgstr ""
"Si ha olvidado los datos de acceso, entonces no tiene porque crear una nueva"
" cuenta. Simplemente haga click <a href=\"%%url%%\">aquí</a> para recuperar "
"su nombre de usuario y contraseña."
#: IDF/gettexttemplates/idf/register/index.html.php:5
#: IDF/gettexttemplates/idf/register/index.html~.php:4
#, php-format
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 "
@@ -2635,17 +2709,20 @@ msgstr ""
"href=\"%%url%%\">¡hacernos saber cuáles son sus inquietudes en cualquier " "href=\"%%url%%\">¡hacernos saber cuáles son sus inquietudes en cualquier "
"momento</a>!" "momento</a>!"
#: IDF/gettexttemplates/idf/register/index.html.php:5 #: IDF/gettexttemplates/idf/register/index.html.php:6
#: IDF/gettexttemplates/idf/register/index.html~.php:5
msgid "Oops, please check the provided login and email address to register." msgid "Oops, please check the provided login and email address to register."
msgstr "" msgstr ""
"Oups, por favor comprueba el nombre de usuario y dirección de correo " "Oups, por favor comprueba el nombre de usuario y dirección de correo "
"electrónico de registro." "electrónico de registro."
#: IDF/gettexttemplates/idf/register/index.html.php:6 IDF/Views.php:90 #: IDF/gettexttemplates/idf/register/index.html.php:7
#: IDF/gettexttemplates/idf/register/index.html~.php:6 IDF/Views.php:90
msgid "Create Your Account" msgid "Create Your Account"
msgstr "Crea tu cuenta" msgstr "Crea tu cuenta"
#: IDF/gettexttemplates/idf/register/index.html.php:8 #: IDF/gettexttemplates/idf/register/index.html.php:9
#: IDF/gettexttemplates/idf/register/index.html~.php:8
msgid "" msgid ""
"Be sure to provide a valid email address, as we are sending a validation " "Be sure to provide a valid email address, as we are sending a validation "
"link by email." "link by email."
@@ -2653,7 +2730,8 @@ msgstr ""
"Asegúrese de proporcionar una dirección válida de correo electrónico, ya que" "Asegúrese de proporcionar una dirección válida de correo electrónico, ya que"
" se enviará un enlace de confirmación por correo electrónico." " se enviará un enlace de confirmación por correo electrónico."
#: IDF/gettexttemplates/idf/register/index.html.php:9 #: IDF/gettexttemplates/idf/register/index.html.php:10
#: IDF/gettexttemplates/idf/register/index.html~.php:9
msgid "Did you know?" msgid "Did you know?"
msgstr "¿Sabía que?" msgstr "¿Sabía que?"
@@ -2760,6 +2838,7 @@ msgstr "Comentarios detallados del archivo (más reciente primero):"
#: IDF/gettexttemplates/idf/review/view.html.php:3 #: IDF/gettexttemplates/idf/review/view.html.php:3
#: IDF/gettexttemplates/idf/source/commit.html.php:3 #: IDF/gettexttemplates/idf/source/commit.html.php:3
#: IDF/gettexttemplates/idf/source/commit.html~.php:3
#, php-format #, php-format
msgid "%%ndiff%% diff" msgid "%%ndiff%% diff"
msgid_plural "%%ndiff%% diffs" msgid_plural "%%ndiff%% diffs"
@@ -2835,17 +2914,20 @@ msgstr ""
#: IDF/gettexttemplates/idf/review/view.html.php:27 #: IDF/gettexttemplates/idf/review/view.html.php:27
#: IDF/gettexttemplates/idf/source/commit.html.php:5 #: IDF/gettexttemplates/idf/source/commit.html.php:5
#: IDF/gettexttemplates/idf/source/commit.html~.php:5
msgid "Author:" msgid "Author:"
msgstr "Autor:" msgstr "Autor:"
#: IDF/gettexttemplates/idf/review/view.html.php:28 #: IDF/gettexttemplates/idf/review/view.html.php:28
#: IDF/gettexttemplates/idf/source/commit-created-email.txt.php:5 #: IDF/gettexttemplates/idf/source/commit-created-email.txt.php:5
#: IDF/gettexttemplates/idf/source/commit.html.php:7 #: IDF/gettexttemplates/idf/source/commit.html.php:7
#: IDF/gettexttemplates/idf/source/commit.html~.php:7
msgid "Commit:" msgid "Commit:"
msgstr "Commit:" msgstr "Commit:"
#: IDF/gettexttemplates/idf/review/view.html.php:29 #: IDF/gettexttemplates/idf/review/view.html.php:29
#: IDF/gettexttemplates/idf/source/commit.html.php:8 #: IDF/gettexttemplates/idf/source/commit.html.php:8
#: IDF/gettexttemplates/idf/source/commit.html~.php:8
msgid "View corresponding source tree" msgid "View corresponding source tree"
msgstr "Ver código fuente correspondiente" msgstr "Ver código fuente correspondiente"
@@ -2863,6 +2945,7 @@ msgstr "Archivos:"
#: IDF/gettexttemplates/idf/review/view.html.php:35 #: IDF/gettexttemplates/idf/review/view.html.php:35
#: IDF/gettexttemplates/idf/source/commit.html.php:23 #: IDF/gettexttemplates/idf/source/commit.html.php:23
#: IDF/gettexttemplates/idf/source/commit.html~.php:23
msgid "Download the corresponding diff file" msgid "Download the corresponding diff file"
msgstr "Descargue el correspondiente archivo diff" msgstr "Descargue el correspondiente archivo diff"
@@ -2921,6 +3004,7 @@ msgstr "Padres:"
#: IDF/gettexttemplates/idf/source/changelog.html.php:6 #: IDF/gettexttemplates/idf/source/changelog.html.php:6
#: IDF/gettexttemplates/idf/source/commit.html.php:10 #: IDF/gettexttemplates/idf/source/commit.html.php:10
#: IDF/gettexttemplates/idf/source/commit.html~.php:10
msgid "View corresponding commit" msgid "View corresponding commit"
msgstr "Ver commit correspondiente" msgstr "Ver commit correspondiente"
@@ -2952,57 +3036,71 @@ msgid "Commit details:"
msgstr "Detalles del commit:" msgstr "Detalles del commit:"
#: IDF/gettexttemplates/idf/source/commit.html.php:4 #: IDF/gettexttemplates/idf/source/commit.html.php:4
#: IDF/gettexttemplates/idf/source/commit.html~.php:4
msgid "Date:" msgid "Date:"
msgstr "Fecha:" msgstr "Fecha:"
#: IDF/gettexttemplates/idf/source/commit.html.php:6 #: IDF/gettexttemplates/idf/source/commit.html.php:6
#: IDF/gettexttemplates/idf/source/commit.html~.php:6
msgid "Branch:" msgid "Branch:"
msgstr "Branch:" msgstr "Branch:"
#: IDF/gettexttemplates/idf/source/commit.html.php:9 #: IDF/gettexttemplates/idf/source/commit.html.php:9
#: IDF/gettexttemplates/idf/source/commit.html~.php:9
msgid "Parents:" msgid "Parents:"
msgstr "Padres:" msgstr "Padres:"
#: IDF/gettexttemplates/idf/source/commit.html.php:11 #: IDF/gettexttemplates/idf/source/commit.html.php:11
#: IDF/gettexttemplates/idf/source/commit.html~.php:11
msgid "Message:" msgid "Message:"
msgstr "Mensaje:" msgstr "Mensaje:"
#: IDF/gettexttemplates/idf/source/commit.html.php:12 #: IDF/gettexttemplates/idf/source/commit.html.php:12
#: IDF/gettexttemplates/idf/source/commit.html~.php:12
#: IDF/gettexttemplates/idf/wiki/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/wiki/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/wiki/wiki-updated-email.txt.php:10 #: IDF/gettexttemplates/idf/wiki/wiki-updated-email.txt.php:10
msgid "Changes:" msgid "Changes:"
msgstr "Cambios:" msgstr "Cambios:"
#: IDF/gettexttemplates/idf/source/commit.html.php:13 #: IDF/gettexttemplates/idf/source/commit.html.php:13
#: IDF/gettexttemplates/idf/source/commit.html~.php:13
msgid "deleted" msgid "deleted"
msgstr "eliminado" msgstr "eliminado"
#: IDF/gettexttemplates/idf/source/commit.html.php:14 #: IDF/gettexttemplates/idf/source/commit.html.php:14
#: IDF/gettexttemplates/idf/source/commit.html.php:17 #: IDF/gettexttemplates/idf/source/commit.html.php:17
#: IDF/gettexttemplates/idf/source/commit.html~.php:14
#: IDF/gettexttemplates/idf/source/commit.html~.php:17
msgid "full" msgid "full"
msgstr "completo" msgstr "completo"
#: IDF/gettexttemplates/idf/source/commit.html.php:15 #: IDF/gettexttemplates/idf/source/commit.html.php:15
#: IDF/gettexttemplates/idf/source/commit.html~.php:15
msgid "renamed" msgid "renamed"
msgstr "renombrado" msgstr "renombrado"
#: IDF/gettexttemplates/idf/source/commit.html.php:16 #: IDF/gettexttemplates/idf/source/commit.html.php:16
#: IDF/gettexttemplates/idf/source/commit.html~.php:16
msgid "added" msgid "added"
msgstr "añadido" msgstr "añadido"
#: IDF/gettexttemplates/idf/source/commit.html.php:18 #: IDF/gettexttemplates/idf/source/commit.html.php:18
#: IDF/gettexttemplates/idf/source/commit.html~.php:18
msgid "modified" msgid "modified"
msgstr "modificado" msgstr "modificado"
#: IDF/gettexttemplates/idf/source/commit.html.php:19 #: IDF/gettexttemplates/idf/source/commit.html.php:19
#: IDF/gettexttemplates/idf/source/commit.html~.php:19
msgid "properies changed" msgid "properies changed"
msgstr "propiedades modificadas" msgstr "propiedades modificadas"
#: IDF/gettexttemplates/idf/source/commit.html.php:20 #: IDF/gettexttemplates/idf/source/commit.html.php:20
#: IDF/gettexttemplates/idf/source/commit.html~.php:20
msgid "removed" msgid "removed"
msgstr "eliminado" msgstr "eliminado"
#: IDF/gettexttemplates/idf/source/commit.html.php:21 #: IDF/gettexttemplates/idf/source/commit.html.php:21
#: IDF/gettexttemplates/idf/source/commit.html~.php:21
msgid "File differences" msgid "File differences"
msgstr "Diferencias de archivos" msgstr "Diferencias de archivos"
@@ -4102,7 +4200,7 @@ msgstr "lcname"
msgid "Lower case version of the name for fast searching." msgid "Lower case version of the name for fast searching."
msgstr "Versión del nombre en minúscula para búsqueda rápida." msgstr "Versión del nombre en minúscula para búsqueda rápida."
#: IDF/Template/Markdown.php:81 #: IDF/Template/Markdown.php:75
msgid "Create this documentation page" msgid "Create this documentation page"
msgstr "Crear esta página de documentación" msgstr "Crear esta página de documentación"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Indefero\n" "Project-Id-Version: Indefero\n"
"Report-Msgid-Bugs-To: http://projects.ceondo.com/p/indefero/issues/\n" "Report-Msgid-Bugs-To: http://projects.ceondo.com/p/indefero/issues/\n"
"POT-Creation-Date: 2011-03-18 23:30+0100\n" "POT-Creation-Date: 2011-03-28 01:13+0200\n"
"PO-Revision-Date: 2011-03-19 07:43+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"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -765,7 +765,9 @@ msgstr "En savoir plus à propos des <a href=\"%s\">Webhooks post-commit</a>."
#: IDF/Form/TabsConf.php:38 IDF/gettexttemplates/idf/admin/base.html.php:4 #: IDF/Form/TabsConf.php:38 IDF/gettexttemplates/idf/admin/base.html.php:4
#: IDF/gettexttemplates/idf/base-full.html.php:5 #: IDF/gettexttemplates/idf/base-full.html.php:5
#: IDF/gettexttemplates/idf/base-full.html~.php:5
#: IDF/gettexttemplates/idf/base.html.php:5 #: IDF/gettexttemplates/idf/base.html.php:5
#: IDF/gettexttemplates/idf/base.html~.php:5
#: IDF/gettexttemplates/idf/downloads/base.html.php:3 #: IDF/gettexttemplates/idf/downloads/base.html.php:3
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:14 #: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:14
#: IDF/Views/Project.php:75 #: IDF/Views/Project.php:75
@@ -773,24 +775,32 @@ msgid "Downloads"
msgstr "Téléchargements" msgstr "Téléchargements"
#: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.php:9 #: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.php:9
#: IDF/gettexttemplates/idf/base-full.html~.php:9
#: IDF/gettexttemplates/idf/base.html.php:9 #: IDF/gettexttemplates/idf/base.html.php:9
#: IDF/gettexttemplates/idf/base.html~.php:9
msgid "Code Review" msgid "Code Review"
msgstr "Revue de code" msgstr "Revue de code"
#: IDF/Form/TabsConf.php:40 IDF/gettexttemplates/idf/admin/base.html.php:5 #: IDF/Form/TabsConf.php:40 IDF/gettexttemplates/idf/admin/base.html.php:5
#: IDF/gettexttemplates/idf/base-full.html.php:6 #: IDF/gettexttemplates/idf/base-full.html.php:6
#: IDF/gettexttemplates/idf/base-full.html~.php:6
#: IDF/gettexttemplates/idf/base.html.php:6 #: IDF/gettexttemplates/idf/base.html.php:6
#: IDF/gettexttemplates/idf/base.html~.php:6
msgid "Documentation" msgid "Documentation"
msgstr "Documentation" msgstr "Documentation"
#: IDF/Form/TabsConf.php:41 IDF/gettexttemplates/idf/admin/base.html.php:7 #: IDF/Form/TabsConf.php:41 IDF/gettexttemplates/idf/admin/base.html.php:7
#: IDF/gettexttemplates/idf/base-full.html.php:8 #: IDF/gettexttemplates/idf/base-full.html.php:8
#: IDF/gettexttemplates/idf/base-full.html~.php:8
#: IDF/gettexttemplates/idf/base.html.php:8 #: IDF/gettexttemplates/idf/base.html.php:8
#: IDF/gettexttemplates/idf/base.html~.php:8
msgid "Source" msgid "Source"
msgstr "Source" msgstr "Source"
#: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.php:7 #: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.php:7
#: IDF/gettexttemplates/idf/base-full.html~.php:7
#: IDF/gettexttemplates/idf/base.html.php:7 #: IDF/gettexttemplates/idf/base.html.php:7
#: IDF/gettexttemplates/idf/base.html~.php:7
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:17 #: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:17
msgid "Issues" msgid "Issues"
msgstr "Tickets" msgstr "Tickets"
@@ -1260,7 +1270,9 @@ msgid "Instructions:"
msgstr "Instructions :" msgstr "Instructions :"
#: IDF/gettexttemplates/idf/base-full.html.php:3 #: IDF/gettexttemplates/idf/base-full.html.php:3
#: IDF/gettexttemplates/idf/base-full.html~.php:3
#: IDF/gettexttemplates/idf/base.html.php:3 #: IDF/gettexttemplates/idf/base.html.php:3
#: IDF/gettexttemplates/idf/base.html~.php:3
#, php-format #, php-format
msgid "" 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 "
@@ -1270,12 +1282,16 @@ msgstr ""
"des tickets ou ajouter des commentaires" "des tickets ou ajouter des commentaires"
#: IDF/gettexttemplates/idf/base-full.html.php:4 #: IDF/gettexttemplates/idf/base-full.html.php:4
#: IDF/gettexttemplates/idf/base-full.html~.php:4
#: IDF/gettexttemplates/idf/base.html.php:4 #: IDF/gettexttemplates/idf/base.html.php:4
#: IDF/gettexttemplates/idf/base.html~.php:4
msgid "Project Home" msgid "Project Home"
msgstr "Page d'Accueil" msgstr "Page d'Accueil"
#: IDF/gettexttemplates/idf/base-full.html.php:10 #: IDF/gettexttemplates/idf/base-full.html.php:10
#: IDF/gettexttemplates/idf/base-full.html~.php:10
#: IDF/gettexttemplates/idf/base.html.php:10 #: IDF/gettexttemplates/idf/base.html.php:10
#: IDF/gettexttemplates/idf/base.html~.php:10
msgid "Project Management" msgid "Project Management"
msgstr "Administration du projet" msgstr "Administration du projet"
@@ -1308,6 +1324,7 @@ msgstr ""
#: IDF/gettexttemplates/idf/downloads/delete.html.php:5 #: IDF/gettexttemplates/idf/downloads/delete.html.php:5
#: IDF/gettexttemplates/idf/downloads/view.html.php:4 #: IDF/gettexttemplates/idf/downloads/view.html.php:4
#: IDF/gettexttemplates/idf/issues/attachment.html.php:4 #: IDF/gettexttemplates/idf/issues/attachment.html.php:4
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:7
#: IDF/gettexttemplates/idf/issues/view.html.php:7 #: IDF/gettexttemplates/idf/issues/view.html.php:7
#: IDF/gettexttemplates/idf/wiki/delete.html.php:7 #: IDF/gettexttemplates/idf/wiki/delete.html.php:7
#: IDF/gettexttemplates/idf/wiki/delete.html.php:8 #: IDF/gettexttemplates/idf/wiki/delete.html.php:8
@@ -1331,9 +1348,11 @@ msgstr "Supprimer le fichier"
#: IDF/gettexttemplates/idf/gadmin/users/create.html.php:5 #: IDF/gettexttemplates/idf/gadmin/users/create.html.php:5
#: IDF/gettexttemplates/idf/gadmin/users/update.html.php:14 #: IDF/gettexttemplates/idf/gadmin/users/update.html.php:14
#: IDF/gettexttemplates/idf/issues/create.html.php:14 #: IDF/gettexttemplates/idf/issues/create.html.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:25
#: IDF/gettexttemplates/idf/issues/view.html.php:25 #: IDF/gettexttemplates/idf/issues/view.html.php:25
#: IDF/gettexttemplates/idf/register/confirmation.html.php:7 #: IDF/gettexttemplates/idf/register/confirmation.html.php:7
#: IDF/gettexttemplates/idf/register/index.html.php:7 #: IDF/gettexttemplates/idf/register/index.html.php:8
#: IDF/gettexttemplates/idf/register/index.html~.php:7
#: IDF/gettexttemplates/idf/register/inputkey.html.php:5 #: IDF/gettexttemplates/idf/register/inputkey.html.php:5
#: IDF/gettexttemplates/idf/review/create.html.php:12 #: IDF/gettexttemplates/idf/review/create.html.php:12
#: IDF/gettexttemplates/idf/review/view.html.php:43 #: IDF/gettexttemplates/idf/review/view.html.php:43
@@ -1356,6 +1375,7 @@ msgstr "Mis en ligne :"
#: IDF/gettexttemplates/idf/downloads/delete.html.php:9 #: IDF/gettexttemplates/idf/downloads/delete.html.php:9
#: IDF/gettexttemplates/idf/downloads/view.html.php:14 #: IDF/gettexttemplates/idf/downloads/view.html.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:27
#: IDF/gettexttemplates/idf/issues/view.html.php:27 #: IDF/gettexttemplates/idf/issues/view.html.php:27
#: IDF/gettexttemplates/idf/review/view.html.php:26 #: IDF/gettexttemplates/idf/review/view.html.php:26
#: IDF/gettexttemplates/idf/wiki/delete.html.php:12 #: IDF/gettexttemplates/idf/wiki/delete.html.php:12
@@ -1378,6 +1398,8 @@ msgstr "Téléchargements :"
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:9 #: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:9
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:10 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:10
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:15 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:15
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:20
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:31
#: IDF/gettexttemplates/idf/issues/view.html.php:20 #: IDF/gettexttemplates/idf/issues/view.html.php:20
#: IDF/gettexttemplates/idf/issues/view.html.php:31 #: IDF/gettexttemplates/idf/issues/view.html.php:31
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:6 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:6
@@ -1528,6 +1550,7 @@ msgstr "Nous sommes là, juste pour vous aider."
#: IDF/gettexttemplates/idf/faq-api.html.php:4 #: IDF/gettexttemplates/idf/faq-api.html.php:4
#: IDF/gettexttemplates/idf/faq.html.php:35 #: IDF/gettexttemplates/idf/faq.html.php:35
#: IDF/gettexttemplates/idf/gadmin/base.html.php:3 #: IDF/gettexttemplates/idf/gadmin/base.html.php:3
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:3
#: IDF/gettexttemplates/idf/index.html.php:3 IDF/Views/Admin.php:57 #: IDF/gettexttemplates/idf/index.html.php:3 IDF/Views/Admin.php:57
#: IDF/Views.php:47 #: IDF/Views.php:47
msgid "Projects" msgid "Projects"
@@ -1652,10 +1675,12 @@ msgid "<kbd>Alt+4</kbd>: Search (when available)."
msgstr "<kbd>Alt+4</kbd> : Chercher (si disponible)." msgstr "<kbd>Alt+4</kbd> : Chercher (si disponible)."
#: IDF/gettexttemplates/idf/gadmin/base.html.php:4 #: IDF/gettexttemplates/idf/gadmin/base.html.php:4
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:4
msgid "People" msgid "People"
msgstr "Utilisateurs" msgstr "Utilisateurs"
#: IDF/gettexttemplates/idf/gadmin/base.html.php:5 #: IDF/gettexttemplates/idf/gadmin/base.html.php:5
#: IDF/gettexttemplates/idf/gadmin/base.html~.php:5
msgid "Usher" msgid "Usher"
msgstr "Usher" msgstr "Usher"
@@ -2106,6 +2131,7 @@ msgstr "Pièce jointe au ticket <a href=\"%%url%%\">%%issue.id%%</a>"
#: IDF/gettexttemplates/idf/issues/attachment.html.php:5 #: IDF/gettexttemplates/idf/issues/attachment.html.php:5
#: IDF/gettexttemplates/idf/review/view.html.php:34 #: IDF/gettexttemplates/idf/review/view.html.php:34
#: IDF/gettexttemplates/idf/source/commit.html.php:22 #: IDF/gettexttemplates/idf/source/commit.html.php:22
#: IDF/gettexttemplates/idf/source/commit.html~.php:22
#: IDF/gettexttemplates/idf/source/git/file.html.php:6 #: IDF/gettexttemplates/idf/source/git/file.html.php:6
#: IDF/gettexttemplates/idf/source/git/tree.html.php:11 #: IDF/gettexttemplates/idf/source/git/tree.html.php:11
#: IDF/gettexttemplates/idf/source/mercurial/file.html.php:6 #: IDF/gettexttemplates/idf/source/mercurial/file.html.php:6
@@ -2125,6 +2151,7 @@ msgid "Download this file"
msgstr "Télécharger ce fichier" msgstr "Télécharger ce fichier"
#: IDF/gettexttemplates/idf/issues/attachment.html.php:7 #: IDF/gettexttemplates/idf/issues/attachment.html.php:7
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:26
#: IDF/gettexttemplates/idf/issues/view.html.php:26 #: IDF/gettexttemplates/idf/issues/view.html.php:26
#: IDF/gettexttemplates/idf/review/view.html.php:25 #: IDF/gettexttemplates/idf/review/view.html.php:25
#: IDF/gettexttemplates/idf/wiki/delete.html.php:11 #: IDF/gettexttemplates/idf/wiki/delete.html.php:11
@@ -2207,6 +2234,8 @@ msgstr ""
#: IDF/gettexttemplates/idf/issues/create.html.php:11 #: IDF/gettexttemplates/idf/issues/create.html.php:11
#: IDF/gettexttemplates/idf/issues/create.html.php:13 #: IDF/gettexttemplates/idf/issues/create.html.php:13
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:22
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:24
#: IDF/gettexttemplates/idf/issues/view.html.php:22 #: IDF/gettexttemplates/idf/issues/view.html.php:22
#: IDF/gettexttemplates/idf/issues/view.html.php:24 #: IDF/gettexttemplates/idf/issues/view.html.php:24
#: IDF/gettexttemplates/idf/wiki/create.html.php:5 #: IDF/gettexttemplates/idf/wiki/create.html.php:5
@@ -2219,12 +2248,15 @@ msgid "Submit Issue"
msgstr "Soumettre le ticket" msgstr "Soumettre le ticket"
#: IDF/gettexttemplates/idf/issues/create.html.php:15 #: IDF/gettexttemplates/idf/issues/create.html.php:15
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:32
#: IDF/gettexttemplates/idf/issues/view.html.php:32 #: IDF/gettexttemplates/idf/issues/view.html.php:32
msgid "Attach file" msgid "Attach file"
msgstr "Attacher un fichier" msgstr "Attacher un fichier"
#: IDF/gettexttemplates/idf/issues/create.html.php:16 #: IDF/gettexttemplates/idf/issues/create.html.php:16
#: IDF/gettexttemplates/idf/issues/create.html.php:17 #: IDF/gettexttemplates/idf/issues/create.html.php:17
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:33
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:34
#: IDF/gettexttemplates/idf/issues/view.html.php:33 #: IDF/gettexttemplates/idf/issues/view.html.php:33
#: IDF/gettexttemplates/idf/issues/view.html.php:34 #: IDF/gettexttemplates/idf/issues/view.html.php:34
msgid "Attach another file" msgid "Attach another file"
@@ -2232,6 +2264,7 @@ msgstr "Attacher un autre fichier"
#: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:12 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:12
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:17
#: IDF/gettexttemplates/idf/issues/view.html.php:17 #: IDF/gettexttemplates/idf/issues/view.html.php:17
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/review/view.html.php:40 #: IDF/gettexttemplates/idf/review/view.html.php:40
@@ -2245,6 +2278,8 @@ msgstr "Résumé :"
#: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:7 #: IDF/gettexttemplates/idf/issues/issue-created-email.txt.php:7
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:7 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:7
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:13 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:13
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:18
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:28
#: IDF/gettexttemplates/idf/issues/view.html.php:18 #: IDF/gettexttemplates/idf/issues/view.html.php:18
#: IDF/gettexttemplates/idf/issues/view.html.php:28 #: IDF/gettexttemplates/idf/issues/view.html.php:28
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:4 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:4
@@ -2256,6 +2291,8 @@ msgstr "Statut :"
#: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:5 #: IDF/gettexttemplates/idf/issues/feedfragment.xml.php:5
#: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:14 #: IDF/gettexttemplates/idf/issues/issue-updated-email.txt.php:14
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:19
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:29
#: IDF/gettexttemplates/idf/issues/view.html.php:19 #: IDF/gettexttemplates/idf/issues/view.html.php:19
#: IDF/gettexttemplates/idf/issues/view.html.php:29 #: IDF/gettexttemplates/idf/issues/view.html.php:29
#: IDF/gettexttemplates/idf/review/feedfragment.xml.php:5 #: IDF/gettexttemplates/idf/review/feedfragment.xml.php:5
@@ -2343,11 +2380,13 @@ msgstr "Tickets en cours:"
msgid "Found issues:" msgid "Found issues:"
msgstr "Tickets trouvés:" msgstr "Tickets trouvés:"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:3
#: IDF/gettexttemplates/idf/issues/view.html.php:3 #: IDF/gettexttemplates/idf/issues/view.html.php:3
#, php-format #, php-format
msgid "Reported by %%submitter%%, %%c.creation_dtime%%" msgid "Reported by %%submitter%%, %%c.creation_dtime%%"
msgstr "Soumis par %%submitter%%, %%c.creation_dtime%%" msgstr "Soumis par %%submitter%%, %%c.creation_dtime%%"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:4
#: IDF/gettexttemplates/idf/issues/view.html.php:4 #: IDF/gettexttemplates/idf/issues/view.html.php:4
#: IDF/gettexttemplates/idf/review/view.html.php:22 #: IDF/gettexttemplates/idf/review/view.html.php:22
#, php-format #, php-format
@@ -2357,11 +2396,13 @@ msgstr ""
"Commentaire <a href=\"%%url%%\">%%i%%</a> par %%submitter%%, " "Commentaire <a href=\"%%url%%\">%%i%%</a> par %%submitter%%, "
"%%c.creation_dtime%%" "%%c.creation_dtime%%"
#: 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
#, php-format #, php-format
msgid "<a href=\"%%url%%\">Sign in</a> to reply to this comment." msgid "<a href=\"%%url%%\">Sign in</a> to reply to this comment."
msgstr "<a href=\"%%url%%\">Connectez-vous</a> pour répondre à ce commentaire." msgstr "<a href=\"%%url%%\">Connectez-vous</a> pour répondre à ce commentaire."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:6
#: IDF/gettexttemplates/idf/issues/view.html.php:6 #: IDF/gettexttemplates/idf/issues/view.html.php:6
msgid "" msgid ""
"This issue is marked as closed, add a comment only if you think this issue " "This issue is marked as closed, add a comment only if you think this issue "
@@ -2371,6 +2412,7 @@ msgstr ""
"pensez que ce ticket est toujours valide et qu'un travail supplémentaire est" "pensez que ce ticket est toujours valide et qu'un travail supplémentaire est"
" nécessaire pour corriger le problème." " nécessaire pour corriger le problème."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:8
#: IDF/gettexttemplates/idf/issues/view.html.php:8 #: IDF/gettexttemplates/idf/issues/view.html.php:8
#, php-format #, php-format
msgid "%%interested%% person" msgid "%%interested%% person"
@@ -2378,38 +2420,55 @@ msgid_plural "%%interested%% persons"
msgstr[0] "%%interested%% personne" msgstr[0] "%%interested%% personne"
msgstr[1] "%%interested%% personnes" msgstr[1] "%%interested%% personnes"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:9
#: IDF/gettexttemplates/idf/issues/view.html.php:9 #: IDF/gettexttemplates/idf/issues/view.html.php:9
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:3
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:7
msgid "Remove this issue from your watch list" msgid "Remove this issue from your watch list"
msgstr "Supprimer ce ticket de votre liste de surveillance" msgstr "Supprimer ce ticket de votre liste de surveillance"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:10
#: IDF/gettexttemplates/idf/issues/view.html.php:10 #: IDF/gettexttemplates/idf/issues/view.html.php:10
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:4
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:8
msgid "Add this issue to your watch list" msgid "Add this issue to your watch list"
msgstr "Ajouter ce ticket à votre liste de surveillance." msgstr "Ajouter ce ticket à votre liste de surveillance."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:11
#: IDF/gettexttemplates/idf/issues/view.html.php:11 #: IDF/gettexttemplates/idf/issues/view.html.php:11
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:5
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:9
msgid "Click here to view the previous closed issue" msgid "Click here to view the previous closed issue"
msgstr "Cliquez ici pour voir le précédent ticket fermé" msgstr "Cliquez ici pour voir le précédent ticket fermé"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:12
#: IDF/gettexttemplates/idf/issues/view.html.php:12 #: IDF/gettexttemplates/idf/issues/view.html.php:12
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:6
#: IDF/gettexttemplates/idf/issues/view.html.rej.php:10
msgid "Click here to view the previous open issue" msgid "Click here to view the previous open issue"
msgstr "Cliquez ici pour voir le précédent ticket ouvert" msgstr "Cliquez ici pour voir le précédent ticket ouvert"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:13
#: IDF/gettexttemplates/idf/issues/view.html.php:13 #: IDF/gettexttemplates/idf/issues/view.html.php:13
msgid "Click here to view the next closed issue" msgid "Click here to view the next closed issue"
msgstr "Cliquez ici pour voir le prochain ticket fermé" msgstr "Cliquez ici pour voir le prochain ticket fermé"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:14
#: IDF/gettexttemplates/idf/issues/view.html.php:14 #: IDF/gettexttemplates/idf/issues/view.html.php:14
msgid "Click here to view the next open issue" msgid "Click here to view the next open issue"
msgstr "Cliquez ici pour voir le ticket suivant ouvert" msgstr "Cliquez ici pour voir le ticket suivant ouvert"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:15
#: IDF/gettexttemplates/idf/issues/view.html.php:15 #: IDF/gettexttemplates/idf/issues/view.html.php:15
msgid "download" msgid "download"
msgstr "télécharger" msgstr "télécharger"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:16
#: IDF/gettexttemplates/idf/issues/view.html.php:16 #: IDF/gettexttemplates/idf/issues/view.html.php:16
msgid "view" msgid "view"
msgstr "vue" msgstr "vue"
#: 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."
@@ -2417,10 +2476,12 @@ 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."
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:23
#: IDF/gettexttemplates/idf/issues/view.html.php:23 #: IDF/gettexttemplates/idf/issues/view.html.php:23
msgid "Submit Changes" msgid "Submit Changes"
msgstr "Soumettre les changements" msgstr "Soumettre les changements"
#: IDF/gettexttemplates/idf/issues/view.html.orig.php:30
#: IDF/gettexttemplates/idf/issues/view.html.php:30 #: IDF/gettexttemplates/idf/issues/view.html.php:30
msgid "Followed by:" msgid "Followed by:"
msgstr "Suivi par :" msgstr "Suivi par :"
@@ -2617,6 +2678,7 @@ msgstr ""
"activés dans votre navigateur</strong> pour vous connecter par la suite." "activés dans votre navigateur</strong> pour vous connecter par la suite."
#: IDF/gettexttemplates/idf/register/index.html.php:3 #: IDF/gettexttemplates/idf/register/index.html.php:3
#: IDF/gettexttemplates/idf/register/index.html~.php:3
msgid "" msgid ""
"Read the <a id=\"showterms\" href=\"#theterms\">terms and conditions</a> " "Read the <a id=\"showterms\" href=\"#theterms\">terms and conditions</a> "
"&ndash; basically <em>\"Please be nice, we respect you\"</em>." "&ndash; basically <em>\"Please be nice, we respect you\"</em>."
@@ -2627,6 +2689,18 @@ msgstr ""
#: IDF/gettexttemplates/idf/register/index.html.php:4 #: IDF/gettexttemplates/idf/register/index.html.php:4
#, php-format #, php-format
msgid "" msgid ""
"If you have just forgotten your login information, then there is no need to "
"create a new account. Just go <a href=\"%%url%%\">here</a> to recover your "
"login name and password."
msgstr ""
"Si vous avez perdu votre mot de passe, il n'est pas nécessaire de créer un "
"nouveau compte. Cette <a href=\"%%url%%>page</a> vous permet de retrouver "
"vos identifiants."
#: IDF/gettexttemplates/idf/register/index.html.php:5
#: IDF/gettexttemplates/idf/register/index.html~.php:4
#, php-format
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 "
@@ -2637,17 +2711,20 @@ msgstr ""
" 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 savoir à tout instant</a> !" "faire savoir à tout instant</a> !"
#: IDF/gettexttemplates/idf/register/index.html.php:5 #: IDF/gettexttemplates/idf/register/index.html.php:6
#: IDF/gettexttemplates/idf/register/index.html~.php:5
msgid "Oops, please check the provided login and email address to register." msgid "Oops, please check the provided login and email address to register."
msgstr "" msgstr ""
"Oups, veuillez vérifier l'identifiant et l'adresse email pour vous " "Oups, veuillez vérifier l'identifiant et l'adresse email pour vous "
"enregistrer." "enregistrer."
#: IDF/gettexttemplates/idf/register/index.html.php:6 IDF/Views.php:90 #: IDF/gettexttemplates/idf/register/index.html.php:7
#: IDF/gettexttemplates/idf/register/index.html~.php:6 IDF/Views.php:90
msgid "Create Your Account" msgid "Create Your Account"
msgstr "Créez votre compte" msgstr "Créez votre compte"
#: IDF/gettexttemplates/idf/register/index.html.php:8 #: IDF/gettexttemplates/idf/register/index.html.php:9
#: IDF/gettexttemplates/idf/register/index.html~.php:8
msgid "" msgid ""
"Be sure to provide a valid email address, as we are sending a validation " "Be sure to provide a valid email address, as we are sending a validation "
"link by email." "link by email."
@@ -2655,7 +2732,8 @@ msgstr ""
"Faites attention de bien fournir une adresse email valide car nous vous " "Faites attention de bien fournir une adresse email valide car nous vous "
"enverrons un email de confirmation." "enverrons un email de confirmation."
#: IDF/gettexttemplates/idf/register/index.html.php:9 #: IDF/gettexttemplates/idf/register/index.html.php:10
#: IDF/gettexttemplates/idf/register/index.html~.php:9
msgid "Did you know?" msgid "Did you know?"
msgstr "Le saviez-vous ?" msgstr "Le saviez-vous ?"
@@ -2762,6 +2840,7 @@ msgstr "Commentaires des fichiers (le dernier en premier) :"
#: IDF/gettexttemplates/idf/review/view.html.php:3 #: IDF/gettexttemplates/idf/review/view.html.php:3
#: IDF/gettexttemplates/idf/source/commit.html.php:3 #: IDF/gettexttemplates/idf/source/commit.html.php:3
#: IDF/gettexttemplates/idf/source/commit.html~.php:3
#, php-format #, php-format
msgid "%%ndiff%% diff" msgid "%%ndiff%% diff"
msgid_plural "%%ndiff%% diffs" msgid_plural "%%ndiff%% diffs"
@@ -2834,17 +2913,20 @@ msgstr ""
#: IDF/gettexttemplates/idf/review/view.html.php:27 #: IDF/gettexttemplates/idf/review/view.html.php:27
#: IDF/gettexttemplates/idf/source/commit.html.php:5 #: IDF/gettexttemplates/idf/source/commit.html.php:5
#: IDF/gettexttemplates/idf/source/commit.html~.php:5
msgid "Author:" msgid "Author:"
msgstr "Auteur :" msgstr "Auteur :"
#: IDF/gettexttemplates/idf/review/view.html.php:28 #: IDF/gettexttemplates/idf/review/view.html.php:28
#: IDF/gettexttemplates/idf/source/commit-created-email.txt.php:5 #: IDF/gettexttemplates/idf/source/commit-created-email.txt.php:5
#: IDF/gettexttemplates/idf/source/commit.html.php:7 #: IDF/gettexttemplates/idf/source/commit.html.php:7
#: IDF/gettexttemplates/idf/source/commit.html~.php:7
msgid "Commit:" msgid "Commit:"
msgstr "Commit :" msgstr "Commit :"
#: IDF/gettexttemplates/idf/review/view.html.php:29 #: IDF/gettexttemplates/idf/review/view.html.php:29
#: IDF/gettexttemplates/idf/source/commit.html.php:8 #: IDF/gettexttemplates/idf/source/commit.html.php:8
#: IDF/gettexttemplates/idf/source/commit.html~.php:8
msgid "View corresponding source tree" msgid "View corresponding source tree"
msgstr "Voir l'arbre des sources correspondant" msgstr "Voir l'arbre des sources correspondant"
@@ -2862,6 +2944,7 @@ msgstr "Fichiers :"
#: IDF/gettexttemplates/idf/review/view.html.php:35 #: IDF/gettexttemplates/idf/review/view.html.php:35
#: IDF/gettexttemplates/idf/source/commit.html.php:23 #: IDF/gettexttemplates/idf/source/commit.html.php:23
#: IDF/gettexttemplates/idf/source/commit.html~.php:23
msgid "Download the corresponding diff file" msgid "Download the corresponding diff file"
msgstr "Télécharger le fichier diff correspondant" msgstr "Télécharger le fichier diff correspondant"
@@ -2920,6 +3003,7 @@ msgstr "Parent : "
#: IDF/gettexttemplates/idf/source/changelog.html.php:6 #: IDF/gettexttemplates/idf/source/changelog.html.php:6
#: IDF/gettexttemplates/idf/source/commit.html.php:10 #: IDF/gettexttemplates/idf/source/commit.html.php:10
#: IDF/gettexttemplates/idf/source/commit.html~.php:10
msgid "View corresponding commit" msgid "View corresponding commit"
msgstr "Voir le commit correspondant" msgstr "Voir le commit correspondant"
@@ -2951,57 +3035,71 @@ msgid "Commit details:"
msgstr "Détails de la révision :" msgstr "Détails de la révision :"
#: IDF/gettexttemplates/idf/source/commit.html.php:4 #: IDF/gettexttemplates/idf/source/commit.html.php:4
#: IDF/gettexttemplates/idf/source/commit.html~.php:4
msgid "Date:" msgid "Date:"
msgstr "Date :" msgstr "Date :"
#: IDF/gettexttemplates/idf/source/commit.html.php:6 #: IDF/gettexttemplates/idf/source/commit.html.php:6
#: IDF/gettexttemplates/idf/source/commit.html~.php:6
msgid "Branch:" msgid "Branch:"
msgstr "Branche :" msgstr "Branche :"
#: IDF/gettexttemplates/idf/source/commit.html.php:9 #: IDF/gettexttemplates/idf/source/commit.html.php:9
#: IDF/gettexttemplates/idf/source/commit.html~.php:9
msgid "Parents:" msgid "Parents:"
msgstr "Parents :" msgstr "Parents :"
#: IDF/gettexttemplates/idf/source/commit.html.php:11 #: IDF/gettexttemplates/idf/source/commit.html.php:11
#: IDF/gettexttemplates/idf/source/commit.html~.php:11
msgid "Message:" msgid "Message:"
msgstr "Message :" msgstr "Message :"
#: IDF/gettexttemplates/idf/source/commit.html.php:12 #: IDF/gettexttemplates/idf/source/commit.html.php:12
#: IDF/gettexttemplates/idf/source/commit.html~.php:12
#: IDF/gettexttemplates/idf/wiki/feedfragment.xml.php:3 #: IDF/gettexttemplates/idf/wiki/feedfragment.xml.php:3
#: IDF/gettexttemplates/idf/wiki/wiki-updated-email.txt.php:10 #: IDF/gettexttemplates/idf/wiki/wiki-updated-email.txt.php:10
msgid "Changes:" msgid "Changes:"
msgstr "Changements :" msgstr "Changements :"
#: IDF/gettexttemplates/idf/source/commit.html.php:13 #: IDF/gettexttemplates/idf/source/commit.html.php:13
#: IDF/gettexttemplates/idf/source/commit.html~.php:13
msgid "deleted" msgid "deleted"
msgstr "supprimé" msgstr "supprimé"
#: IDF/gettexttemplates/idf/source/commit.html.php:14 #: IDF/gettexttemplates/idf/source/commit.html.php:14
#: IDF/gettexttemplates/idf/source/commit.html.php:17 #: IDF/gettexttemplates/idf/source/commit.html.php:17
#: IDF/gettexttemplates/idf/source/commit.html~.php:14
#: IDF/gettexttemplates/idf/source/commit.html~.php:17
msgid "full" msgid "full"
msgstr "complet" msgstr "complet"
#: IDF/gettexttemplates/idf/source/commit.html.php:15 #: IDF/gettexttemplates/idf/source/commit.html.php:15
#: IDF/gettexttemplates/idf/source/commit.html~.php:15
msgid "renamed" msgid "renamed"
msgstr "renommé" msgstr "renommé"
#: IDF/gettexttemplates/idf/source/commit.html.php:16 #: IDF/gettexttemplates/idf/source/commit.html.php:16
#: IDF/gettexttemplates/idf/source/commit.html~.php:16
msgid "added" msgid "added"
msgstr "ajouté" msgstr "ajouté"
#: IDF/gettexttemplates/idf/source/commit.html.php:18 #: IDF/gettexttemplates/idf/source/commit.html.php:18
#: IDF/gettexttemplates/idf/source/commit.html~.php:18
msgid "modified" msgid "modified"
msgstr "modifié" msgstr "modifié"
#: IDF/gettexttemplates/idf/source/commit.html.php:19 #: IDF/gettexttemplates/idf/source/commit.html.php:19
#: IDF/gettexttemplates/idf/source/commit.html~.php:19
msgid "properies changed" msgid "properies changed"
msgstr "propriétés changées" msgstr "propriétés changées"
#: IDF/gettexttemplates/idf/source/commit.html.php:20 #: IDF/gettexttemplates/idf/source/commit.html.php:20
#: IDF/gettexttemplates/idf/source/commit.html~.php:20
msgid "removed" msgid "removed"
msgstr "supprimé" msgstr "supprimé"
#: IDF/gettexttemplates/idf/source/commit.html.php:21 #: IDF/gettexttemplates/idf/source/commit.html.php:21
#: IDF/gettexttemplates/idf/source/commit.html~.php:21
msgid "File differences" msgid "File differences"
msgstr "Différences entre fichiers" msgstr "Différences entre fichiers"
@@ -4092,7 +4190,7 @@ msgstr "lcname"
msgid "Lower case version of the name for fast searching." msgid "Lower case version of the name for fast searching."
msgstr "Version minuscule du nom pour chercher rapidement." msgstr "Version minuscule du nom pour chercher rapidement."
#: IDF/Template/Markdown.php:81 #: IDF/Template/Markdown.php:75
msgid "Create this documentation page" msgid "Create this documentation page"
msgstr "Créer cette page de documentation" msgstr "Créer cette page de documentation"

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
{/if} {/if}
</div> </div>
{/if} {/if}
<form method="post" action="."> <form method="post" enctype="multipart/form-data" action=".">
<table class="form" summary=""> <table class="form" summary="">
<tr> <tr>
<th><strong>{$form.f.name.labelTag}:</strong></th> <th><strong>{$form.f.name.labelTag}:</strong></th>
@@ -30,6 +30,30 @@
{$form.f.description|unsafe} {$form.f.description|unsafe}
</td> </td>
</tr> </tr>
<tr>
<th><strong>{trans 'Current logo'}:</strong></th>
<td>
{if $logo}
<img src="{url 'IDF_Views_Project::logo', array($project.shortname)}" alt="{trans 'Project logo'}" />
{else}
{trans 'Your project does not have a logo configured yet.'}
{/if}
</td>
</tr>
<tr>
<th><strong>{$form.f.logo.labelTag}:</strong></th>
<td>{if $form.f.logo.errors}{$form.f.logo.fieldErrors}{/if}
{$form.f.logo|unsafe}
</td>
</tr>
{if $logo}
<tr>
<th><strong>{$form.f.logo_remove.labelTag}:</strong></th>
<td>{if $form.f.logo_remove.errors}{$form.f.logo_remove.fieldErrors}{/if}
{$form.f.logo_remove|unsafe}
</td>
</tr>
{/if}
<tr><td>&nbsp;</td> <tr><td>&nbsp;</td>
<td> <td>
<input type="submit" name="submit" value="{trans 'Save Changes'}" /> <input type="submit" name="submit" value="{trans 'Save Changes'}" />

View File

@@ -37,7 +37,7 @@
<body> <body>
<div id="{block docid}doc3{/block}"> <div id="{block docid}doc3{/block}">
<div id="hd"> <div id="hd">
{if $project}<h1 class="project-title">{$project}</h1>{/if} {if $project}<h1 class="project-title">{$project}<img class="logo" src="{url 'IDF_Views_Project::logo', array($project.shortname)}" alt="{trans 'Project logo'}" />{if $project.private}<img class="lock" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" />{/if}{$p}</h1>{/if}
{include 'idf/main-menu.html'} {include 'idf/main-menu.html'}
<div id="header"> <div id="header">
<div id="main-tabs"> <div id="main-tabs">

View File

@@ -37,7 +37,7 @@
<body> <body>
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}"> <div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
<div id="hd"> <div id="hd">
{if $project}<h1 class="project-title">{$project}</h1>{/if} {if $project}<h1 class="project-title">{$project}<img class="logo" src="{url 'IDF_Views_Project::logo', array($project.shortname)}" alt="{trans 'Project logo'}" />{if $project.private}<img class="lock" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" />{/if}{$p}</h1>{/if}
{include 'idf/main-menu.html'} {include 'idf/main-menu.html'}
<div id="header"> <div id="header">
<div id="main-tabs"> <div id="main-tabs">

View File

@@ -9,9 +9,28 @@
{aurl 'url', 'IDF_Views_Admin::projectCreate'} {aurl 'url', 'IDF_Views_Admin::projectCreate'}
<p><a href="{$url}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/add.png'}" alt="+" align="bottom" /></a> <a href="{$url}">{trans 'Create Project'}</a></p>{/if} <p><a href="{$url}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/add.png'}" alt="+" align="bottom" /></a> <a href="{$url}">{trans 'Create Project'}</a></p>{/if}
{else} {else}
<ul>{foreach $projects as $p} {foreach $projects as $p}
<li>{if $p.private}<img style="vertical-align: text-bottom;" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" /> {/if}<a href="{url 'IDF_Views_Project::home', array($p.shortname)}">{$p}</a>{if $p.shortdesc}, {$p.shortdesc}{/if}</li> <div class="p-list-img">
{/foreach}</ul> <a href="{url 'IDF_Views_Project::home', array($p.shortname)}">
<img src="{url 'IDF_Views_Project::logo', array($p.shortname)}" alt="{trans 'Project logo'}" />
</a>
{if $p.private}
<div class="p-list-private">
<a href="{url 'IDF_Views_Project::home', array($p.shortname)}">
<img style="float:right" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" />
</a>
</div>
{/if}
</div>
<div class="p-list-prj">
<p>
<a href="{url 'IDF_Views_Project::home', array($p.shortname)}"><strong>{$p}</strong></a>
{if $p.private} - {trans 'Private project'}{/if}
</p>
<p>{$p.shortdesc}</p>
</div>
<div style="clear: both"></div>
{/foreach}
{/if} {/if}
{/block} {/block}
{block context} {block context}

View File

@@ -8,8 +8,7 @@
{/if}<li id="project-list"><a href="{url 'IDF_Views::index'}">{trans 'Project List'} &#x25be;</a> {/if}<li id="project-list"><a href="{url 'IDF_Views::index'}">{trans 'Project List'} &#x25be;</a>
{if $allProjects.count() != 0} {if $allProjects.count() != 0}
<ul>{foreach $allProjects as $p} <ul>{foreach $allProjects as $p}
<li>{if $p.private}<img style="vertical-align: text-bottom;" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" /> {/if} <li><a href="{url 'IDF_Views_Project::home', array($p.shortname)}"><img class="logo" src="{url 'IDF_Views_Project::logo', array($p.shortname)}" alt="{trans 'Project logo'}" />{if $p.private}<img class="lock" src="{media '/idf/img/lock.png'}" alt="{trans 'Private project'}" />{/if}{$p}</a></li>
<a href="{url 'IDF_Views_Project::home', array($p.shortname)}">{$p}</a></li>
{/foreach}</ul> {/foreach}</ul>
{/if}</li>{if $isAdmin}<li><a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a></li>{/if}<li> {/if}</li>{if $isAdmin}<li><a href="{url 'IDF_Views_Admin::projects'}">{trans 'Forge Management'}</a></li>{/if}<li>
<a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a></li> <a href="{url 'IDF_Views::faq'}" title="{trans 'Help and accessibility features'}">{trans 'Help'}</a></li>

View File

@@ -15,7 +15,7 @@
{block context} {block context}
<p><span class="label{if 'all' == $model_filter} active{/if}"><a href="{url 'IDF_Views_Project::timeline', array($project.shortname, 'all')}">{trans 'All Updates'}</a></span></p> <p><span class="label{if 'all' == $model_filter} active{/if}"><a href="{url 'IDF_Views_Project::timeline', array($project.shortname, 'all')}">{trans 'All Updates'}</a></span></p>
<p><strong>{trans 'Filter by type'}</strong><br /> <p><strong>{trans 'Filter by type'}</strong><br />
{foreach $all_model_filters as $filter_key => $filter_name} {foreach $accessible_model_filters as $filter_key => $filter_name}
{if $filter_key != 'all'} {if $filter_key != 'all'}
<span class="label{if $filter_key == $model_filter} active{/if}"><a href="{url 'IDF_Views_Project::timeline', array($project.shortname, $filter_key)}">{$filter_name}</a></span><br /> <span class="label{if $filter_key == $model_filter} active{/if}"><a href="{url 'IDF_Views_Project::timeline', array($project.shortname, $filter_key)}">{$filter_name}</a></span><br />
{/if} {/if}

View File

@@ -48,7 +48,8 @@
{block context} {block context}
<div class="issue-submit-info"> <div class="issue-submit-info">
<p>{trans 'Be sure to provide a valid email address, as we are sending a validation link by email.'}</p> <p>{trans 'Be sure to provide a valid email address, as we are sending a validation link by email.'}</p>
{aurl 'url', 'IDF_Views::passwordRecoveryAsk'}
<p>{blocktrans}If you have just forgotten your login information, then there is no need to create a new account. Just go <a href="{$url}">here</a> to recover your login name and password.{/blocktrans}</p>
<p><strong>{trans 'Did you know?'}</strong><br /> <p><strong>{trans 'Did you know?'}</strong><br />
{aurl 'url', 'IDF_Views::faq'} {aurl 'url', 'IDF_Views::faq'}
{blocktrans}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 you have troubles, you can <a href="{$url}">let us know about your issues at anytime</a>!{/blocktrans}</p> {blocktrans}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 you have troubles, you can <a href="{$url}">let us know about your issues at anytime</a>!{/blocktrans}</p>

View File

@@ -38,8 +38,7 @@
<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}
{foreach $changes.patches as $filename} {foreach $changes.patches as $filename}
{assign $ndiff = count($diff.files[$filename]['chunks'])} <tr><td><span class="scm-action patched" title="{trans 'modified'}">M</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>{if !empty($diff.files[$filename])}{assign $ndiff = count($diff.files[$filename]['chunks'])} (<a href="#diff-{$filename|md5}">{blocktrans $ndiff}{$ndiff} diff{plural}{$ndiff} diffs{/blocktrans}</a>){/if}</td></tr>
<tr><td><span class="scm-action patched" title="{trans 'modified'}">M</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}">{blocktrans $ndiff}{$ndiff} diff{plural}{$ndiff} diffs{/blocktrans}</a>){/if}</td></tr>
{/foreach} {/foreach}
{foreach $changes.properties as $filename => $properties} {foreach $changes.properties as $filename => $properties}
<tr><td><span class="scm-action property-changed" title="{trans 'properies changed'}">P</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a> <tr><td><span class="scm-action property-changed" title="{trans 'properies changed'}">P</span></td><td><a href="{url 'IDF_Views_Source::tree', array($project.shortname, $commit, $filename)}">{$filename}</a>

View File

@@ -1,5 +1,5 @@
<?php <?php
return array( return array(
'version' => '1.1', 'version' => '1.2-dev',
'revision' => '$Format:%H$', 'revision' => '$Format:%H$',
); );

View File

@@ -1,4 +1,25 @@
<?php <?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) 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 ***** */
include 'IDF/Diff.php'; include 'IDF/Diff.php';

View File

@@ -0,0 +1,176 @@
<?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) 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 ***** */
include 'IDF/Scm/Monotone/BasicIO.php';
class IDF_Scm_Monotone_BasicIOTest extends PHPUnit_Framework_TestCase
{
public function testParse()
{
$stanzas = IDF_Scm_Monotone_BasicIO::parse(null);
$this->assertTrue(is_array($stanzas) && count($stanzas) == 0);
// single stanza, single line, only key
$stanzas = IDF_Scm_Monotone_BasicIO::parse('foo');
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertTrue(!array_key_exists('values', $entry));
// single stanza, single line, key with hash
$stanzas = IDF_Scm_Monotone_BasicIO::parse("foo [0123456789012345678901234567890123456789]");
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertEquals("0123456789012345678901234567890123456789", $entry['hash']);
$this->assertTrue(!array_key_exists('values', $entry));
// single stanza, single line, key with two values
$stanzas = IDF_Scm_Monotone_BasicIO::parse("foo \"bar\n\nbaz\" \"bla\"");
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array("bar\n\nbaz", "bla"), $entry['values']);
// single stanza, single line, key with a value and a hash
$stanzas = IDF_Scm_Monotone_BasicIO::parse("foo \"bar\n\nbaz\" [0123456789012345678901234567890123456789]");
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array("bar\n\nbaz", "0123456789012345678901234567890123456789"), $entry['values']);
// single stanza, two lines, keys with single value / hash
$stanzas = IDF_Scm_Monotone_BasicIO::parse("foo \"bar\"\nbaz [0123456789012345678901234567890123456789]");
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(2, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array("bar"), $entry['values']);
$entry = $stanza[1];
$this->assertEquals('baz', $entry['key']);
$this->assertTrue(!array_key_exists('values', $entry));
$this->assertEquals("0123456789012345678901234567890123456789", $entry['hash']);
// two stanza, one two liner, one one liner
$stanzas = IDF_Scm_Monotone_BasicIO::parse("foo \"bar\"\nbaz [0123456789012345678901234567890123456789]\n\nbla \"blub\"");
$this->assertEquals(2, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(2, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array("bar"), $entry['values']);
$entry = $stanza[1];
$this->assertEquals('baz', $entry['key']);
$this->assertTrue(!array_key_exists('values', $entry));
$this->assertEquals("0123456789012345678901234567890123456789", $entry['hash']);
$stanza = $stanzas[1];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('bla', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array("blub"), $entry['values']);
// (un)escaping tests
$stanzas = IDF_Scm_Monotone_BasicIO::parse('foo "bar\\baz" "bla\"blub"');
$this->assertEquals(1, count($stanzas));
$stanza = $stanzas[0];
$this->assertEquals(1, count($stanza));
$entry = $stanza[0];
$this->assertEquals('foo', $entry['key']);
$this->assertTrue(!array_key_exists('hash', $entry));
$this->assertEquals(array('bar\baz', 'bla"blub'), $entry['values']);
}
public function testCompile()
{
$stanzas = array(
array(
array('key' => 'foo'),
array('key' => 'bar', 'values' => array('one', "two\nthree")),
),
array(
array('key' => 'baz', 'hash' => '0123456789012345678901234567890123456789'),
array('key' => 'blablub', 'values' => array('one"two', 'three\four')),
),
);
$ex =<<<END
foo
bar "one" "two
three"
baz [0123456789012345678901234567890123456789]
blablub "one\"two" "three\\\\four"
END;
$this->assertEquals($ex, IDF_Scm_Monotone_BasicIO::compile($stanzas));
// keys must not be null
$stanzas = array(
array(
array('key' => null, 'values' => array('foo')),
),
);
$thrown = false;
try {
IDF_Scm_Monotone_BasicIO::compile($stanzas);
} catch (IDF_Scm_Exception $e) {
$this->assertRegExp('/^"key" not found in basicio stanza/', $e->getMessage());
$thrown = true;
}
$this->assertTrue($thrown);
// ...nor completly non-existing
$stanzas = array(
array(
array('values' => array('foo')),
),
);
$thrown = false;
try {
IDF_Scm_Monotone_BasicIO::compile($stanzas);
} catch (IDF_Scm_Exception $e) {
$this->assertRegExp('/^"key" not found in basicio stanza/', $e->getMessage());
$thrown = true;
}
$this->assertTrue($thrown);
}
}

View File

@@ -0,0 +1,161 @@
<?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) 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 ***** */
require_once 'IDF/Scm/Monotone/ZipRender.php';
require_once 'IDF/Scm/Monotone/IStdio.php';
class ZipRenderStdioMock implements IDF_Scm_Monotone_IStdio
{
// unused
public function __construct(IDF_Project $project) {}
// unused
public function start() {}
// unused
public function stop() {}
public function exec(array $args, array $options = array())
{
if ($args[0] == 'certs') {
$basicio =<<<END
key [0504aea5d3716d31281171aaecf3a7c227e5545b]
signature "ok"
name "author"
value "joe@home"
trust "trusted"
key [0504aea5d3716d31281171aaecf3a7c227e5545b]
signature "ok"
name "branch"
value "foo"
trust "trusted"
key [0504aea5d3716d31281171aaecf3a7c227e5545b]
signature "ok"
name "changelog"
value "test"
trust "trusted"
key [0504aea5d3716d31281171aaecf3a7c227e5545b]
signature "ok"
name "date"
value "2009-07-06T22:06:27"
trust "trusted"
END;
return $basicio;
}
if ($args[0] == 'get_manifest_of') {
$basicio =<<<END
format_version "1"
dir ""
file "foo"
content [6fcf9dfbd479ed82697fee719b9f8c610a11ff2a]
dir "bar"
file "bar/baz"
content [9063a9f0e032b6239403b719cbbba56ac4e4e45f]
END;
return $basicio;
}
if ($args[0] == 'get_file') {
if ($args[1] == '6fcf9dfbd479ed82697fee719b9f8c610a11ff2a') {
return 'This is foo.';
}
if ($args[1] == '9063a9f0e032b6239403b719cbbba56ac4e4e45f') {
return 'This is baz.';
}
throw new Exception('unexpected id ' . $args[1]);
}
throw new Exception('unexpected command ' . $args[0]);
}
// unused
public function getLastOutOfBandOutput() {}
}
class IDF_Scm_Monotone_ZipRenderTest extends PHPUnit_Framework_TestCase
{
// we can not test header sending with PHP-CLI, as header() is ignored
// in this environment
public function testRender()
{
$mock = new ZipRenderStdioMock(new IDF_Project());
$renderer = new IDF_Scm_Monotone_ZipRender($mock, '97fee719b9f8c610a11ff2a9063a9f0e032b6');
ob_start();
$renderer->render(true);
$zipcontents = ob_get_contents();
ob_end_clean();
// for this version php needs to be compiled with --enable-zip
if (function_exists('zip_open')) {
// yes, I'd rather have used php://memory here, but ZipArchive::open()
// complained that it could not open the stream in question
$filename = tempnam(Pluf::f('tmp_folder', '/tmp'), __CLASS__.'.');
file_put_contents($filename, $zipcontents);
$za = new ZipArchive();
$za->open($filename);
$this->assertEquals(2, $za->numFiles);
// 2009-07-06T22:06:27 - one second
// (don't ask me why, seems to be some quirk in zipstream)
$mtime = 1246910787 - 1;
// foo
$data = $za->statIndex(0);
$this->assertEquals('foo', $data['name']);
$this->assertEquals(12, $data['size']);
$this->assertEquals($mtime, $data['mtime']);
// bar/baz
$data = $za->statIndex(1);
$this->assertEquals('bar/baz', $data['name']);
$this->assertEquals(12, $data['size']);
$this->assertEquals($mtime, $data['mtime']);
$za->close();
unlink($filename);
}
else {
$wrapped_act = wordwrap(
base64_encode($zipcontents),
32, "\n", true
);
$wrapped_exp = wordwrap(
base64_encode(file_get_contents(DATADIR . '/' . __CLASS__ . '/data.zip')),
32, "\n", true
);
$this->assertEquals($wrapped_exp, $wrapped_act);
}
}
}

View File

@@ -1,7 +1,27 @@
<?php <?php
$config_file = dirname(__FILE__) . '/config.php';
if (!file_exists($config_file)) {
die("'test/config.php' does not exist\n");
}
echo ">>> setting paths...\n";
define('SRCDIR', realpath(dirname(__FILE__) . '/../src')); define('SRCDIR', realpath(dirname(__FILE__) . '/../src'));
define('TESTDIR', dirname(__FILE__)); define('TESTDIR', dirname(__FILE__));
define('DATADIR', TESTDIR . '/data'); define('DATADIR', TESTDIR . '/data');
set_include_path(get_include_path() . PATH_SEPARATOR . SRCDIR); set_include_path(get_include_path() . PATH_SEPARATOR . SRCDIR);
$testconfig = require_once $config_file;
if (file_exists($testconfig['db_database'])) {
echo ">>> removing any existing database\n";
unlink($testconfig['db_database']);
}
echo ">>> creating empty test database...\n";
passthru('php ' . PLUF_PATH . '/migrate.php --conf=' . TESTDIR . '/config.php -a -i');
echo ">>> setting up web application...\n";
require 'Pluf.php';
// for PHPUnit 3.5 and beyond this is needed, since it comes with its own class loader
spl_autoload_register('__autoload');
Pluf::start(TESTDIR . '/config.php');

95
test/config.php-dist Normal file
View File

@@ -0,0 +1,95 @@
<?php
/**
* This is a basic test configuration file for unit tests. It mimics most of
* the defaults from IDF/conf/idf.php-dist, but sets up a local sqlite database
* which is purged before each test run and uses a different temporary file
* directory.
*
* You can keep most of these settings as is, but ensure that you set up
* 'pear_path' at least, otherwise you'll get strange errors.
*/
require_once dirname(__FILE__).'/../src/IDF/conf/path.php';
$cfg = array();
$cfg['debug'] = true;
$cfg['debug_scm'] = true;
$cfg['git_repositories'] = '/home/git/repositories/%s.git';
$cfg['git_remote_url'] = 'git://localhost/%s.git';
$cfg['git_write_remote_url'] = 'git@localhost:%s.git';
$cfg['svn_repositories'] = 'file:///home/svn/repositories/%s';
$cfg['svn_remote_url'] = 'http://localhost/svn/%s';
$cfg['mtn_path'] = 'mtn';
$cfg['mtn_opts'] = array('--no-workspace', '--no-standard-rcfiles');
$cfg['mtn_repositories'] = '/home/mtn/repositories/%s.mtn';
$cfg['mtn_remote_url'] = 'mtn://my-host.biz/%s';
$cfg['mtn_db_access'] = 'local';
#$cfg['mtn_confdir'] = '/path/to/dir/tree/';
#$cfg['mtn_confdir_extra'] = array('hooks.d/something.lua')
#$cfg['mtn_usher_conf'] = '/path/to/usher.conf';
$cfg['mercurial_repositories'] = '/home/mercurial/repositories/%s';
#$cfg['mercurial_remote_url'] = 'http://projects.ceondo.com/hg/%s';
$cfg['admins'] = array(array('Admin', 'you@example.com'),);
$cfg['send_emails'] = true;
$cfg['mail_backend'] = 'smtp';
$cfg['mail_host'] = 'localhost';
$cfg['mail_port'] = 25;
$cfg['idf_base'] = '/index.php';
$cfg['url_base'] = 'http://localhost';
$cfg['url_media'] = 'http://localhost/media';
$cfg['url_upload'] = 'http://localhost/media/upload';
$cfg['upload_path'] = '/home/www/indefero/www/media/upload';
$cfg['upload_issue_path'] = '/home/www/indefero/attachments';
$cfg['secret_key'] = '';
$cfg['from_email'] = 'sender@example.com';
$cfg['bounce_email'] = 'no-reply@example.com';
$cfg['tmp_folder'] = dirname(__FILE__) . '/tmp';
$cfg['db_login'] = 'www';
$cfg['db_password'] = '';
$cfg['db_server'] = '';
$cfg['db_version'] = '5.1';
$cfg['db_table_prefix'] = 'indefero_';
$cfg['db_engine'] = 'SQLite';
$cfg['db_database'] = dirname(__FILE__).'/test.db';
# $cfg['idf_extra_upload_ext'] = 'ext1 ext2';
# $cfg['max_upload_size'] = 2097152;
# $cfg['time_zone'] = 'Europe/Berlin';
$cfg['pear_path'] = '/usr/share/php';
$cfg['login_success_url'] = $cfg['url_base'].$cfg['idf_base'];
$cfg['after_logout_page'] = $cfg['url_base'].$cfg['idf_base'];
$cfg['cache_engine'] = 'Pluf_Cache_File';
$cfg['cache_timeout'] = 300;
$cfg['cache_file_folder'] = $cfg['tmp_folder'].'/cache';
$cfg['template_folders'] = array(dirname(__FILE__).'/../src/IDF/templates');
$cfg['installed_apps'] = array('Pluf', 'IDF');
$cfg['pluf_use_rowpermission'] = true;
$cfg['middleware_classes'] = array(
'Pluf_Middleware_Csrf',
'Pluf_Middleware_Session',
'IDF_Middleware',
'Pluf_Middleware_Translation',
);
$cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor');
$cfg['idf_views'] = dirname(__FILE__).'/../src/IDF/conf/urls.php';
$cfg['languages'] = array('en', 'fr', 'de', 'es_ES');
$cfg['allowed_scm'] = array(
'git' => 'IDF_Scm_Git',
'svn' => 'IDF_Scm_Svn',
'mercurial' => 'IDF_Scm_Mercurial',
'mtn' => 'IDF_Scm_Monotone',
);
# $cfg['git_core_quotepath'] = false;
# $cfg['idf_strong_key_check'] = false;
# $cfg['idf_mimetypes_db'] = '/etc/mime.types';
# $cfg['idf_extra_text_ext'] = 'ext1 ext2 ext3';
# $cfg['idf_exec_cmd_prefix'] = '/usr/bin/env -i ';
# $cfg['svn_path'] = 'svn';
# $cfg['svnlook_path'] = 'svnlook';
# $cfg['svnadmin_path'] = 'svnadmin';
# $cfg['hg_path'] = 'hg';
# $cfg['git_path'] = 'git';
# $cfg['idf_no_size_check'] = false;
return $cfg;

Binary file not shown.

View File

@@ -327,12 +327,27 @@ h1.title {
} }
h1.project-title { h1.project-title {
font-weight: normal;
float: right; float: right;
z-index: 100; font-weight: normal;
text-align: right; margin-top: 0.5em;
padding-right: 5px;
margin-bottom: 0; margin-bottom: 0;
text-align: right;
z-index: 100;
position: relative;
padding-right: 3px;
}
h1.project-title img.logo {
max-height: 22px;
vertical-align: text-bottom;
padding-left: 7px;
}
h1.project-title img.lock {
width: 12px;
position: absolute;
right: 1px;
top: 12px;
} }
.note { .note {
@@ -871,8 +886,21 @@ ol > li {
margin: 7px; margin: 7px;
white-space: nowrap; white-space: nowrap;
font-size: 0.95em; font-size: 0.95em;
list-style-type: square; list-style-type: none;
list-style-position: inside; position: relative;
}
#project-list ul li img.logo {
max-height: 16px;
vertical-align: text-bottom;
padding-right: 5px;
}
#project-list ul li img.lock {
position: absolute;
width: 9px;
left: 9px;
top: 9px;
} }
#project-list ul li:first-child { #project-list ul li:first-child {
@@ -1043,3 +1071,27 @@ span.scm-action.property-changed {
#stats td { #stats td {
padding: .2em; padding: .2em;
} }
/*
* Project list on index
*/
div.p-list-img {
float: left;
height: 32px;
margin-top: .5em;
}
div.p-list-prj {
float: left;
margin: .5em 0 .5em .8em;
}
div.p-list-prj p {
margin: 0px;
}
div.p-list-private {
bottom: 16px;
right: -3px;
position: relative;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB