Merge branch 'release-1.1' into develop
This commit is contained in:
commit
7af7ef8357
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@ -0,0 +1 @@
|
||||
src/IDF/version.php export-subst
|
52
AUTHORS
52
AUTHORS
@ -1,32 +1,40 @@
|
||||
InDefero was originally created during summer 2008
|
||||
by Loïc d'Anterroches with the support of Céondo Ltd.
|
||||
|
||||
Much appreciated contributors:
|
||||
Much appreciated contributors (in alphabetical order):
|
||||
|
||||
Nicolas Lassalle <http://www.beroot.org/> - Subversion support
|
||||
bohwaz <http://bohwaz.net/>
|
||||
Benjamin Jorand <benjamin.jorand@gmail.com> - Mercurial support
|
||||
Baptiste Michaud <bactisme@gmail.com> - Subversion synchronization
|
||||
Julien Issler
|
||||
Adrien Bustany <madcat@mymadcat.com>
|
||||
Andrew Nguyen <andrew-git-indefero@na-consulting.net>
|
||||
Baptiste Durand-Bret <bathizte@ozazar.org>
|
||||
Baptiste Michaud <bactisme@gmail.com> - Subversion sync
|
||||
Benjamin Jorand <benjamin.jorand@gmail.com> - Mercurial support
|
||||
Brenda Wallace <shiny@cpan.org>
|
||||
Brian Armstrong <brianar>
|
||||
Charles Melbye <charlie@yourwiki.net>
|
||||
Ciaran Gultnieks <ciaran@ciarang.com>
|
||||
David Feeney <davidf>
|
||||
Denis Kot <denis.kot@gmail.com> - Russian translation
|
||||
Dmitry Dulepov <dmitryd>
|
||||
Fernando Sayago Gil <mikados.mikados@gmail.com> - Spanish translation
|
||||
Jakub Viták <mainiak@gmail.com> - Czech translation
|
||||
Janez Troha <http://www.dz0ny.info> - Slovenian translation
|
||||
Jerry <lxb429@gmail.com> - Chinese translation
|
||||
Julien Issler <julien@issler.net>
|
||||
Ludovic Bellière <xrogaan>
|
||||
Manuel Eidenberger <eidenberger@gmail.com>
|
||||
Ciaran Gultnieks
|
||||
Matthew Dawson <mjd>
|
||||
Matías Halles <matias@halles.cl>
|
||||
Mehdi Kabab <http://pioupioum.fr/>
|
||||
Sindre R. Myren
|
||||
Nicolas Lassalle <nicolas@beroot.org> - Subversion support
|
||||
Patrick Georgi <patrick.georgi@coresystems.de>
|
||||
Adrien Bustany
|
||||
Charles Melbye
|
||||
Baptiste Durand-Bret
|
||||
Andrew Nguyen
|
||||
David Feeney
|
||||
Denis Kot <denis.kot@gmail.com>
|
||||
Samuel Suther
|
||||
Ludovic Bellière
|
||||
Brian Armstrong
|
||||
Raphaël Emourgeon
|
||||
Jakub Viták
|
||||
Vladimir Solomatin
|
||||
William Martin <wysman@gmail.com>
|
||||
Thomas Keller <me@thomaskeller.biz>
|
||||
Raphaël Emourgeon <raphael>
|
||||
Samuel Suther <info@suther.de> - German translation
|
||||
Sindre R. Myren <sindrero@stud.ntnu.no>
|
||||
Thomas Keller <me@thomaskeller.biz> - Monotone support
|
||||
Vladimir Solomatin <slash>
|
||||
William Martin <william.martin@lcpc.fr>
|
||||
Xavier Brochard <xavier@alternatif.org>
|
||||
bohwaz <http://bohwaz.net/>
|
||||
|
||||
And all the nice users who spent time reporting issues and promoting
|
||||
the project. The project could not live without them.
|
||||
|
@ -104,12 +104,13 @@ without first talking to us.
|
||||
|
||||
## I am a translator
|
||||
|
||||
We currently use (transifex)[http://trac.transifex.org] to help our
|
||||
users to translate indefero. You don't have to use it, but it's an
|
||||
easy way to do the job. You can visit the indefero page at transifex
|
||||
here : http://www.transifex.net/projects/p/indefero/c/indefero/
|
||||
We currently use [transifex](http://trac.transifex.org) to help our
|
||||
users translate indefero. You don't have to use it, but it's an easy
|
||||
way to do the job. You can visit the indefero page at transifex here:
|
||||
|
||||
http://www.transifex.net/projects/p/indefero/
|
||||
|
||||
Please understand that your changes will not be commited instantly,
|
||||
but are sent to the maintainers e-mails before. Then, your changes
|
||||
will not be in the main repository until da-loic push the changes. In
|
||||
that way, try to do big changes with less submissions.
|
||||
will not be in the main repository until the maintainer pushs the
|
||||
changes. In that way, try to do big changes with less submissions.
|
||||
|
61
Makefile
61
Makefile
@ -26,19 +26,20 @@
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@printf "Rules for generate tarball :\n"
|
||||
@printf "Rules for generating distributable files :\n"
|
||||
@for b in `git branch | sed "s/^. //g"`; do \
|
||||
printf "\t"$$b"_tarball - Generate a zip archive of the "$$b" branch.\n"; \
|
||||
printf "\t"$$b"-zipfile - Generate a zip archive of the "$$b" branch.\n"; \
|
||||
done
|
||||
@printf "\nRules for internationnalization :\n";
|
||||
@printf "\tpot-update - Update the POT file from HTML template and PHP source, then merge it with PO file.\n"
|
||||
@printf "\tpot-push - Send the POT file on transifex server.\n"
|
||||
@printf "\tpo-update - Merge POT file into PO file. POT is not regenerated.\n"
|
||||
@printf "\tpo-push - Send the all PO file on transifex server.\n"
|
||||
@printf "\tpo-pull - Get all PO file from transifex server.\n"
|
||||
@printf "\nRules for internationalization :\n";
|
||||
@printf "\tpot-update - Update the POT file from HTML templates and PHP sources, then merge it with PO file.\n"
|
||||
@printf "\tpot-push - Send the POT file to the transifex server.\n"
|
||||
@printf "\tpo-update - Merge the POT file into the PO file. The POT is not regenerated.\n"
|
||||
@printf "\tpo-push - Send the all PO files to the transifex server.\n"
|
||||
@printf "\tpo-pull - Get all PO files from the transifex server.\n"
|
||||
@printf "\tpo-stats - Show translation statistics of all PO files.\n"
|
||||
|
||||
#
|
||||
# Internationnalization rule, POT & PO file manipulation
|
||||
# Internationalization rule, POT & PO file manipulation
|
||||
#
|
||||
.PHONY: pluf_path
|
||||
pluf_path:
|
||||
@ -60,7 +61,8 @@ pot-update: pluf_path
|
||||
@cd src; php $(PLUF_PATH)/extracttemplates.php IDF/conf/idf.php IDF/gettexttemplates
|
||||
@cd src; for phpfile in `find . -iname "*.php"`; do \
|
||||
printf "Parsing file : "$$phpfile"\n"; \
|
||||
xgettext -o idf.pot -p ./IDF/locale/ --from-code=UTF-8 -j --keyword --keyword=__ --keyword=_n:1,2 -L PHP $$phpfile ; \
|
||||
xgettext -o idf.pot -p ./IDF/locale/ --from-code=UTF-8 -j \
|
||||
--keyword --keyword=__ --keyword=_n:1,2 -L PHP $$phpfile ; \
|
||||
done
|
||||
# Remove tmp folder
|
||||
rm -Rf src/IDF/gettexttemplates
|
||||
@ -90,14 +92,14 @@ check-tx-config:
|
||||
printf "source_file = src/IDF/locale/idf.pot\n" >> .tx/config; \
|
||||
printf "source_lang = en\n" >> .tx/config; \
|
||||
fi
|
||||
@if [ ! -e $(HOME)/.transifexrc ]; then \
|
||||
@if [ ! -e $(HOME)/.transifexrc ]; then \
|
||||
touch $(HOME)/.transifexrc; \
|
||||
printf "[http://www.transifex.net]\n" >> $(HOME)/.transifexrc; \
|
||||
printf "[http://www.transifex.net]\n" >> $(HOME)/.transifexrc; \
|
||||
printf "username = \n" >> $(HOME)/.transifexrc; \
|
||||
printf "token = \n" >> $(HOME)/.transifexrc; \
|
||||
printf "token = \n" >> $(HOME)/.transifexrc; \
|
||||
printf "password = \n" >> $(HOME)/.transifexrc; \
|
||||
printf "hostname = http://www.transifex.net\n" >> $(HOME)/.transifexrc; \
|
||||
printf "You must edit the file ~/.transifexrc to setup your transifex account (login & password) !\n"; \
|
||||
printf "hostname = http://www.transifex.net\n" >> $(HOME)/.transifexrc; \
|
||||
printf "You must edit the file ~/.transifexrc to setup your transifex account (login & password) !\n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
@ -108,13 +110,32 @@ po-push: check-tx-config
|
||||
@tx push -t
|
||||
|
||||
po-pull: check-tx-config
|
||||
# Save PO
|
||||
@for pofile in `ls src/IDF/locale/*/idf.po`; do \
|
||||
cp $$pofile $$pofile".save"; \
|
||||
done
|
||||
# Get new one
|
||||
@tx pull -a
|
||||
# Merge Transifex PO into local PO (so fuzzy entry is correctly saved)
|
||||
@for pofile in `ls src/IDF/locale/*/idf.po`; do \
|
||||
msgmerge -U $$pofile".save" $$pofile; \
|
||||
rm -f $$pofile; \
|
||||
mv $$pofile".save" $$pofile; \
|
||||
done
|
||||
|
||||
po-stats:
|
||||
@msgfmt --statistics -v src/IDF/locale/idf.pot
|
||||
@for pofile in `ls src/IDF/locale/*/idf.po`; do \
|
||||
msgfmt --statistics -v $$pofile; \
|
||||
done
|
||||
|
||||
#
|
||||
# Generic rule to build a tarball of indefero for a specified branch
|
||||
# ex: make master_tarball
|
||||
# make dev_tarball
|
||||
# Generic rule to build a zipfile of indefero for a specified branch
|
||||
# ex: make master_zipfile
|
||||
# make develop_zipfile
|
||||
#
|
||||
%_tarball:
|
||||
@git archive --format=zip --prefix="indefero/" $(@:_tarball=) > indefero-$(@:_tarball=)-`git log $(@:_tarball=) -n 1 --pretty=format:%H`.zip
|
||||
%-zipfile:
|
||||
@git archive --format=zip --prefix="indefero/" $(@:-zipfile=) \
|
||||
> indefero-$(@:-zipfile=)-`git log $(@:-zipfile=) -n 1 \
|
||||
--pretty=format:%h`.zip
|
||||
|
||||
|
80
NEWS.mdtext
Normal file
80
NEWS.mdtext
Normal file
@ -0,0 +1,80 @@
|
||||
# InDefero 1.1 - Sun Mar 20 11:44 2011 UTC
|
||||
|
||||
## New Features
|
||||
|
||||
* _Version control_:
|
||||
- Support for the monotone Version Control system (see [[InstallationScmMonotone]])
|
||||
- Display detailed changeset information in the commit details (git, mtn) (issue 544)
|
||||
- Show branch in the commit details (git, mtn, hg) (issue 450)
|
||||
- Render branch and tag names in a popup and make them filterable (git, hg, mtn) (issue 601)
|
||||
|
||||
* _Issue tracking_:
|
||||
- Forge-wide and per-project watch lists of starred issues (issue 589)
|
||||
- Configure a default issue template for each project (issues 212 and 540)
|
||||
- Pick default issue labels from the configured project settings (issue 556)
|
||||
- Navigate to a preceding / following issue in the issue detail view
|
||||
- Many new text syntaxes to auto-link revisions (see [[AutomaticLinks]], issue 569)
|
||||
|
||||
* _Documentation wiki_:
|
||||
- Automatically create a table of contents on wiki pages (issue 350)
|
||||
- Allow the usage of text labels for Wiki text links (issue 456)
|
||||
|
||||
* _Other_:
|
||||
- Enhanced user profile page (issue 510)
|
||||
- Manage multiple (commit) emails in the account settings (issues 136 and 500)
|
||||
- Filter the timeline and its feed by item type (issue 543)
|
||||
- Add multiple email addresses for project notifications (issue 372)
|
||||
- Direct links to other projects via the new `Project List` dropdown
|
||||
- InDefero gained a favicon (issue 594)
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fix `Need SSH_ORIGINAL_COMMAND in environment` error for git sync (issue 198)
|
||||
- Added an option to disable lengthy project size calculation in the forge (issue 403)
|
||||
- Fix a problem when deleting an orphaned git repository (issue 467)
|
||||
- Ignore XML parsing problems when trying to retrieve commit messages for svn (issues 469 and 518)
|
||||
- Sort the project list by the display name of the project (issue 477)
|
||||
- Project creation form now has a short description field as well (issue 479)
|
||||
- Add more file extensions supported by our in-tree prettify version (issues 490 and 567)
|
||||
- Improve the parsing of hg's log output (issues 507 and 508)
|
||||
- Do not clean `<ins>` and `<del>` HTML markup from user input (issue 509)
|
||||
- Improve HTML validation by switching from `strict` to `transitional` DOCTYPE (issue 511)
|
||||
- Properly handle git commits without a changelog title (issue 520)
|
||||
- Improve BSD compatibility in shell scripts (issue 526)
|
||||
- Properly render inner whitespaces in viewed issue attachments (issue 528)
|
||||
- Support for uploading SSH keys without optional comment (issue 531)
|
||||
- Recognize irc: and git: protocols in Markdown renderer (issue 546)
|
||||
- New config option `git_core_quotepath` to handle non-ASCII git file names (issue 553)
|
||||
- Ensured that active views are rendered in the menu as such (issue 555)
|
||||
- Add CSS for nested and mixed ordered and unordered lists (issue 557)
|
||||
- Directories are now sorted before files in source tree views (issue 573)
|
||||
- File attachments now have explicit view and download links in issue views (issue 575)
|
||||
- Display anonymous access URL when user has no SSH key registered (issue 588)
|
||||
- Improve the rendering of tag lists in issue views (issue 591)
|
||||
- Improved error page when a commit or branch was not found (issue 609)
|
||||
- Disable browser autocomplete of password fields in the account settings (issue 616)
|
||||
- Improvements in the automatic linker parser (issue 618)
|
||||
- The `createIssue` API method did not check the API authentication (issue 619)
|
||||
- Reduce the memory footprint and compatibility of the internal diff parser (issues 627 and 633)
|
||||
- Print the git branches and tags in bold which contain the currently displayed revision
|
||||
|
||||
## Documentation
|
||||
|
||||
- Document how to contribute to Indefero in `CONTRIBUTE.mdtext` (issue 486)
|
||||
- Note possible problems with mbstring.func_overload in `INSTALL.mdtext` (issue 481)
|
||||
- Improve links to Markdown documentation (issue 489)
|
||||
- Explain purpose of `idf_strong_key_check` in `idf.php-dist` (issue 516)
|
||||
|
||||
## Translations
|
||||
|
||||
- Spanish translation added
|
||||
- Started with a Simplified Chinese translation (issue 521)
|
||||
- Started with a Russian translation
|
||||
- Updates and fixes to the French translation (issue 574)
|
||||
- Updates and fixes to the German translation
|
||||
- English source language has been improved (issues 441, 478, and 631)
|
||||
|
||||
# InDefero 1.0 - Tue Apr 20 07:00 2010 UTC
|
||||
|
||||
First stable release.
|
||||
|
15
phpunit.xml
Normal file
15
phpunit.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<phpunit backupGlobals="true"
|
||||
backupStaticAttributes="false"
|
||||
bootstrap="test/bootstrap.php"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
strict="false"
|
||||
verbose="true">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="Everything">
|
||||
<directory>test/IDF/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
207
src/IDF/Diff.php
207
src/IDF/Diff.php
@ -27,17 +27,17 @@
|
||||
*/
|
||||
class IDF_Diff
|
||||
{
|
||||
public $repo = '';
|
||||
public $diff = '';
|
||||
public $path_strip_level = 0;
|
||||
protected $lines = array();
|
||||
|
||||
public $files = array();
|
||||
|
||||
public function __construct($diff, $repo='')
|
||||
public function __construct($diff, $path_strip_level = 0)
|
||||
{
|
||||
$this->repo = $repo;
|
||||
$this->diff = $diff;
|
||||
$this->lines = preg_split("/\015\012|\015|\012/", $diff);
|
||||
$this->path_strip_level = $path_strip_level;
|
||||
// this works because in unified diff format even empty lines are
|
||||
// either prefixed with a '+', '-' or ' '
|
||||
$this->lines = preg_split("/\015\012|\015|\012/", $diff, -1, PREG_SPLIT_NO_EMPTY);
|
||||
}
|
||||
|
||||
public function parse()
|
||||
@ -49,118 +49,95 @@ class IDF_Diff
|
||||
$files = array();
|
||||
$indiff = false; // Used to skip the headers in the git patches
|
||||
$i = 0; // Used to skip the end of a git patch with --\nversion number
|
||||
foreach ($this->lines as $line) {
|
||||
$i++;
|
||||
if (0 === strpos($line, '--') and isset($this->lines[$i])
|
||||
and preg_match('/^\d+\.\d+\.\d+\.\d+$/', $this->lines[$i])) {
|
||||
break;
|
||||
$diffsize = count($this->lines);
|
||||
while ($i < $diffsize) {
|
||||
// look for the potential beginning of a diff
|
||||
if (substr($this->lines[$i], 0, 4) !== '--- ') {
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, 'diff --git a')) {
|
||||
$current_file = self::getFile($line);
|
||||
$files[$current_file] = array();
|
||||
$files[$current_file]['chunks'] = array();
|
||||
$files[$current_file]['chunks_def'] = array();
|
||||
$current_chunk = 0;
|
||||
$indiff = true;
|
||||
|
||||
// we're inside a diff candiate
|
||||
$oldfileline = $this->lines[$i++];
|
||||
$newfileline = $this->lines[$i++];
|
||||
if (substr($newfileline, 0, 4) !== '+++ ') {
|
||||
// not a valid diff here, move on
|
||||
continue;
|
||||
} else if (preg_match('#^diff -r [^\s]+ -r [^\s]+ (.+)$#', $line, $matches)) {
|
||||
$current_file = $matches[1];
|
||||
$files[$current_file] = array();
|
||||
$files[$current_file]['chunks'] = array();
|
||||
$files[$current_file]['chunks_def'] = array();
|
||||
$current_chunk = 0;
|
||||
$indiff = true;
|
||||
continue;
|
||||
} else if (!$indiff && 0 === strpos($line, '=========')) {
|
||||
// ignore pseudo stanzas with a hint of a binary file
|
||||
if (preg_match("/^# (.+) is binary/", $this->lines[$i]))
|
||||
continue;
|
||||
// by default always use the new name of a possibly renamed file
|
||||
$current_file = self::getMtnFile($this->lines[$i+1]);
|
||||
// mtn 0.48 and newer set /dev/null as file path for dropped files
|
||||
// so we display the old name here
|
||||
if ($current_file == "/dev/null") {
|
||||
$current_file = self::getMtnFile($this->lines[$i]);
|
||||
}
|
||||
|
||||
// use new file name by default
|
||||
preg_match("/^\+\+\+ ([^\t]+)/", $newfileline, $m);
|
||||
$current_file = $m[1];
|
||||
if ($current_file === '/dev/null') {
|
||||
// except if it's /dev/null, use the old one instead
|
||||
// eg. mtn 0.48 and newer
|
||||
preg_match("/^--- ([^\t]+)/", $oldfileline, $m);
|
||||
$current_file = $m[1];
|
||||
}
|
||||
if ($this->path_strip_level > 0) {
|
||||
$fileparts = explode('/', $current_file, $this->path_strip_level+1);
|
||||
$current_file = array_pop($fileparts);
|
||||
}
|
||||
$current_chunk = 0;
|
||||
$files[$current_file] = array();
|
||||
$files[$current_file]['chunks'] = array();
|
||||
$files[$current_file]['chunks_def'] = array();
|
||||
|
||||
while ($i < $diffsize && substr($this->lines[$i], 0, 3) === '@@ ') {
|
||||
$elems = preg_match('/@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@.*/',
|
||||
$this->lines[$i++], $results);
|
||||
if ($elems != 1) {
|
||||
// hunk is badly formatted
|
||||
break;
|
||||
}
|
||||
if ($current_file == "/dev/null") {
|
||||
throw new Exception(
|
||||
"could not determine path from diff"
|
||||
);
|
||||
}
|
||||
$files[$current_file] = array();
|
||||
$files[$current_file]['chunks'] = array();
|
||||
$files[$current_file]['chunks_def'] = array();
|
||||
$current_chunk = 0;
|
||||
$indiff = true;
|
||||
continue;
|
||||
} else if (0 === strpos($line, 'Index: ')) {
|
||||
$current_file = self::getSvnFile($line);
|
||||
$files[$current_file] = array();
|
||||
$files[$current_file]['chunks'] = array();
|
||||
$files[$current_file]['chunks_def'] = array();
|
||||
$current_chunk = 0;
|
||||
$indiff = true;
|
||||
continue;
|
||||
}
|
||||
if (!$indiff) {
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, '@@ ')) {
|
||||
$files[$current_file]['chunks_def'][] = self::getChunk($line);
|
||||
$delstart = $results[1];
|
||||
$dellines = $results[2] === '' ? 1 : $results[2];
|
||||
$addstart = $results[3];
|
||||
$addlines = $results[4] === '' ? 1 : $results[4];
|
||||
|
||||
$files[$current_file]['chunks_def'][] = array(
|
||||
array($delstart, $dellines), array($addstart, $addlines)
|
||||
);
|
||||
$files[$current_file]['chunks'][] = array();
|
||||
|
||||
while ($i < $diffsize && ($addlines >= 0 || $dellines >= 0)) {
|
||||
$linetype = $this->lines[$i] != '' ? $this->lines[$i][0] : ' ';
|
||||
switch ($linetype) {
|
||||
case ' ':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array($delstart, $addstart, substr($this->lines[$i++], 1));
|
||||
$dellines--;
|
||||
$addlines--;
|
||||
$delstart++;
|
||||
$addstart++;
|
||||
break;
|
||||
case '+':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array('', $addstart, substr($this->lines[$i++], 1));
|
||||
$addlines--;
|
||||
$addstart++;
|
||||
break;
|
||||
case '-':
|
||||
$files[$current_file]['chunks'][$current_chunk][] =
|
||||
array($delstart, '', substr($this->lines[$i++], 1));
|
||||
$dellines--;
|
||||
$delstart++;
|
||||
break;
|
||||
case '\\':
|
||||
// ignore newline handling for now, see issue 636
|
||||
$i++;
|
||||
continue;
|
||||
default:
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
$current_chunk++;
|
||||
$lline = $files[$current_file]['chunks_def'][$current_chunk-1][0][0];
|
||||
$rline = $files[$current_file]['chunks_def'][$current_chunk-1][1][0];
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, '---') or 0 === strpos($line, '+++')) {
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, '-')) {
|
||||
$files[$current_file]['chunks'][$current_chunk-1][] = array($lline, '', substr($line, 1));
|
||||
$lline++;
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, '+')) {
|
||||
$files[$current_file]['chunks'][$current_chunk-1][] = array('', $rline, substr($line, 1));
|
||||
$rline++;
|
||||
continue;
|
||||
}
|
||||
if (0 === strpos($line, ' ')) {
|
||||
$files[$current_file]['chunks'][$current_chunk-1][] = array($lline, $rline, substr($line, 1));
|
||||
$rline++;
|
||||
$lline++;
|
||||
continue;
|
||||
}
|
||||
if ($line == '') {
|
||||
$files[$current_file]['chunks'][$current_chunk-1][] = array($lline, $rline, $line);
|
||||
$rline++;
|
||||
$lline++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$this->files = $files;
|
||||
return $files;
|
||||
}
|
||||
|
||||
public static function getFile($line)
|
||||
{
|
||||
$line = substr(trim($line), 10);
|
||||
$n = (int) strlen($line)/2;
|
||||
return trim(substr($line, 3, $n-3));
|
||||
}
|
||||
|
||||
public static function getSvnFile($line)
|
||||
{
|
||||
return substr(trim($line), 7);
|
||||
}
|
||||
|
||||
public static function getMtnFile($line)
|
||||
{
|
||||
preg_match("/^[+-]{3} ([^\t]+)/", $line, $m);
|
||||
return $m[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the html version of a parsed diff.
|
||||
*/
|
||||
@ -197,7 +174,6 @@ class IDF_Diff
|
||||
return Pluf_Template::markSafe($out);
|
||||
}
|
||||
|
||||
|
||||
public static function padLine($line)
|
||||
{
|
||||
$line = str_replace("\t", ' ', $line);
|
||||
@ -210,19 +186,6 @@ class IDF_Diff
|
||||
return str_repeat(' ', $i).substr($line, $i);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array array(array(start, n), array(start, n))
|
||||
*/
|
||||
public static function getChunk($line)
|
||||
{
|
||||
$elts = explode(' ', $line);
|
||||
$res = array();
|
||||
for ($i=1;$i<3;$i++) {
|
||||
$res[] = explode(',', trim(substr($elts[$i], 1)));
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Review patch.
|
||||
*
|
||||
@ -347,7 +310,6 @@ class IDF_Diff
|
||||
return $nnew_chunks;
|
||||
}
|
||||
|
||||
|
||||
public function renderCompared($chunks, $filename)
|
||||
{
|
||||
$fileinfo = IDF_FileUtil::getMimeType($filename);
|
||||
@ -381,6 +343,5 @@ class IDF_Diff
|
||||
$i++;
|
||||
}
|
||||
return Pluf_Template::markSafe($out);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ class IDF_Form_Admin_ProjectCreate extends Pluf_Form
|
||||
// we accept only starting with http(s):// to avoid people
|
||||
// trying to access the local filesystem.
|
||||
if (!preg_match('#^(http|https)://#', $url)) {
|
||||
throw new Pluf_Form_Invalid(__('Only a remote repository available throught http or https are allowed. For example "http://somewhere.com/svn/trunk".'));
|
||||
throw new Pluf_Form_Invalid(__('Only a remote repository available through HTTP or HTTPS is allowed. For example "http://somewhere.com/svn/trunk".'));
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ class IDF_Form_Admin_ProjectUpdate extends Pluf_Form
|
||||
$mtn_master_branch)) {
|
||||
throw new Pluf_Form_Invalid(__(
|
||||
'The master branch is empty or contains illegal characters, '.
|
||||
'please use only letters, digits, dashs and dots as separators.'
|
||||
'please use only letters, digits, dashes and dots as separators.'
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ class IDF_Form_Admin_UserCreate extends Pluf_Form
|
||||
array('required' => true,
|
||||
'label' => __('Email'),
|
||||
'initial' => '',
|
||||
'help_text' => __('Double check the email address as the password is directly sent to the user.'),
|
||||
'help_text' => __('Double check the email address as the password is sent directly to the user.'),
|
||||
));
|
||||
|
||||
$this->fields['language'] = new Pluf_Form_Field_Varchar(
|
||||
|
@ -78,7 +78,7 @@ class IDF_Form_Admin_UserUpdate extends Pluf_Form
|
||||
'label' => __('Password'),
|
||||
'initial' => '',
|
||||
'widget' => 'Pluf_Form_Widget_PasswordInput',
|
||||
'help_text' => Pluf_Template::markSafe(__('Leave blank if you do not want to change the password.').'<br />'.__('The password must be hard for other people to find it, but easy for the user to remember.')),
|
||||
'help_text' => Pluf_Template::markSafe(__('Leave blank if you do not want to change the password.').'<br />'.__('The password must be hard for other people to guess, but easy for the user to remember.')),
|
||||
'widget_attrs' => array(
|
||||
'maxlength' => 50,
|
||||
'size' => 15,
|
||||
@ -161,7 +161,7 @@ class IDF_Form_Admin_UserUpdate extends Pluf_Form
|
||||
'label' => __('Staff'),
|
||||
'initial' => $this->user->staff,
|
||||
'widget' => 'Pluf_Form_Widget_CheckboxInput',
|
||||
'help_text' => __('If you give staff rights to a user, you really need to trust him.'),
|
||||
'help_text' => __('If you give staff rights to a user, you really need to trust them.'),
|
||||
));
|
||||
}
|
||||
|
||||
@ -173,7 +173,7 @@ class IDF_Form_Admin_UserUpdate extends Pluf_Form
|
||||
'initial' => $this->user->active,
|
||||
'widget' => 'Pluf_Form_Widget_CheckboxInput',
|
||||
'widget_attrs' => $attrs,
|
||||
'help_text' => __('If the user is not getting the confirmation email or is abusing the system, you can directly enable or disable his account here.'),
|
||||
'help_text' => __('If the user is not getting the confirmation email or is abusing the system, you can directly enable or disable their account here.'),
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -77,7 +77,7 @@ Maintainability = Hinders future changes';
|
||||
{
|
||||
$this->fields['labels_issue_template'] = new Pluf_Form_Field_Varchar(
|
||||
array('required' => false,
|
||||
'label' => __('Define an issue template to hint the reporter to provide certain information'),
|
||||
'label' => __('Define an issue template to hint to the reporter to provide certain information'),
|
||||
'initial' => self::init_template,
|
||||
'widget_attrs' => array('rows' => 7,
|
||||
'cols' => 75),
|
||||
|
@ -42,7 +42,7 @@ class IDF_Form_Register extends Pluf_Form
|
||||
'max_length' => 15,
|
||||
'min_length' => 3,
|
||||
'initial' => $login,
|
||||
'help_text' => __('The login must be between 3 and 15 characters long and contains only letters and digits.'),
|
||||
'help_text' => __('The login must be between 3 and 15 characters long and contain only letters and digits.'),
|
||||
'widget_attrs' => array(
|
||||
'maxlength' => 15,
|
||||
'size' => 10,
|
||||
@ -52,7 +52,7 @@ class IDF_Form_Register extends Pluf_Form
|
||||
array('required' => true,
|
||||
'label' => __('Your email'),
|
||||
'initial' => '',
|
||||
'help_text' => __('We will never send you any unsolicited emails. We hate spams too!'),
|
||||
'help_text' => __('We will never send you any unsolicited emails. We hate spam too!'),
|
||||
));
|
||||
|
||||
$this->fields['terms'] = new Pluf_Form_Field_Boolean(
|
||||
@ -94,7 +94,7 @@ class IDF_Form_Register extends Pluf_Form
|
||||
{
|
||||
$this->cleaned_data['email'] = mb_strtolower(trim($this->cleaned_data['email']));
|
||||
if (Pluf::factory('IDF_EmailAddress')->get_user_for_email_address($this->cleaned_data['email']) != null) {
|
||||
throw new Pluf_Form_Invalid(sprintf(__('The email "%s" is already used. If you need, click on the help link to recover your password.'), $this->cleaned_data['email']));
|
||||
throw new Pluf_Form_Invalid(sprintf(__('The email "%s" is already used. If you need to, click on the help link to recover your password.'), $this->cleaned_data['email']));
|
||||
}
|
||||
return $this->cleaned_data['email'];
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ class IDF_Form_RegisterConfirmation extends Pluf_Form
|
||||
'label' => __('Your password'),
|
||||
'initial' => '',
|
||||
'widget' => 'Pluf_Form_Widget_PasswordInput',
|
||||
'help_text' => __('Your password must be hard for other people to find it, but easy for you to remember.'),
|
||||
'help_text' => __('Your password must be hard for other people to guess, but easy for you to remember.'),
|
||||
'widget_attrs' => array(
|
||||
'maxlength' => 50,
|
||||
'size' => 15,
|
||||
|
@ -64,6 +64,8 @@ class IDF_Form_ReviewFileComment extends Pluf_Form
|
||||
if ($this->user->hasPerm('IDF.project-owner', $this->project)
|
||||
or $this->user->hasPerm('IDF.project-member', $this->project)) {
|
||||
$this->show_full = true;
|
||||
} else {
|
||||
$this->show_full = false;
|
||||
}
|
||||
if ($this->show_full) {
|
||||
$this->fields['summary'] = new Pluf_Form_Field_Varchar(
|
||||
|
@ -83,7 +83,7 @@ class IDF_Form_Upload extends Pluf_Form
|
||||
if (strlen($extra)) $extra .= '|';
|
||||
if (!preg_match('/\.('.$extra.'png|jpg|jpeg|gif|bmp|psd|tif|aiff|asf|avi|bz2|css|doc|eps|gz|jar|mdtext|mid|mov|mp3|mpg|ogg|pdf|ppt|ps|qt|ra|ram|rm|rtf|sdd|sdw|sit|sxi|sxw|swf|tgz|txt|wav|xls|xml|war|wmv|zip)$/i', $this->cleaned_data['file'])) {
|
||||
@unlink(Pluf::f('upload_path').'/'.$this->project->shortname.'/files/'.$this->cleaned_data['file']);
|
||||
throw new Pluf_Form_Invalid(__('For security reason, you cannot upload a file with this extension.'));
|
||||
throw new Pluf_Form_Invalid(__('For security reasons, you cannot upload a file with this extension.'));
|
||||
}
|
||||
return $this->cleaned_data['file'];
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ class IDF_Form_UserAccount extends Pluf_Form
|
||||
'widget_attrs' => array('rows' => 3,
|
||||
'cols' => 40),
|
||||
'widget' => 'Pluf_Form_Widget_TextareaInput',
|
||||
'help_text' => __('Paste a SSH or monotone public key. Be careful to not provide your private key here!')
|
||||
'help_text' => __('Paste an SSH or monotone public key. Be careful to not provide your private key here!')
|
||||
));
|
||||
|
||||
$this->fields['secondary_mail'] = new Pluf_Form_Field_Email(
|
||||
@ -359,7 +359,7 @@ class IDF_Form_UserAccount extends Pluf_Form
|
||||
}
|
||||
else {
|
||||
throw new Pluf_Form_Invalid(
|
||||
__('Public key looks neither like a SSH '.
|
||||
__('Public key looks like neither an SSH '.
|
||||
'nor monotone public key.'));
|
||||
}
|
||||
|
||||
|
@ -87,6 +87,7 @@ class IDF_Middleware
|
||||
'markdown' => 'IDF_Template_Markdown',
|
||||
'showuser' => 'IDF_Template_ShowUser',
|
||||
'ashowuser' => 'IDF_Template_AssignShowUser',
|
||||
'appversion' => 'IDF_Template_AppVersion',
|
||||
));
|
||||
$params['modifiers'] = array_merge($params['modifiers'],
|
||||
array(
|
||||
|
@ -50,6 +50,7 @@ function IDF_Migrations_Install_setup($params=null)
|
||||
'IDF_Scm_Cache_Git',
|
||||
'IDF_Queue',
|
||||
'IDF_Gconf',
|
||||
'IDF_EmailAddress',
|
||||
);
|
||||
$db = Pluf::db();
|
||||
$schema = new Pluf_DB_Schema($db);
|
||||
@ -107,6 +108,7 @@ function IDF_Migrations_Install_teardown($params=null)
|
||||
'IDF_Tag',
|
||||
'IDF_Commit',
|
||||
'IDF_Project',
|
||||
'IDF_EmailAddress',
|
||||
);
|
||||
$db = Pluf::db();
|
||||
$schema = new Pluf_DB_Schema($db);
|
||||
|
@ -473,5 +473,14 @@ class IDF_Scm
|
||||
{
|
||||
return str_replace('%2F', '/', rawurlencode($path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of slashes and preceeding path components
|
||||
* that should be stripped from paths in the SCM's diff output
|
||||
*/
|
||||
public function getDiffPathStripLevel()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,29 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
*/
|
||||
public function inBranches($commit, $path)
|
||||
{
|
||||
return $this->_inObject($commit, 'branch');
|
||||
if (isset($this->cache['inBranches'][$commit])) {
|
||||
return $this->cache['inBranches'][$commit];
|
||||
}
|
||||
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '')
|
||||
.sprintf('GIT_DIR=%s %s branch --contains %s',
|
||||
escapeshellarg($this->repo),
|
||||
Pluf::f('git_path', 'git'),
|
||||
escapeshellarg($commit));
|
||||
self::exec('IDF_Scm_Git::inBranches', $cmd, $out, $return);
|
||||
if (0 != $return) {
|
||||
throw new IDF_Scm_Exception(sprintf($this->error_tpl,
|
||||
$cmd, $return,
|
||||
implode("\n", $out)));
|
||||
}
|
||||
|
||||
$res = array();
|
||||
foreach ($out as $line) {
|
||||
$res[] = substr($line, 2);
|
||||
}
|
||||
|
||||
$this->cache['inBranches'][$commit] = $res;
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -216,35 +238,36 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
**/
|
||||
public function inTags($commit, $path)
|
||||
{
|
||||
return $this->_inObject($commit, 'tag');
|
||||
}
|
||||
if (isset($this->cache['inTags'][$commit])) {
|
||||
return $this->cache['inTags'][$commit];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns in which branches or tags a commit is.
|
||||
*
|
||||
* @param string Commit
|
||||
* @param string Object's type: 'branch' or 'tag'.
|
||||
* @return array
|
||||
*/
|
||||
private function _inObject($commit, $object)
|
||||
{
|
||||
$object = strtolower($object);
|
||||
if ('branch' === $object) {
|
||||
$objects = $this->getBranches();
|
||||
} else if ('tag' === $object) {
|
||||
$objects = $this->getTags();
|
||||
} else {
|
||||
throw new InvalidArgumentException(sprintf(__('Invalid value for the parameter %1$s: %2$s. Use %3$s.'),
|
||||
'$object',
|
||||
$object,
|
||||
'\'branch\' or \'tag\''));
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '')
|
||||
.sprintf('GIT_DIR=%s %s tag --contains %s',
|
||||
escapeshellarg($this->repo),
|
||||
Pluf::f('git_path', 'git'),
|
||||
escapeshellarg($commit));
|
||||
self::exec('IDF_Scm_Git::inTags', $cmd, $out, $return);
|
||||
// `git tag` gained the `--contains` option in 1.6.2, earlier
|
||||
// versions report a bad usage error (129) which we ignore here
|
||||
if (129 == $return) {
|
||||
$this->cache['inTags'][$commit] = array();
|
||||
return array();
|
||||
}
|
||||
unset($object);
|
||||
$result = array();
|
||||
if (array_key_exists($commit, $objects)) {
|
||||
$result[] = $commit;
|
||||
// any other error should of course get noted
|
||||
if (0 != $return) {
|
||||
throw new IDF_Scm_Exception(sprintf($this->error_tpl,
|
||||
$cmd, $return,
|
||||
implode("\n", $out)));
|
||||
}
|
||||
return $result;
|
||||
|
||||
$res = array();
|
||||
foreach ($out as $line) {
|
||||
$res[] = $line;
|
||||
}
|
||||
|
||||
$this->cache['inTags'][$commit] = $res;
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -505,7 +528,7 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
$out[0]->diff = '';
|
||||
}
|
||||
|
||||
$out[0]->branch = implode(', ', $this->inBranches($commit, null));
|
||||
$out[0]->branch = implode(', ', $this->inBranches($out[0]->commit, null));
|
||||
return $out[0];
|
||||
}
|
||||
|
||||
@ -633,6 +656,14 @@ class IDF_Scm_Git extends IDF_Scm
|
||||
return new Pluf_HTTP_Response_CommandPassThru($cmd, 'application/x-zip');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see IDF_Scm::getDiffPathStripLevel()
|
||||
*/
|
||||
public function getDiffPathStripLevel()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* =====================================================
|
||||
* Specific Git Commands
|
||||
|
@ -27,10 +27,13 @@
|
||||
*/
|
||||
class IDF_Scm_Mercurial extends IDF_Scm
|
||||
{
|
||||
protected $hg_log_template;
|
||||
|
||||
public function __construct($repo, $project=null)
|
||||
{
|
||||
$this->repo = $repo;
|
||||
$this->project = $project;
|
||||
$this->hg_log_template = "'".'changeset: {rev}:{node|short}\nauthor: {author}\ndate: {date|isodate}\nfiles: {files}\n{desc}\n'."'";
|
||||
}
|
||||
|
||||
public function getRepositorySize()
|
||||
@ -336,10 +339,14 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
if (!$this->isValidRevision($commit)) {
|
||||
return false;
|
||||
}
|
||||
$tmpl = ($getdiff) ?
|
||||
Pluf::f('hg_path', 'hg').' log -p -r %s -R %s' : Pluf::f('hg_path', 'hg').' log -r %s -R %s';
|
||||
$tmpl = ($getdiff)
|
||||
? Pluf::f('hg_path', 'hg').' log -p -r %s -R %s --template %s'
|
||||
: Pluf::f('hg_path', 'hg').' log -r %s -R %s --template %s';
|
||||
$cmd = sprintf($tmpl,
|
||||
escapeshellarg($commit), escapeshellarg($this->repo));
|
||||
escapeshellarg($commit),
|
||||
escapeshellarg($this->repo),
|
||||
$this->hg_log_template);
|
||||
|
||||
$out = array();
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||
self::exec('IDF_Scm_Mercurial::getCommit', $cmd, $out);
|
||||
@ -356,7 +363,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
$log[] = $line;
|
||||
}
|
||||
}
|
||||
$out = self::parseLog($log, 6);
|
||||
$out = self::parseLog($log, 4);
|
||||
$out[0]->diff = implode("\n", $change);
|
||||
return $out[0];
|
||||
}
|
||||
@ -381,11 +388,11 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
*/
|
||||
public function getChangeLog($commit='tip', $n=10)
|
||||
{
|
||||
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log -R %s -l%s ', escapeshellarg($this->repo), $n, $commit);
|
||||
$cmd = sprintf(Pluf::f('hg_path', 'hg').' log -R %s -l%s --template %s', escapeshellarg($this->repo), $n, $this->hg_log_template, $commit);
|
||||
$out = array();
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||
self::exec('IDF_Scm_Mercurial::getChangeLog', $cmd, $out);
|
||||
return self::parseLog($out, 6);
|
||||
return self::parseLog($out, 4);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -421,7 +428,7 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
continue;
|
||||
}
|
||||
$match = array();
|
||||
if (preg_match('/(\S+)\s*:\s*(.*)/', $line, $match)) {
|
||||
if (preg_match('/^(\S+):\s*(.*)/', $line, $match)) {
|
||||
$match[1] = strtolower($match[1]);
|
||||
if ($match[1] == 'user') {
|
||||
$c['author'] = $match[2];
|
||||
@ -464,4 +471,12 @@ class IDF_Scm_Mercurial extends IDF_Scm
|
||||
escapeshellarg($commit));
|
||||
return new Pluf_HTTP_Response_CommandPassThru($cmd, 'application/x-zip');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see IDF_Scm::getDiffPathStripLevel()
|
||||
*/
|
||||
public function getDiffPathStripLevel()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -266,8 +266,13 @@ class IDF_Scm_Svn extends IDF_Scm
|
||||
escapeshellarg($this->repo),
|
||||
escapeshellarg($rev));
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd;
|
||||
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getCommitMessage', $cmd));
|
||||
$this->cache['commitmess'][$rev] = (string) $xml->logentry->msg;
|
||||
try {
|
||||
$xml = simplexml_load_string(self::shell_exec('IDF_Scm_Svn::getCommitMessage', $cmd));
|
||||
$this->cache['commitmess'][$rev] = (string) $xml->logentry->msg;
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$this->cache['commitmess'][$rev] = '';
|
||||
}
|
||||
return $this->cache['commitmess'][$rev];
|
||||
}
|
||||
|
||||
|
51
src/IDF/Template.php
Normal file
51
src/IDF/Template.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?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 ***** */
|
||||
|
||||
/**
|
||||
* PHP sets the backtrack limit quite low, so some (harder to analyze) regexes may fail
|
||||
* unexpectedly on large inputs or weird cornercases (see issue 618). Unfortunately this
|
||||
* fix does not always work and the execution time gets bigger the bigger we set the limit,
|
||||
* so in case PCRE fails to analyze the input string and preg_replace(_callback) returns NULL,
|
||||
* we at least return the input string unaltered.
|
||||
*
|
||||
* @param $pattern The pattern
|
||||
* @param $mixed Callback or replacement string
|
||||
* @param $input The input
|
||||
* @return The output
|
||||
*/
|
||||
function IDF_Template_safePregReplace($pattern, $mixed, $input)
|
||||
{
|
||||
$pcre_backtrack_limit = ini_get('pcre.backtrack_limit');
|
||||
ini_set('pcre.backtrack_limit', 10000000);
|
||||
|
||||
if (is_string($mixed) && !function_exists($mixed))
|
||||
$output = preg_replace($pattern, $mixed, $input);
|
||||
else
|
||||
$output = preg_replace_callback($pattern, $mixed, $input);
|
||||
|
||||
if ($output === null)
|
||||
$output = $input;
|
||||
|
||||
ini_set('pcre.backtrack_limit', $pcre_backtrack_limit);
|
||||
return $output;
|
||||
}
|
61
src/IDF/Template/AppVersion.php
Normal file
61
src/IDF/Template/AppVersion.php
Normal file
@ -0,0 +1,61 @@
|
||||
<?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 ***** */
|
||||
|
||||
/**
|
||||
* AppVersion tag.
|
||||
*
|
||||
* Renders two meta tags that include the application's version and revision
|
||||
*/
|
||||
class IDF_Template_AppVersion extends Pluf_Template_Tag
|
||||
{
|
||||
function start($file = 'IDF/version.php')
|
||||
{
|
||||
if (!Pluf::fileExists($file)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$info = include_once($file);
|
||||
if (!is_array($info)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (array_key_exists('version', $info)) {
|
||||
echo '<meta name="indefero-version" content="'.$info['version'].'" />'."\n";
|
||||
}
|
||||
|
||||
if (array_key_exists('revision', $info)) {
|
||||
if (strpos($info['revision'], '$') !== false) {
|
||||
$info['revision'] = 'unknown';
|
||||
$cmd = Pluf::f('idf_exec_cmd_prefix', '').
|
||||
Pluf::f('git_path', 'git').
|
||||
' log -1 --format=%H';
|
||||
|
||||
if (IDF_Scm::exec('IDF_Template_AppVersion::start', $cmd, $output)) {
|
||||
$info['revision'] = trim(@$output[0]);
|
||||
}
|
||||
}
|
||||
echo '<meta name="indefero-revision" content="'.$info['revision'].'" />'."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
# ***** END LICENSE BLOCK ***** */
|
||||
|
||||
Pluf::loadFunction('Pluf_HTTP_URL_urlForView');
|
||||
Pluf::loadFunction('IDF_Template_safePregReplace');
|
||||
|
||||
/**
|
||||
* Make the links to issues and commits.
|
||||
@ -34,36 +35,31 @@ class IDF_Template_IssueComment extends Pluf_Template_Tag
|
||||
|
||||
function start($text, $request, $echo=true, $wordwrap=true, $esc=true, $autolink=true, $nl2br=false)
|
||||
{
|
||||
// PHP sets the backtrack limit quite low, so some regexes may
|
||||
// fail unexpectedly on large inputs or weird cornercases (see issue 618)
|
||||
$pcre_backtrack_limit = ini_get('pcre.backtrack_limit');
|
||||
ini_set('pcre.backtrack_limit', 10000000);
|
||||
|
||||
$this->project = $request->project;
|
||||
$this->request = $request;
|
||||
$this->scm = IDF_Scm::get($request->project);
|
||||
if ($esc) $text = Pluf_esc($text);
|
||||
if ($autolink) {
|
||||
$text = preg_replace('#([a-z]+://[^\s\(\)]+)#i',
|
||||
'<a href="\1">\1</a>', $text);
|
||||
$text = IDF_Template_safePregReplace('#([a-z]+://[^\s\(\)]+)#i',
|
||||
'<a href="\1">\1</a>', $text);
|
||||
}
|
||||
if ($request->rights['hasIssuesAccess']) {
|
||||
$text = preg_replace_callback('#((?:issue|bug|ticket)(s)?\s+|\s+\#)(\d+)(\#ic\d+)?(?(2)((?:[, \w]+(?:\s+\#)?)?\d+(?:\#ic\d+)?){0,})#im',
|
||||
array($this, 'callbackIssues'), $text);
|
||||
$text = IDF_Template_safePregReplace('#((?:issue|bug|ticket)(s)?\s+|\s+\#)(\d+)(\#ic\d+)?(?(2)((?:[, \w]+(?:\s+\#)?)?\d+(?:\#ic\d+)?){0,})#im',
|
||||
array($this, 'callbackIssues'), $text);
|
||||
}
|
||||
if ($request->rights['hasReviewAccess']) {
|
||||
$text = preg_replace_callback('#(reviews?\s+)(\d+(?:(?:\s+and|\s+or|,)\s+\d+)*)\b#i',
|
||||
array($this, 'callbackReviews'), $text);
|
||||
$text = IDF_Template_safePregReplace('#(reviews?\s+)(\d+(?:(?:\s+and|\s+or|,)\s+\d+)*)\b#i',
|
||||
array($this, 'callbackReviews'), $text);
|
||||
}
|
||||
if ($request->rights['hasSourceAccess']) {
|
||||
$verbs = array('added', 'fixed', 'reverted', 'changed', 'removed');
|
||||
$nouns = array('commit', 'commits', 'revision', 'revisions', 'rev', 'revs');
|
||||
$prefix = implode(' in|', $verbs).' in' . '|'.
|
||||
implode('|', $nouns);
|
||||
$text = preg_replace_callback('#((?:'.$prefix.')(?:\s+r?))([0-9a-f]{1,40}((?:\s+and|\s+or|,)\s+r?[0-9a-f]{1,40})*)\b#i',
|
||||
array($this, 'callbackCommits'), $text);
|
||||
$text = preg_replace_callback('=(src:)([^\s@#,\(\)\\\\]+(?:(\\\\)[\s@#][^\s@#,\(\)\\\\]+){0,})+(?:\@([^\s#,]+))(?:#(\d+))?=im',
|
||||
array($this, 'callbackSource'), $text);
|
||||
$text = IDF_Template_safePregReplace('#((?:'.$prefix.')(?:\s+r?))([0-9a-f]{1,40}((?:\s+and|\s+or|,)\s+r?[0-9a-f]{1,40})*)\b#i',
|
||||
array($this, 'callbackCommits'), $text);
|
||||
$text = IDF_Template_safePregReplace('=(src:)([^\s@#,\(\)\\\\]+(?:(\\\\)[\s@#][^\s@#,\(\)\\\\]+){0,})+(?:\@([^\s#,]+))(?:#(\d+))?=im',
|
||||
array($this, 'callbackSource'), $text);
|
||||
}
|
||||
if ($wordwrap) $text = Pluf_Text::wrapHtml($text, 69, "\n");
|
||||
if ($nl2br) $text = nl2br($text);
|
||||
@ -72,8 +68,6 @@ class IDF_Template_IssueComment extends Pluf_Template_Tag
|
||||
} else {
|
||||
return $text;
|
||||
}
|
||||
|
||||
ini_set('pcre.backtrack_limit', $pcre_backtrack_limit);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,9 +95,9 @@ class IDF_Template_IssueComment extends Pluf_Template_Tag
|
||||
}
|
||||
return $m[0]; // not existing issue.
|
||||
}
|
||||
return preg_replace_callback('#(\#)?(\d+)(\#ic\d+)?#',
|
||||
array($this, 'callbackIssue'),
|
||||
$m[0]);
|
||||
return IDF_Template_safePregReplace('#(\#)?(\d+)(\#ic\d+)?#',
|
||||
array($this, 'callbackIssue'),
|
||||
$m[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -138,7 +132,7 @@ class IDF_Template_IssueComment extends Pluf_Template_Tag
|
||||
return $m[1].call_user_func(array($this, 'callbackCommit'), array($m[2]));
|
||||
}
|
||||
// Multiple commits like 'commits 6e030e6, a25bfc1 and 3c094f8'.
|
||||
return $m[1].preg_replace_callback('#\b[0-9a-f]{1,40}\b#i', array($this, 'callbackCommit'), $m[2]);
|
||||
return $m[1].IDF_Template_safePregReplace('#\b[0-9a-f]{1,40}\b#i', array($this, 'callbackCommit'), $m[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -170,7 +164,7 @@ class IDF_Template_IssueComment extends Pluf_Template_Tag
|
||||
{
|
||||
$keyword = rtrim($m[1]);
|
||||
if ('reviews' === $keyword) {
|
||||
return $m[1].preg_replace_callback('#\b(\d+)\b#i', array($this, 'callbackReview'), $m[2]);
|
||||
return $m[1].IDF_Template_safePregReplace('#\b(\d+)\b#i', array($this, 'callbackReview'), $m[2]);
|
||||
} else if ('review' === $keyword) {
|
||||
return $m[1].call_user_func(array($this, 'callbackReview'), array('', $m[2]));
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
# ***** END LICENSE BLOCK ***** */
|
||||
|
||||
Pluf::loadFunction('Pluf_Text_MarkDown_parse');
|
||||
Pluf::loadFunction('IDF_Template_safePregReplace');
|
||||
|
||||
/**
|
||||
* Make the links to issues and commits.
|
||||
@ -34,11 +35,6 @@ class IDF_Template_Markdown extends Pluf_Template_Tag
|
||||
|
||||
function start($text, $request)
|
||||
{
|
||||
// PHP sets the backtrack limit quite low, so some regexes may
|
||||
// fail unexpectedly on large inputs or weird cornercases (see issue 618)
|
||||
$pcre_backtrack_limit = ini_get('pcre.backtrack_limit');
|
||||
ini_set('pcre.backtrack_limit', 10000000);
|
||||
|
||||
$this->project = $request->project;
|
||||
$this->request = $request;
|
||||
// Replace like in the issue text
|
||||
@ -47,22 +43,20 @@ class IDF_Template_Markdown extends Pluf_Template_Tag
|
||||
// Replace [[[path/to/file.mdtext, commit]]] with embedding
|
||||
// the content of the file into the wki page
|
||||
if ($this->request->rights['hasSourceAccess']) {
|
||||
$text = preg_replace_callback('#\[\[\[([^\,]+)(?:, ([^/]+))?\]\]\]#im',
|
||||
array($this, 'callbackEmbeddedDoc'),
|
||||
$text);
|
||||
$text = IDF_Template_safePregReplace('#\[\[\[([^\,]+)(?:, ([^/]+))?\]\]\]#im',
|
||||
array($this, 'callbackEmbeddedDoc'),
|
||||
$text);
|
||||
}
|
||||
// Replace [Page]([[PageName]]) with corresponding link to the page, with link text being Page.
|
||||
$text = preg_replace_callback('#\[([^\]]+)\]\(\[\[([A-Za-z0-9\-]+)\]\]\)#im',
|
||||
array($this, 'callbackWikiPage'),
|
||||
$text);
|
||||
$text = IDF_Template_safePregReplace('#\[([^\]]+)\]\(\[\[([A-Za-z0-9\-]+)\]\]\)#im',
|
||||
array($this, 'callbackWikiPage'),
|
||||
$text);
|
||||
// Replace [[PageName]] with corresponding link to the page.
|
||||
$text = preg_replace_callback('#\[\[([A-Za-z0-9\-]+)\]\]#im',
|
||||
array($this, 'callbackWikiPageNoName'),
|
||||
$text);
|
||||
$text = IDF_Template_safePregReplace('#\[\[([A-Za-z0-9\-]+)\]\]#im',
|
||||
array($this, 'callbackWikiPageNoName'),
|
||||
$text);
|
||||
$filter = new IDF_Template_MarkdownPrefilter();
|
||||
echo $filter->go(Pluf_Text_MarkDown_parse($text));
|
||||
|
||||
ini_set('pcre.backtrack_limit', $pcre_backtrack_limit);
|
||||
}
|
||||
|
||||
function callbackWikiPageNoName($m)
|
||||
|
@ -32,29 +32,6 @@ class IDF_Tests_TestDiff extends UnitTestCase
|
||||
parent::__construct('Test the diff parser.');
|
||||
}
|
||||
|
||||
public function testGetFile()
|
||||
{
|
||||
$lines = array(
|
||||
'diff --git a/src/IDF/Form/Register.php b/src/IDF/Form/Register.php',
|
||||
'diff --git a/src/IDF/Form/RegisterConfirmation.php b/src/IDF/Form/RegisterConfirmation.php',
|
||||
'diff --git a/src/IDF/Form/RegisterInputKey.php b/src/IDF/Form/RegisterInputKey.php',
|
||||
'diff --git a/src/IDF/Views.php b/src/IDF/Views.php',
|
||||
'diff --git a/src/IDF/conf/views.php b/src/IDF/conf/views.php',
|
||||
);
|
||||
$files = array(
|
||||
'src/IDF/Form/Register.php',
|
||||
'src/IDF/Form/RegisterConfirmation.php',
|
||||
'src/IDF/Form/RegisterInputKey.php',
|
||||
'src/IDF/Views.php',
|
||||
'src/IDF/conf/views.php',
|
||||
);
|
||||
$i = 0;
|
||||
foreach ($lines as $line) {
|
||||
$this->assertEqual($files[$i], IDF_Diff::getFile($line));
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
public function testBinaryDiff()
|
||||
{
|
||||
$diff_content = file_get_contents(dirname(__FILE__).'/test-diff.diff');
|
||||
|
@ -377,10 +377,9 @@ class IDF_Views
|
||||
$forgestats['projects'] = count($projects);
|
||||
|
||||
// Count members
|
||||
$db =& Pluf::db();
|
||||
$sql = "SELECT count(id) as nb FROM indefero_users WHERE first_name != '---'";
|
||||
$ret = $db->select ($sql);
|
||||
$forgestats['members'] = $ret[0]['nb'];
|
||||
$sql = new Pluf_SQL('first_name != %s', array('---'));
|
||||
$forgestats['members'] = Pluf::factory('Pluf_User')
|
||||
->getCount(array('filter' => $sql->gen()));
|
||||
|
||||
return $forgestats;
|
||||
}
|
||||
|
@ -121,6 +121,17 @@ class IDF_Views_Project
|
||||
return $classes;
|
||||
}
|
||||
|
||||
/**
|
||||
* This action serves as URI compatibility layer for v1.0.
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
public function timelineCompat($request, $match)
|
||||
{
|
||||
$match[2] = 'all';
|
||||
return $this->timeline($request, $match);
|
||||
}
|
||||
|
||||
/**
|
||||
* Timeline of the project.
|
||||
*/
|
||||
@ -178,6 +189,17 @@ class IDF_Views_Project
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This action serves as URI compatibility layer for v1.0.
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
public function timelineFeedCompat($request, $match)
|
||||
{
|
||||
$match[2] = 'all';
|
||||
return $this->timelineFeed($request, $match);
|
||||
}
|
||||
|
||||
/**
|
||||
* Timeline feed.
|
||||
*
|
||||
@ -192,7 +214,6 @@ class IDF_Views_Project
|
||||
$prj = $request->project;
|
||||
$model_filter = @$match[2];
|
||||
|
||||
$model_filter = @$match[2];
|
||||
$all_model_filters = self::getAvailableModelFilters();
|
||||
if (!array_key_exists($model_filter, $all_model_filters)) {
|
||||
$model_filter = 'all';
|
||||
|
@ -303,7 +303,8 @@ class IDF_Views_Source
|
||||
$title = sprintf(__('%s Commit Details'), (string) $request->project);
|
||||
$page_title = sprintf(__('%s Commit Details - %s'), (string) $request->project, $commit);
|
||||
$rcommit = IDF_Commit::getOrAdd($cobject, $request->project);
|
||||
$diff = new IDF_Diff($cobject->diff);
|
||||
$diff = new IDF_Diff($cobject->diff, $scm->getDiffPathStripLevel());
|
||||
$cobject->diff = null;
|
||||
$diff->parse();
|
||||
$scmConf = $request->conf->getVal('scm', 'git');
|
||||
try {
|
||||
|
@ -246,7 +246,7 @@ $cfg['template_context_processors'] = array('IDF_Middleware_ContextPreProcessor'
|
||||
$cfg['idf_views'] = dirname(__FILE__).'/urls.php';
|
||||
|
||||
# available languages
|
||||
$cfg['languages'] = array('en', 'fr');
|
||||
$cfg['languages'] = array('en', 'fr', 'de', 'es_ES');
|
||||
|
||||
# SCM base configuration
|
||||
$cfg['allowed_scm'] = array('git' => 'IDF_Scm_Git',
|
||||
|
@ -91,6 +91,23 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/feed/timeline/(\w+)/token/(.*)/$#',
|
||||
'method' => 'timelineFeed',
|
||||
'name' => 'idf_project_timeline_feed_auth');
|
||||
|
||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/timeline/$#',
|
||||
'base' => $base,
|
||||
'model' => 'IDF_Views_Project',
|
||||
'method' => 'timelineCompat');
|
||||
|
||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/feed/timeline/$#',
|
||||
'base' => $base,
|
||||
'model' => 'IDF_Views_Project',
|
||||
'method' => 'timelineFeedCompat',
|
||||
'name' => 'idf_project_timeline_feed');
|
||||
|
||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/feed/timeline/token/(.*)/$#',
|
||||
'base' => $base,
|
||||
'model' => 'IDF_Views_Project',
|
||||
'method' => 'timelineFeedCompat',
|
||||
'name' => 'idf_project_timeline_feed_auth');
|
||||
|
||||
$ctl[] = array('regex' => '#^/p/([\-\w]+)/issues/$#',
|
||||
'base' => $base,
|
||||
'model' => 'IDF_Views_Issue',
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Indefero\n"
|
||||
"Report-Msgid-Bugs-To: http://projects.ceondo.com/p/indefero/issues/\n"
|
||||
"POT-Creation-Date: 2011-02-23 23:41+0100\n"
|
||||
"PO-Revision-Date: 2011-02-24 08:07+0000\n"
|
||||
"POT-Creation-Date: 2011-03-18 23:30+0100\n"
|
||||
"PO-Revision-Date: 2011-03-19 07:43+0000\n"
|
||||
"Last-Translator: Delkia <wysman@gmail.com>\n"
|
||||
"Language-Team: French <>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -63,19 +63,27 @@ msgstr "clef"
|
||||
msgid "value"
|
||||
msgstr "valeur"
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:38 IDF/Views/Project.php:540
|
||||
#: IDF/EmailAddress.php:49 IDF/Key.php:49
|
||||
msgid "user"
|
||||
msgstr "utilisateur"
|
||||
|
||||
#: IDF/EmailAddress.php:55
|
||||
msgid "email"
|
||||
msgstr "e-mail"
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:38 IDF/Views/Project.php:561
|
||||
msgid "git"
|
||||
msgstr "git"
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:39 IDF/Views/Project.php:541
|
||||
#: IDF/Form/Admin/ProjectCreate.php:39 IDF/Views/Project.php:562
|
||||
msgid "Subversion"
|
||||
msgstr "Subversion"
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:40 IDF/Views/Project.php:542
|
||||
#: IDF/Form/Admin/ProjectCreate.php:40 IDF/Views/Project.php:563
|
||||
msgid "mercurial"
|
||||
msgstr "mercurial"
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:41 IDF/Views/Project.php:543
|
||||
#: IDF/Form/Admin/ProjectCreate.php:41 IDF/Views/Project.php:564
|
||||
msgid "monotone"
|
||||
msgstr "monotone"
|
||||
|
||||
@ -163,13 +171,13 @@ msgstr ""
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:185
|
||||
msgid ""
|
||||
"Only a remote repository available throught http or https are allowed. For "
|
||||
"Only a remote repository available through HTTP or HTTPS is allowed. For "
|
||||
"example \"http://somewhere.com/svn/trunk\"."
|
||||
msgstr ""
|
||||
"Only a remote repository available throught http or https are allowed. For "
|
||||
"example \"http://somewhere.com/svn/trunk\"."
|
||||
"Seulement les dépôts utilisant http ou http sont autorisés, par exemple : "
|
||||
"http://example.com/svn/trunk."
|
||||
|
||||
#: IDF/Form/Admin/ProjectCreate.php:201 IDF/Form/Admin/ProjectUpdate.php:90
|
||||
#: IDF/Form/Admin/ProjectCreate.php:201
|
||||
msgid ""
|
||||
"The master branch is empty or contains illegal characters, please use only "
|
||||
"letters, digits, dashs and dots as separators."
|
||||
@ -208,10 +216,10 @@ msgstr "Ce nom court est déjà utilisé, veuillez en sélectionner un autre."
|
||||
#: IDF/Form/Admin/ProjectUpdate.php:121 IDF/Form/Admin/UserCreate.php:106
|
||||
#: IDF/Form/Admin/UserUpdate.php:191 IDF/Form/IssueCreate.php:263
|
||||
#: IDF/Form/IssueUpdate.php:232 IDF/Form/MembersConf.php:64
|
||||
#: IDF/Form/Password.php:76 IDF/Form/Register.php:114
|
||||
#: IDF/Form/ReviewCreate.php:187 IDF/Form/ReviewFileComment.php:125
|
||||
#: IDF/Form/Password.php:76 IDF/Form/Register.php:112
|
||||
#: IDF/Form/ReviewCreate.php:187 IDF/Form/ReviewFileComment.php:127
|
||||
#: IDF/Form/TabsConf.php:98 IDF/Form/UpdateUpload.php:126
|
||||
#: IDF/Form/Upload.php:148 IDF/Form/UserAccount.php:180
|
||||
#: IDF/Form/Upload.php:148 IDF/Form/UserAccount.php:216
|
||||
#: IDF/Form/UserChangeEmail.php:80 IDF/Form/WikiCreate.php:167
|
||||
#: IDF/Form/WikiDelete.php:59 IDF/Form/WikiUpdate.php:178
|
||||
msgid "Cannot save the model from an invalid form."
|
||||
@ -252,6 +260,15 @@ msgstr ""
|
||||
"Désolé, vous devez vraiment faire une copie de sauvegarde des informations "
|
||||
"importantes de ce projet."
|
||||
|
||||
#: IDF/Form/Admin/ProjectUpdate.php:90
|
||||
msgid ""
|
||||
"The master branch is empty or contains illegal characters, please use only "
|
||||
"letters, digits, dashes and dots as separators."
|
||||
msgstr ""
|
||||
"La branche principale contient des caractères non autorisés, il ne doit être"
|
||||
" composé que de lettres, de chiffres, du point d'exclamation (!) ou du point"
|
||||
" (.)."
|
||||
|
||||
#: IDF/Form/Admin/UserCreate.php:37 IDF/Form/Admin/UserUpdate.php:38
|
||||
#: IDF/Form/RegisterConfirmation.php:50 IDF/Form/UserAccount.php:40
|
||||
msgid "First name"
|
||||
@ -266,7 +283,7 @@ msgstr "Nom de famille"
|
||||
msgid "Login"
|
||||
msgstr "Identifiant"
|
||||
|
||||
#: IDF/Form/Admin/UserCreate.php:60 IDF/Form/Register.php:45
|
||||
#: IDF/Form/Admin/UserCreate.php:60
|
||||
msgid ""
|
||||
"The login must be between 3 and 15 characters long and contains only letters"
|
||||
" and digits."
|
||||
@ -280,7 +297,7 @@ msgstr "Email"
|
||||
|
||||
#: IDF/Form/Admin/UserCreate.php:71
|
||||
msgid ""
|
||||
"Double check the email address as the password is directly sent to the user."
|
||||
"Double check the email address as the password is sent directly to the user."
|
||||
msgstr ""
|
||||
"Vérifiez particulièrement l'adresse email car le mot de passe est "
|
||||
"directement envoyé à l'utilisateur."
|
||||
@ -294,7 +311,7 @@ msgstr "Langage"
|
||||
msgid "Add a public key"
|
||||
msgstr "Ajouter une clef publique"
|
||||
|
||||
#: IDF/Form/Admin/UserCreate.php:92 IDF/Form/UserAccount.php:166
|
||||
#: IDF/Form/Admin/UserCreate.php:92
|
||||
msgid ""
|
||||
"Paste a SSH or monotone public key. Be careful to not provide your private "
|
||||
"key here!"
|
||||
@ -306,7 +323,8 @@ msgstr ""
|
||||
msgid "Your details to access your forge."
|
||||
msgstr "Vos informations pour accéder à votre forge."
|
||||
|
||||
#: IDF/Form/Admin/UserCreate.php:189 IDF/Form/UserAccount.php:402
|
||||
#: IDF/Form/Admin/UserCreate.php:189 IDF/Form/UserAccount.php:420
|
||||
#: IDF/Form/UserAccount.php:429
|
||||
#, php-format
|
||||
msgid "The email \"%s\" is already used."
|
||||
msgstr "L'adresse email \"%s\" est déjà utilisée."
|
||||
@ -331,8 +349,8 @@ msgstr "Laissez vide si vous ne voulez pas changer le mot de passe."
|
||||
|
||||
#: IDF/Form/Admin/UserUpdate.php:81
|
||||
msgid ""
|
||||
"The password must be hard for other people to find it, but easy for the user"
|
||||
" to remember."
|
||||
"The password must be hard for other people to guess, but easy for the user "
|
||||
"to remember."
|
||||
msgstr ""
|
||||
"Le mot de passe doit être difficile à trouver pour d'autres personnes, mais "
|
||||
"simple à retenir pour l'utilisateur."
|
||||
@ -385,10 +403,10 @@ msgid "Staff"
|
||||
msgstr "Staff"
|
||||
|
||||
#: IDF/Form/Admin/UserUpdate.php:164
|
||||
msgid "If you give staff rights to a user, you really need to trust him."
|
||||
msgid "If you give staff rights to a user, you really need to trust them."
|
||||
msgstr ""
|
||||
"Si vous donnez les droits de staff à un utilisateur, vous devez vraiment lui"
|
||||
" faire confiance."
|
||||
"Si vous donnez le status de staff à un utilisateur, vous devez vraiment lui "
|
||||
"faire confiance."
|
||||
|
||||
#: IDF/Form/Admin/UserUpdate.php:172 IDF/Views/Admin.php:213
|
||||
msgid "Active"
|
||||
@ -397,7 +415,7 @@ msgstr "Actif"
|
||||
#: IDF/Form/Admin/UserUpdate.php:176
|
||||
msgid ""
|
||||
"If the user is not getting the confirmation email or is abusing the system, "
|
||||
"you can directly enable or disable his account here."
|
||||
"you can directly enable or disable their account here."
|
||||
msgstr ""
|
||||
"Si l'utilisateur ne reçoit pas l'email de confirmation ou s'il abuse du "
|
||||
"système, vous pouvez directement activer ou désactiver son compte ici."
|
||||
@ -413,14 +431,13 @@ msgstr ""
|
||||
"Un utilisateur avec cet email existe déjà, merci de fournir une autre "
|
||||
"adresse email."
|
||||
|
||||
#: IDF/Form/Admin/UserUpdate.php:301 IDF/Form/Upload.php:86
|
||||
#: IDF/Form/UserAccount.php:369
|
||||
#: IDF/Form/Admin/UserUpdate.php:301 IDF/Form/UserAccount.php:389
|
||||
msgid "For security reason, you cannot upload a file with this extension."
|
||||
msgstr ""
|
||||
"Pour des raisons de sécurité, vous ne pouvez pas mettre en ligne un fichier "
|
||||
"avec cette extension."
|
||||
|
||||
#: IDF/Form/Admin/UserUpdate.php:316 IDF/Form/UserAccount.php:425
|
||||
#: IDF/Form/Admin/UserUpdate.php:316 IDF/Form/UserAccount.php:452
|
||||
msgid "The passwords do not match. Please give them again."
|
||||
msgstr ""
|
||||
"Les mots de passe ne sont pas identiques, veuillez les donner de nouveau."
|
||||
@ -430,7 +447,7 @@ msgid "Please enter one or more valid email addresses."
|
||||
msgstr "Veuillez entrer une ou plusieurs adresse email valides."
|
||||
|
||||
#: IDF/Form/IssueCreate.php:53 IDF/Form/IssueUpdate.php:45
|
||||
#: IDF/Form/ReviewCreate.php:45 IDF/Form/ReviewFileComment.php:71
|
||||
#: IDF/Form/ReviewCreate.php:45 IDF/Form/ReviewFileComment.php:73
|
||||
#: IDF/Form/UpdateUpload.php:42 IDF/Form/Upload.php:40
|
||||
#: IDF/Views/Download.php:65 IDF/Views/Download.php:293 IDF/Views/Issue.php:62
|
||||
#: IDF/Views/Issue.php:139 IDF/Views/Issue.php:220 IDF/Views/Issue.php:296
|
||||
@ -450,7 +467,7 @@ msgid "Attach a file"
|
||||
msgstr "Attacher un fichier"
|
||||
|
||||
#: IDF/Form/IssueCreate.php:95 IDF/Form/IssueUpdate.php:88
|
||||
#: IDF/Form/ReviewCreate.php:103 IDF/Form/ReviewFileComment.php:81
|
||||
#: IDF/Form/ReviewCreate.php:103 IDF/Form/ReviewFileComment.php:83
|
||||
#: IDF/Views/Issue.php:63 IDF/Views/Issue.php:140 IDF/Views/Issue.php:222
|
||||
#: IDF/Views/Issue.php:297 IDF/Views/Issue.php:384 IDF/Views/Issue.php:563
|
||||
#: IDF/Views/Issue.php:622 IDF/Views/Review.php:59 IDF/Views/User.php:84
|
||||
@ -496,10 +513,11 @@ msgstr "Vous avez fourni un statut invalide."
|
||||
|
||||
#: IDF/Form/IssueTrackingConf.php:80
|
||||
msgid ""
|
||||
"Define an issue template to hint the reporter to provide certain information"
|
||||
"Define an issue template to hint to the reporter to provide certain "
|
||||
"information"
|
||||
msgstr ""
|
||||
"Définissez un ticket gabarit pour inciter le rapporteur à fournir certaines "
|
||||
"informations"
|
||||
"Définissez un modèle de ticket pour guider le rapporteur à fournir certaines"
|
||||
" informations."
|
||||
|
||||
#: IDF/Form/IssueTrackingConf.php:89
|
||||
msgid "Open issue status values"
|
||||
@ -599,8 +617,7 @@ msgstr "Ne peut pas sauvegarder un formulaire invalide."
|
||||
msgid "Your password"
|
||||
msgstr "Votre mot de passe"
|
||||
|
||||
#: IDF/Form/PasswordReset.php:48 IDF/Form/RegisterConfirmation.php:72
|
||||
#: IDF/Form/UserAccount.php:80
|
||||
#: IDF/Form/PasswordReset.php:48 IDF/Form/UserAccount.php:80
|
||||
msgid ""
|
||||
"Your password must be hard for other people to find it, but easy for you to "
|
||||
"remember."
|
||||
@ -629,12 +646,20 @@ msgstr ""
|
||||
msgid "Your login"
|
||||
msgstr "Votre identifiant"
|
||||
|
||||
#: IDF/Form/Register.php:45
|
||||
msgid ""
|
||||
"The login must be between 3 and 15 characters long and contain only letters "
|
||||
"and digits."
|
||||
msgstr ""
|
||||
"L'identifiant doit avoir entre 3 et 15 caractères et ne doit contenir que "
|
||||
"des lettres et des chiffres."
|
||||
|
||||
#: IDF/Form/Register.php:53
|
||||
msgid "Your email"
|
||||
msgstr "Votre email"
|
||||
|
||||
#: IDF/Form/Register.php:55
|
||||
msgid "We will never send you any unsolicited emails. We hate spams too!"
|
||||
msgid "We will never send you any unsolicited emails. We hate spam too!"
|
||||
msgstr ""
|
||||
"Nous ne vous enverrons aucun message non sollicité. Comme vous, nous avons "
|
||||
"ras le bol du spam."
|
||||
@ -651,16 +676,16 @@ msgstr ""
|
||||
"Nous savons que c'est inintéressant, mais vous devez accepter les conditions"
|
||||
" d'usage du service."
|
||||
|
||||
#: IDF/Form/Register.php:99
|
||||
#: IDF/Form/Register.php:97
|
||||
#, php-format
|
||||
msgid ""
|
||||
"The email \"%s\" is already used. If you need, click on the help link to "
|
||||
"The email \"%s\" is already used. If you need to, click on the help link to "
|
||||
"recover your password."
|
||||
msgstr ""
|
||||
"L'email \"%s\" est déjà utilisé. Si vous devez, vous pouvez récupérer votre "
|
||||
"mot de passe via le lien d'aide."
|
||||
"L'email \"%s\" est déjà utilisé. Si vous avez perdu votre mot de passe, vous"
|
||||
" pouvez le récupérer à l'aide de ce lien."
|
||||
|
||||
#: IDF/Form/Register.php:150
|
||||
#: IDF/Form/Register.php:148
|
||||
msgid "Confirm the creation of your account."
|
||||
msgstr "Confirmez la création de votre compte."
|
||||
|
||||
@ -668,6 +693,14 @@ msgstr "Confirmez la création de votre compte."
|
||||
msgid "Your confirmation key"
|
||||
msgstr "Votre clef de confirmation"
|
||||
|
||||
#: IDF/Form/RegisterConfirmation.php:72
|
||||
msgid ""
|
||||
"Your password must be hard for other people to guess, but easy for you to "
|
||||
"remember."
|
||||
msgstr ""
|
||||
"Le mot de passe doit être difficile à trouver pour d'autres personnes, mais "
|
||||
"simple à retenir pour l'utilisateur."
|
||||
|
||||
#: IDF/Form/RegisterConfirmation.php:99 IDF/Form/RegisterInputKey.php:50
|
||||
msgid ""
|
||||
"We are sorry but this confirmation key is not valid. Maybe you should "
|
||||
@ -713,11 +746,11 @@ msgstr "Patch initial à discuter."
|
||||
msgid "General comment"
|
||||
msgstr "Commentaire général"
|
||||
|
||||
#: IDF/Form/ReviewFileComment.php:102
|
||||
#: IDF/Form/ReviewFileComment.php:104
|
||||
msgid "You need to provide comments on at least one file."
|
||||
msgstr "Vous devez au moins apporter un commentaire à un fichier."
|
||||
|
||||
#: IDF/Form/ReviewFileComment.php:109
|
||||
#: IDF/Form/ReviewFileComment.php:111
|
||||
msgid "You need to provide your general comment about the proposal."
|
||||
msgstr "Vous devez apporter un commentaire général sur la proposition."
|
||||
|
||||
@ -731,9 +764,7 @@ msgid "Learn more about the <a href=\"%s\">post-commit web hooks</a>."
|
||||
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/gettexttemplates/idf/base-full.html.orig.php:5
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:5
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:5
|
||||
#: IDF/gettexttemplates/idf/base.html.php:5
|
||||
#: IDF/gettexttemplates/idf/downloads/base.html.php:3
|
||||
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:14
|
||||
@ -741,32 +772,24 @@ msgstr "En savoir plus à propos des <a href=\"%s\">Webhooks post-commit</a>."
|
||||
msgid "Downloads"
|
||||
msgstr "Téléchargements"
|
||||
|
||||
#: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.orig.php:9
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:9
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:9
|
||||
#: IDF/Form/TabsConf.php:39 IDF/gettexttemplates/idf/base-full.html.php:9
|
||||
#: IDF/gettexttemplates/idf/base.html.php:9
|
||||
msgid "Code Review"
|
||||
msgstr "Revue de code"
|
||||
|
||||
#: IDF/Form/TabsConf.php:40 IDF/gettexttemplates/idf/admin/base.html.php:5
|
||||
#: IDF/gettexttemplates/idf/base-full.html.orig.php:6
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:6
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:6
|
||||
#: IDF/gettexttemplates/idf/base.html.php:6
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: IDF/Form/TabsConf.php:41 IDF/gettexttemplates/idf/admin/base.html.php:7
|
||||
#: IDF/gettexttemplates/idf/base-full.html.orig.php:8
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:8
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:8
|
||||
#: IDF/gettexttemplates/idf/base.html.php:8
|
||||
msgid "Source"
|
||||
msgstr "Source"
|
||||
|
||||
#: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.orig.php:7
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:7
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:7
|
||||
#: IDF/Form/TabsConf.php:42 IDF/gettexttemplates/idf/base-full.html.php:7
|
||||
#: IDF/gettexttemplates/idf/base.html.php:7
|
||||
#: IDF/gettexttemplates/idf/gadmin/projects/delete.html.php:17
|
||||
msgid "Issues"
|
||||
@ -796,6 +819,12 @@ msgstr "Utilisateurs autorisés supplémentaires"
|
||||
msgid "File"
|
||||
msgstr "Fichier"
|
||||
|
||||
#: IDF/Form/Upload.php:86
|
||||
msgid "For security reasons, you cannot upload a file with this extension."
|
||||
msgstr ""
|
||||
"Pour des raisons de sécurité, vous ne pouvez pas mettre en ligne un fichier "
|
||||
"avec cette extension."
|
||||
|
||||
#: IDF/Form/UploadConf.php:53
|
||||
msgid "Predefined download labels"
|
||||
msgstr "Étiquettes prédéfinies des téléchargements"
|
||||
@ -822,25 +851,41 @@ msgstr ""
|
||||
msgid "Leave blank if you do not want to change your password."
|
||||
msgstr "Laissez vide si vous ne voulez pas changer votre mot de passe."
|
||||
|
||||
#: IDF/Form/UserAccount.php:209
|
||||
#: IDF/Form/UserAccount.php:166
|
||||
msgid ""
|
||||
"Paste an SSH or monotone public key. Be careful to not provide your private "
|
||||
"key here!"
|
||||
msgstr ""
|
||||
"Copiez une clef publique SSH ou monotone. Faites bien attention à ne pas y "
|
||||
"mettre la clef privée !"
|
||||
|
||||
#: IDF/Form/UserAccount.php:171
|
||||
msgid "Add a secondary mail address"
|
||||
msgstr "Ajouter un e-mail secondaire"
|
||||
|
||||
#: IDF/Form/UserAccount.php:173
|
||||
msgid "You will get a mail to confirm that you own the address you specify."
|
||||
msgstr "Vous allez recevoir un e-mail de confirmation afin de la vérifier. "
|
||||
|
||||
#: IDF/Form/UserAccount.php:200
|
||||
msgid "Confirm your new email address."
|
||||
msgstr "Confirmez votre nouvelle adresse email."
|
||||
|
||||
#: IDF/Form/UserAccount.php:212
|
||||
#: IDF/Form/UserAccount.php:203
|
||||
#, php-format
|
||||
msgid ""
|
||||
"A validation email has been sent to \"%s\" to validate the email address "
|
||||
"change."
|
||||
msgstr "Un email a été envoyé à \"%s\" pour valider le changement d'adresse."
|
||||
|
||||
#: IDF/Form/UserAccount.php:314
|
||||
#: IDF/Form/UserAccount.php:334
|
||||
msgid ""
|
||||
"Please check the key as it does not appear to be a valid SSH public key."
|
||||
msgstr ""
|
||||
"Vérifiez s'il vous plaît la clef car elle ne semble pas être une clef "
|
||||
"publique SSH valide."
|
||||
|
||||
#: IDF/Form/UserAccount.php:334
|
||||
#: IDF/Form/UserAccount.php:354
|
||||
msgid ""
|
||||
"Please check the key as it does not appear to be a valid monotone public "
|
||||
"key."
|
||||
@ -848,13 +893,13 @@ msgstr ""
|
||||
"Vérifiez s'il vous plaît la clef car elle ne semble pas être une clef "
|
||||
"publique monotone valide."
|
||||
|
||||
#: IDF/Form/UserAccount.php:342
|
||||
msgid "Public key looks neither like a SSH nor monotone public key."
|
||||
#: IDF/Form/UserAccount.php:362
|
||||
msgid "Public key looks like neither an SSH nor monotone public key."
|
||||
msgstr ""
|
||||
"La clef publique ne ressemble ni à une clef publique SSH ni une clef "
|
||||
"publique monotone."
|
||||
|
||||
#: IDF/Form/UserAccount.php:354
|
||||
#: IDF/Form/UserAccount.php:374
|
||||
msgid "You already have uploaded this key."
|
||||
msgstr "Vous avez déjà cette clef SSH dans votre trousseau."
|
||||
|
||||
@ -1214,9 +1259,7 @@ msgstr "Emails de notification"
|
||||
msgid "Instructions:"
|
||||
msgstr "Instructions :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/base-full.html.orig.php:3
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:3
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:3
|
||||
#: IDF/gettexttemplates/idf/base.html.php:3
|
||||
#, php-format
|
||||
msgid ""
|
||||
@ -1226,16 +1269,12 @@ msgstr ""
|
||||
"<a href=\"%%url%%\">Connectez-vous ou créez votre compte</a> pour soumettre "
|
||||
"des tickets ou ajouter des commentaires"
|
||||
|
||||
#: IDF/gettexttemplates/idf/base-full.html.orig.php:4
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:4
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:4
|
||||
#: IDF/gettexttemplates/idf/base.html.php:4
|
||||
msgid "Project Home"
|
||||
msgstr "Page d'Accueil"
|
||||
|
||||
#: IDF/gettexttemplates/idf/base-full.html.orig.php:10
|
||||
#: IDF/gettexttemplates/idf/base-full.html.php:10
|
||||
#: IDF/gettexttemplates/idf/base.html.orig.php:10
|
||||
#: IDF/gettexttemplates/idf/base.html.php:10
|
||||
msgid "Project Management"
|
||||
msgstr "Administration du projet"
|
||||
@ -1299,7 +1338,7 @@ msgstr "Supprimer le fichier"
|
||||
#: IDF/gettexttemplates/idf/review/create.html.php:12
|
||||
#: IDF/gettexttemplates/idf/review/view.html.php:43
|
||||
#: IDF/gettexttemplates/idf/user/changeemail.html.php:5
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:12
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:13
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery-ask.html.php:5
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery-inputkey.html.php:5
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:7
|
||||
@ -1328,7 +1367,7 @@ msgstr "Mis à jour :"
|
||||
#: IDF/gettexttemplates/idf/downloads/delete.html.php:10
|
||||
#: IDF/gettexttemplates/idf/downloads/view.html.php:15
|
||||
#: IDF/gettexttemplates/idf/gadmin/projects/index.html.php:6
|
||||
#: IDF/gettexttemplates/idf/index.html.php:12
|
||||
#: IDF/gettexttemplates/idf/index.html.php:13
|
||||
msgid "Downloads:"
|
||||
msgstr "Téléchargements :"
|
||||
|
||||
@ -1490,7 +1529,7 @@ msgstr "Nous sommes là, juste pour vous aider."
|
||||
#: IDF/gettexttemplates/idf/faq.html.php:35
|
||||
#: IDF/gettexttemplates/idf/gadmin/base.html.php:3
|
||||
#: IDF/gettexttemplates/idf/index.html.php:3 IDF/Views/Admin.php:57
|
||||
#: IDF/Views.php:45
|
||||
#: IDF/Views.php:47
|
||||
msgid "Projects"
|
||||
msgstr "Projets"
|
||||
|
||||
@ -1553,7 +1592,7 @@ msgstr "Comment puis-je afficher ma tête à côté de mes commentaires ?"
|
||||
|
||||
#: IDF/gettexttemplates/idf/faq.html.php:15
|
||||
#: IDF/gettexttemplates/idf/faq.html.php:33
|
||||
msgid "What is the API and how to use it?"
|
||||
msgid "What is the API and how is it used?"
|
||||
msgstr "Qu'est-ce que l'API et comment l'utiliser ?"
|
||||
|
||||
#: IDF/gettexttemplates/idf/faq.html.php:17
|
||||
@ -1627,6 +1666,7 @@ msgstr "Vous avez ici accès à l'administration de la forge."
|
||||
#: IDF/gettexttemplates/idf/gadmin/home.html.php:4
|
||||
#: IDF/gettexttemplates/idf/project/home.html.php:3
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html.php:4
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html~.php:4
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
@ -2031,26 +2071,30 @@ msgid "No projects managed with InDefero were found."
|
||||
msgstr "Aucun projet supervisé avec InDefero n'a été trouvé."
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:7
|
||||
msgid "Forge statistics"
|
||||
msgstr "Statistiques de la forge"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:8
|
||||
msgid "Projects:"
|
||||
msgstr "Projets :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:8
|
||||
#: IDF/gettexttemplates/idf/index.html.php:9
|
||||
msgid "Members:"
|
||||
msgstr "Membres :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:9
|
||||
#: IDF/gettexttemplates/idf/index.html.php:10
|
||||
msgid "Issues:"
|
||||
msgstr "Ticket :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:10
|
||||
#: IDF/gettexttemplates/idf/index.html.php:11
|
||||
msgid "Commits:"
|
||||
msgstr "Commits :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:11
|
||||
#: IDF/gettexttemplates/idf/index.html.php:12
|
||||
msgid "Documentations:"
|
||||
msgstr "Documentation :"
|
||||
|
||||
#: IDF/gettexttemplates/idf/index.html.php:13
|
||||
#: IDF/gettexttemplates/idf/index.html.php:14
|
||||
msgid "Code reviews:"
|
||||
msgstr "Revues de code :"
|
||||
|
||||
@ -2449,6 +2493,7 @@ msgstr "Aide"
|
||||
|
||||
#: IDF/gettexttemplates/idf/project/home.html.php:4
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html.php:5
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html~.php:5
|
||||
msgid "Latest Updates"
|
||||
msgstr "Dernières mises à jour"
|
||||
|
||||
@ -2478,10 +2523,17 @@ msgid "Happy Crew"
|
||||
msgstr "Équipe sympa"
|
||||
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html.php:3
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html~.php:3
|
||||
msgid "Latest updates"
|
||||
msgstr "Dernières mises à jour"
|
||||
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html.php:6
|
||||
#: IDF/Views/Project.php:72
|
||||
msgid "All Updates"
|
||||
msgstr "Mises à jour"
|
||||
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html.php:7
|
||||
#: IDF/gettexttemplates/idf/project/timeline.html~.php:6
|
||||
msgid "Filter by type"
|
||||
msgstr "Filtrer par type"
|
||||
|
||||
@ -2543,7 +2595,7 @@ msgstr ""
|
||||
#: IDF/gettexttemplates/idf/register/confirmation.html.php:3
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:3
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:3
|
||||
msgid "Oups, please check the form for errors."
|
||||
msgid "Oops, please check the form for errors."
|
||||
msgstr "Oups, veuillez corriger les erreurs dans le formulaire."
|
||||
|
||||
#: IDF/gettexttemplates/idf/register/confirmation.html.php:5
|
||||
@ -2586,12 +2638,12 @@ msgstr ""
|
||||
"faire savoir à tout instant</a> !"
|
||||
|
||||
#: IDF/gettexttemplates/idf/register/index.html.php:5
|
||||
msgid "Oups, please check the provided login and email address to register."
|
||||
msgid "Oops, please check the provided login and email address to register."
|
||||
msgstr ""
|
||||
"Oups, veuillez vérifier l'identifiant et l'adresse email pour vous "
|
||||
"enregistrer."
|
||||
|
||||
#: IDF/gettexttemplates/idf/register/index.html.php:6 IDF/Views.php:88
|
||||
#: IDF/gettexttemplates/idf/register/index.html.php:6 IDF/Views.php:90
|
||||
msgid "Create Your Account"
|
||||
msgstr "Créez votre compte"
|
||||
|
||||
@ -2610,7 +2662,7 @@ msgstr "Le saviez-vous ?"
|
||||
#: IDF/gettexttemplates/idf/register/inputkey.html.php:3
|
||||
#: IDF/gettexttemplates/idf/user/changeemail.html.php:3
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery-inputkey.html.php:3
|
||||
msgid "Oups, we found an error in the form."
|
||||
msgid "Oops, we found an error in the form."
|
||||
msgstr "Oups, nous avons trouvé une erreur dans le formulaire."
|
||||
|
||||
#: IDF/gettexttemplates/idf/register/inputkey.html.php:4
|
||||
@ -2652,15 +2704,15 @@ msgid ""
|
||||
"<ul>\n"
|
||||
"<li>A commit or revision of the current code in the repository from which you started your work.</li>\n"
|
||||
"<li>A patch describing your changes with respect to the reference commit.</li>\n"
|
||||
"<li><strong>Ensure your patch does not contain any passwords or confidential information!</strong></li>\n"
|
||||
"<li><strong>Check your patch does not provide any password or confidential information!</strong></li>\n"
|
||||
"</ul>"
|
||||
msgstr ""
|
||||
"<p>Pour démarrer une revue de code vous devez fournir :</p>\n"
|
||||
"<ul>\n"
|
||||
"<li>La révision ou le commit de référence qui a servi de base à votre travail.</li>\n"
|
||||
"<li>Un patch qui décrit les changements par rapport à la référence.</li>\n"
|
||||
"<li><strong>Vérifiez votre patch pour ne fournir aucun mot de passe ou information confidentielle !</strong></li>\n"
|
||||
"</ul>"
|
||||
"<p>Pour démarrer une revue de code vous devez fournir :</p>\n"
|
||||
"<ul>\n"
|
||||
"<li>La révision ou le commit de référence qui a servi de base à votre travail.</li>\n"
|
||||
"<li>Un patch qui décrit les changements par rapport à la référence.</li>\n"
|
||||
"<li><strong>Vérifiez votre patch pour ne fournir aucun mot de passe ou information confidentielle !</strong></li>\n"
|
||||
"</ul>"
|
||||
|
||||
#: IDF/gettexttemplates/idf/review/create.html.php:9
|
||||
msgid ""
|
||||
@ -2850,7 +2902,7 @@ msgstr "Comment obtenir le code"
|
||||
#: IDF/gettexttemplates/idf/source/mercurial/tree.html.php:7
|
||||
#: IDF/gettexttemplates/idf/source/mtn/tree.html.php:7
|
||||
#: IDF/gettexttemplates/idf/source/svn/tree.html.php:7
|
||||
#: IDF/Views/Project.php:152
|
||||
#: IDF/Views/Project.php:163
|
||||
msgid "Age"
|
||||
msgstr "Âge"
|
||||
|
||||
@ -3067,13 +3119,10 @@ msgid ""
|
||||
"synchronization of your SSH key can take a couple of minutes. You can learn "
|
||||
"more about <a "
|
||||
"href=\"http://www.google.com/search?q=public+ssh+key+authentication\">SSH "
|
||||
"key authentification</a>."
|
||||
"key authentication</a>."
|
||||
msgstr ""
|
||||
"Vous devez probablement fournir <a href=\"%%url%%\">votre clef SSH</a>. La "
|
||||
"synchronisation de votre clef SSH peut prendre quelques minutes. Vous pouvez"
|
||||
" apprendre plus sur l'authentification <a "
|
||||
"href=\"http://www.google.fr/search?q=authentification+clef+ssh+publique\">avec"
|
||||
" une clef SSH publique</a>."
|
||||
"Vous devez probablement fournir <a href=\"%%url%%\">votre clef SSH</a>. La synchronisation de votre clef SSH peut prendre quelques minutes. Vous pouvez en apprendre plus sur l'authentification <a href=\"http://www.google.fr/search?\"\n"
|
||||
"\"q=authentification+clef+ssh+publique\">avec une clef SSH publique</a>."
|
||||
|
||||
#: IDF/gettexttemplates/idf/source/git/help.html.php:7
|
||||
#: IDF/gettexttemplates/idf/source/mtn/help.html.php:6
|
||||
@ -3315,10 +3364,14 @@ msgid "Key Management"
|
||||
msgstr "Administration des clefs"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:7
|
||||
msgid "Secondary Emails"
|
||||
msgstr "E-mail secondaires"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:8
|
||||
msgid "Extra password"
|
||||
msgstr "Mot de passe supplémentaire"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:8
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:9
|
||||
msgid ""
|
||||
"This password is used to access some of the external systems managed by our "
|
||||
"infrastructure. It will be regenerated if you change your password."
|
||||
@ -3326,30 +3379,38 @@ msgstr ""
|
||||
"Ce mot de passe est utilisé pour accéder à une partie des systèmes de notre "
|
||||
"infrastructure. Il sera régénéré si vous changez votre mot de passe."
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:9
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:10
|
||||
msgid "API key"
|
||||
msgstr "Clé d'API"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:10
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:11
|
||||
msgid ""
|
||||
"Your API key will be regenerated automatically if you change your password."
|
||||
msgstr ""
|
||||
"Votre clef d'API sera automatiquement régénérée si vous changez votre mot de"
|
||||
" passe."
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:11
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:12
|
||||
msgid "Update Your Account"
|
||||
msgstr "Mettre à jour votre compte"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:13
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:14
|
||||
msgid "Your Current Public Keys"
|
||||
msgstr "Vos clefs publique jusqu'à présent"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:14
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:15
|
||||
msgid "Delete this key"
|
||||
msgstr "Supprimer cette clef"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:15
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:16
|
||||
msgid "Your additional email addresses"
|
||||
msgstr "Vos e-mails secondaires"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:17
|
||||
msgid "Delete this address"
|
||||
msgstr "Supprimer cette e-mail"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:18
|
||||
msgid ""
|
||||
"If possible, use your real name. By using your real name, people will have "
|
||||
"more trust in your comments and remarks."
|
||||
@ -3358,7 +3419,7 @@ msgstr ""
|
||||
"personnes utilisant ce site auront naturellement plus confiance en vos "
|
||||
"commentaires et remarques."
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:16
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:19
|
||||
msgid ""
|
||||
"The extra password is used to access some of the external systems and the "
|
||||
"API key is used to interact with this website using a program."
|
||||
@ -3367,13 +3428,13 @@ msgstr ""
|
||||
"programme externe et le mot de passe supplémentaire est utilisé pour accéder"
|
||||
" à certaines parties de l'infrastructure."
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:17
|
||||
#: IDF/gettexttemplates/idf/user/myaccount.html.php:20
|
||||
msgid "Show API key and extra password"
|
||||
msgstr "Montrer la clef d'API et le mot de passe supplémentaire"
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery-ask.html.php:3
|
||||
msgid ""
|
||||
"Oups, please check the provided login or email address to recover your "
|
||||
"Oops, please check the provided login or email address to recover your "
|
||||
"password."
|
||||
msgstr ""
|
||||
"Oups, veuillez vérifier l'identifiant ou l'adresse email pour récupérer "
|
||||
@ -3446,10 +3507,10 @@ msgstr "Récupérer votre mot de passe"
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery-inputkey.html.php:8
|
||||
msgid ""
|
||||
"Just after providing the confirmation key, you will be able to reset your "
|
||||
"password and use again this website fully."
|
||||
"password and use this website fully."
|
||||
msgstr ""
|
||||
"Juste après avoir fourni la clef de vérification, vous pourrez donner votre "
|
||||
"mot de passe et réutiliser complètement le site."
|
||||
"Juste après avoir fourni la clef de vérification, vous pourrez réinitialiser"
|
||||
" votre mot de passe et réutiliser complètement le site."
|
||||
|
||||
#: IDF/gettexttemplates/idf/user/passrecovery.html.php:6
|
||||
msgid "Reset Your Password"
|
||||
@ -3747,10 +3808,6 @@ msgstr "Image"
|
||||
msgid "Other"
|
||||
msgstr "Autre"
|
||||
|
||||
#: IDF/Key.php:49
|
||||
msgid "user"
|
||||
msgstr "utilisateur"
|
||||
|
||||
#: IDF/Key.php:55
|
||||
msgid "public key"
|
||||
msgstr "clef publique"
|
||||
@ -3982,17 +4039,12 @@ msgstr "%s: Création de la revue %d - %s"
|
||||
msgid "New Code Review %s - %s (%s)"
|
||||
msgstr "Nouvelle revue de code %s - %s (%s)"
|
||||
|
||||
#: IDF/Scm/Git.php:183
|
||||
#, php-format
|
||||
msgid "Invalid value for the parameter %1$s: %2$s. Use %3$s."
|
||||
msgstr "Valeur invalide pour le paramètre %1$s: %2$s. Use %3$s."
|
||||
|
||||
#: IDF/Scm/Git.php:234 IDF/Scm/Mercurial.php:140
|
||||
#: IDF/Scm/Git.php:311 IDF/Scm/Mercurial.php:141
|
||||
#, php-format
|
||||
msgid "Folder %1$s not found in commit %2$s."
|
||||
msgstr "Répertoire %1$s non trouvé dans le commit %2$s."
|
||||
|
||||
#: IDF/Scm/Git.php:352 IDF/Scm/Mercurial.php:157
|
||||
#: IDF/Scm/Git.php:427 IDF/Scm/Mercurial.php:158
|
||||
#, php-format
|
||||
msgid "Not a valid tree: %s."
|
||||
msgstr "Arbre non valide : %s."
|
||||
@ -4040,7 +4092,7 @@ msgstr "lcname"
|
||||
msgid "Lower case version of the name for fast searching."
|
||||
msgstr "Version minuscule du nom pour chercher rapidement."
|
||||
|
||||
#: IDF/Template/Markdown.php:74
|
||||
#: IDF/Template/Markdown.php:81
|
||||
msgid "Create this documentation page"
|
||||
msgstr "Créer cette page de documentation"
|
||||
|
||||
@ -4115,7 +4167,7 @@ msgstr "Aucun projet n'a été trouvé."
|
||||
msgid "Update %s"
|
||||
msgstr "Mise à jour de %s"
|
||||
|
||||
#: IDF/Views/Admin.php:101 IDF/Views/Project.php:256
|
||||
#: IDF/Views/Admin.php:101 IDF/Views/Project.php:277
|
||||
msgid "The project has been updated."
|
||||
msgstr "Le projet a été mis à jour."
|
||||
|
||||
@ -4435,10 +4487,6 @@ msgstr "Le ticket a été ajouté à votre liste de surveillance."
|
||||
msgid "On your watch list."
|
||||
msgstr "Dans votre liste de surveillance."
|
||||
|
||||
#: IDF/Views/Project.php:72
|
||||
msgid "All Updates"
|
||||
msgstr "Mises à jour"
|
||||
|
||||
#: IDF/Views/Project.php:74
|
||||
msgid "Issues and Comments"
|
||||
msgstr "Tickets et commentaires"
|
||||
@ -4451,74 +4499,74 @@ msgstr "Documents"
|
||||
msgid "Reviews and Patches"
|
||||
msgstr "Revues et Patchs"
|
||||
|
||||
#: IDF/Views/Project.php:142
|
||||
#: IDF/Views/Project.php:153
|
||||
msgid "This table shows the project updates."
|
||||
msgstr "Ce tableau montre les mises à jour du projet."
|
||||
|
||||
#: IDF/Views/Project.php:153
|
||||
#: IDF/Views/Project.php:164
|
||||
msgid "Change"
|
||||
msgstr "Changement"
|
||||
|
||||
#: IDF/Views/Project.php:157
|
||||
#: IDF/Views/Project.php:168
|
||||
msgid "No changes were found."
|
||||
msgstr "Aucun changement trouvé."
|
||||
|
||||
#: IDF/Views/Project.php:248
|
||||
#: IDF/Views/Project.php:269
|
||||
#, php-format
|
||||
msgid "%s Project Summary"
|
||||
msgstr "Résumé du projet %s"
|
||||
|
||||
#: IDF/Views/Project.php:283
|
||||
#: IDF/Views/Project.php:304
|
||||
#, php-format
|
||||
msgid "%s Issue Tracking Configuration"
|
||||
msgstr "Configuration du gestionnaire de tickets de %s"
|
||||
|
||||
#: IDF/Views/Project.php:292
|
||||
#: IDF/Views/Project.php:313
|
||||
msgid "The issue tracking configuration has been saved."
|
||||
msgstr "La configuration du gestionnaire de tickets a été sauvegardée."
|
||||
|
||||
#: IDF/Views/Project.php:328
|
||||
#: IDF/Views/Project.php:349
|
||||
#, php-format
|
||||
msgid "%s Downloads Configuration"
|
||||
msgstr "Configuration des Téléchargements de %s"
|
||||
|
||||
#: IDF/Views/Project.php:337
|
||||
#: IDF/Views/Project.php:358
|
||||
msgid "The downloads configuration has been saved."
|
||||
msgstr "La configuration des téléchargements a été sauvegardée."
|
||||
|
||||
#: IDF/Views/Project.php:371
|
||||
#: IDF/Views/Project.php:392
|
||||
#, php-format
|
||||
msgid "%s Documentation Configuration"
|
||||
msgstr "Configuration de la documentation de %s"
|
||||
|
||||
#: IDF/Views/Project.php:380
|
||||
#: IDF/Views/Project.php:401
|
||||
msgid "The documentation configuration has been saved."
|
||||
msgstr "La configuration de la documentation a été sauvegardée."
|
||||
|
||||
#: IDF/Views/Project.php:414
|
||||
#: IDF/Views/Project.php:435
|
||||
#, php-format
|
||||
msgid "%s Project Members"
|
||||
msgstr "Membres du projet %s"
|
||||
|
||||
#: IDF/Views/Project.php:423
|
||||
#: IDF/Views/Project.php:444
|
||||
msgid "The project membership has been saved."
|
||||
msgstr "Les membres du projet ont été sauvegardés."
|
||||
|
||||
#: IDF/Views/Project.php:446
|
||||
#: IDF/Views/Project.php:467
|
||||
#, php-format
|
||||
msgid "%s Tabs Access Rights"
|
||||
msgstr "Accès aux onglets de %s"
|
||||
|
||||
#: IDF/Views/Project.php:460
|
||||
#: IDF/Views/Project.php:481
|
||||
msgid "The project tabs access rights have been saved."
|
||||
msgstr "Les droits d'accès aux onglets du projet ont été sauvegardés."
|
||||
|
||||
#: IDF/Views/Project.php:506
|
||||
#: IDF/Views/Project.php:527
|
||||
#, php-format
|
||||
msgid "%s Source"
|
||||
msgstr "Source de %s"
|
||||
|
||||
#: IDF/Views/Project.php:520
|
||||
#: IDF/Views/Project.php:541
|
||||
msgid "The project source configuration has been saved."
|
||||
msgstr "La configuration du dépôt a été sauvegardée."
|
||||
|
||||
@ -4570,7 +4618,7 @@ msgstr "%s Révision ambiguë "
|
||||
msgid "%1$s %2$s Change Log"
|
||||
msgstr "Changements %2$s de %1$s"
|
||||
|
||||
#: IDF/Views/Source.php:146 IDF/Views/Source.php:227 IDF/Views/Source.php:359
|
||||
#: IDF/Views/Source.php:146 IDF/Views/Source.php:227 IDF/Views/Source.php:360
|
||||
#, php-format
|
||||
msgid "%1$s %2$s Source Tree"
|
||||
msgstr "Arbre des sources %2$s de %1$s"
|
||||
@ -4605,19 +4653,23 @@ msgstr "Tous les tickets que vous avez soumis ont été fixés, yeah !"
|
||||
msgid "Your personal information has been updated."
|
||||
msgstr "Vos informations personnelles ont été mises à jour."
|
||||
|
||||
#: IDF/Views/User.php:132
|
||||
#: IDF/Views/User.php:133
|
||||
msgid "Your Account"
|
||||
msgstr "Votre compte"
|
||||
|
||||
#: IDF/Views/User.php:155
|
||||
#: IDF/Views/User.php:157
|
||||
msgid "The public key has been deleted."
|
||||
msgstr "La clef clef publique a été supprimée."
|
||||
|
||||
#: IDF/Views/User.php:178
|
||||
#: IDF/Views/User.php:177
|
||||
msgid "The address has been deleted."
|
||||
msgstr "Cet e-mail a été supprimé."
|
||||
|
||||
#: IDF/Views/User.php:200
|
||||
msgid "Confirm The Email Change"
|
||||
msgstr "Confirmez le changement d'adresse"
|
||||
|
||||
#: IDF/Views/User.php:203
|
||||
#: IDF/Views/User.php:232
|
||||
#, php-format
|
||||
msgid "Your new email address \"%s\" has been validated. Thank you!"
|
||||
msgstr "Votre nouvelle adresse email \"%s\" a été validée. Merci !"
|
||||
@ -4694,22 +4746,22 @@ msgstr "La page de documentation a été supprimée."
|
||||
msgid "Delete Page %s"
|
||||
msgstr "Suppprimer la page %s"
|
||||
|
||||
#: IDF/Views.php:124 IDF/Views.php:150
|
||||
#: IDF/Views.php:126 IDF/Views.php:152
|
||||
msgid "Confirm Your Account Creation"
|
||||
msgstr "Confirmez la création de votre compte"
|
||||
|
||||
#: IDF/Views.php:170
|
||||
#: IDF/Views.php:172
|
||||
msgid ""
|
||||
"Welcome! You can now participate in the life of your project of choice."
|
||||
msgstr ""
|
||||
"Bienvenue ! Vous pouvez maintenant prendre part à la vie du projet de votre "
|
||||
"choix."
|
||||
|
||||
#: IDF/Views.php:196 IDF/Views.php:220 IDF/Views.php:261
|
||||
#: IDF/Views.php:198 IDF/Views.php:222 IDF/Views.php:263
|
||||
msgid "Password Recovery"
|
||||
msgstr "Récupération du mot de passe"
|
||||
|
||||
#: IDF/Views.php:240
|
||||
#: IDF/Views.php:242
|
||||
msgid ""
|
||||
"Welcome back! Next time, you can use your broswer options to remember the "
|
||||
"password."
|
||||
@ -4717,11 +4769,11 @@ msgstr ""
|
||||
"Re bienvenue ! La prochaine fois, vous pouvez utiliser les options de votre "
|
||||
"navigateur pour qu'il se souvienne de votre mot de passe."
|
||||
|
||||
#: IDF/Views.php:282
|
||||
#: IDF/Views.php:284
|
||||
msgid "Here to Help You!"
|
||||
msgstr "Ici pour vous aider !"
|
||||
|
||||
#: IDF/Views.php:298
|
||||
#: IDF/Views.php:300
|
||||
msgid "InDefero API (Application Programming Interface)"
|
||||
msgstr "API d'InDefero (Interface de Programmation de l'Application)"
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -32,6 +32,7 @@
|
||||
{block extraheader}{/block}
|
||||
<title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title>
|
||||
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
|
||||
{appversion}
|
||||
</head>
|
||||
<body>
|
||||
<div id="{block docid}doc3{/block}">
|
||||
|
@ -32,6 +32,7 @@
|
||||
{block extraheader}{/block}
|
||||
<title>{block pagetitle}{$page_title|strip_tags}{/block}</title>
|
||||
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
|
||||
{appversion}
|
||||
</head>
|
||||
<body>
|
||||
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
|
||||
|
@ -32,6 +32,7 @@
|
||||
{block extraheader}{/block}
|
||||
<title>{block pagetitle}{$page_title|strip_tags}{/block}{if $project} - {$project.shortdesc}{/if}</title>
|
||||
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
|
||||
{appversion}
|
||||
</head>
|
||||
<body>
|
||||
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
|
||||
|
@ -31,6 +31,7 @@
|
||||
{block extraheader}{/block}
|
||||
<title>{block pagetitle}{$page_title|strip_tags}{/block}</title>
|
||||
<script type="text/javascript" src="{media '/idf/js/jquery-1.2.6.min.js'}"></script>
|
||||
{appversion}
|
||||
</head>
|
||||
<body>
|
||||
<div id="{block docid}doc3{/block}" class="{block docclass}yui-t3{/block}">
|
||||
|
@ -16,7 +16,7 @@
|
||||
{/block}
|
||||
{block context}
|
||||
<div id="stats" class="issue-submit-info">
|
||||
<h3 class="a-c">Forge statistics</h3>
|
||||
<h3 class="a-c">{trans 'Forge statistics'}</h3>
|
||||
<table>
|
||||
<tr><td class="right">{trans 'Projects:'}</td><td>{$stats.projects}</td></tr>
|
||||
<tr><td class="right">{trans 'Members:'}</td><td>{$stats.members}</td></tr>
|
||||
|
@ -1,7 +1,7 @@
|
||||
{extends "idf/issues/base.html"}
|
||||
{block titleicon}{if $form}<form class="star" method="post" action="{url 'IDF_Views_Issue::star', array($project.shortname, $issue.id)}"><input type="image" src="{if $starred}{media '/idf/img/star.png'}{else}{media '/idf/img/star-grey.png'}{/if}" name="submit" title="{if $starred}{trans 'Remove this issue from your watch list'}{else}{trans 'Add this issue to your watch list'}{/if}" /></form> {/if}{/block}
|
||||
{block body}
|
||||
<div style="float:right;">
|
||||
<div class="issue-prev-next">
|
||||
{if $previous_issue_id}
|
||||
<a href="{url 'IDF_Views_Issue::view', array($project.shortname, $previous_issue_id)}" title="{if $closed}{trans 'Click here to view the previous closed issue'}{else}{trans 'Click here to view the previous open issue'}{/if}">Previous issue</a>
|
||||
{/if}
|
||||
|
@ -13,9 +13,12 @@
|
||||
{/block}
|
||||
|
||||
{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><strong>{trans 'Filter by type'}</strong><br />
|
||||
{foreach $all_model_filters as $filter_key => $filter_name}
|
||||
{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 />
|
||||
{/if}
|
||||
{/foreach}
|
||||
</p>
|
||||
{/block}
|
||||
|
@ -9,9 +9,9 @@
|
||||
<tr>
|
||||
<th><strong>{trans 'Author:'}</strong></th><td>{showuser $rcommit.get_author(), $request, $cobject.author}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{if $cobject.branch}<tr>
|
||||
<th><strong>{trans 'Branch:'}</strong></th><td>{$cobject.branch}</td>
|
||||
</tr>
|
||||
</tr>{/if}
|
||||
<tr>
|
||||
<th><strong>{trans 'Commit:'}</strong></th><td class="mono"><a href="{url 'IDF_Views_Source::treeBase', array($project.shortname, $commit)}" title="{trans 'View corresponding source tree'}">{$cobject.commit}</a></td>
|
||||
</tr>
|
||||
|
5
src/IDF/version.php
Normal file
5
src/IDF/version.php
Normal file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
return array(
|
||||
'version' => '1.1',
|
||||
'revision' => '$Format:%H$',
|
||||
);
|
30
test/IDF/DiffTest.php
Normal file
30
test/IDF/DiffTest.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
include 'IDF/Diff.php';
|
||||
|
||||
class IDF_DiffTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testParse()
|
||||
{
|
||||
$datadir = DATADIR.'/'.__CLASS__;
|
||||
|
||||
foreach (glob($datadir.'/*.diff') as $difffile)
|
||||
{
|
||||
$diffprefix = 0;
|
||||
if (strpos($difffile, '-git-') != false || strpos($difffile, '-hg-') != false)
|
||||
{
|
||||
$diffprefix = 1;
|
||||
}
|
||||
|
||||
$expectedfile = str_replace('.diff', '.expected', $difffile);
|
||||
$expectedcontent = @file_get_contents($expectedfile);
|
||||
|
||||
$diffcontent = file_get_contents($difffile);
|
||||
$diff = new IDF_Diff($diffcontent, $diffprefix);
|
||||
$this->assertEquals(unserialize($expectedcontent),
|
||||
$diff->parse(),
|
||||
'parsed diff '.$difffile.' does not match');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
7
test/bootstrap.php
Normal file
7
test/bootstrap.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
define('SRCDIR', realpath(dirname(__FILE__) . '/../src'));
|
||||
define('TESTDIR', dirname(__FILE__));
|
||||
define('DATADIR', TESTDIR . '/data');
|
||||
|
||||
set_include_path(get_include_path() . PATH_SEPARATOR . SRCDIR);
|
1032
test/data/IDF_DiffTest/test-01-svn-new-files.diff
Normal file
1032
test/data/IDF_DiffTest/test-01-svn-new-files.diff
Normal file
File diff suppressed because it is too large
Load Diff
1
test/data/IDF_DiffTest/test-01-svn-new-files.expected
Normal file
1
test/data/IDF_DiffTest/test-01-svn-new-files.expected
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,389 @@
|
||||
Index: LinuxBIOSv1/src/include/cpu/i786/cpufixup.h
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/include/cpu/i786/cpufixup.h (Revision 0)
|
||||
+++ LinuxBIOSv1/src/include/cpu/i786/cpufixup.h (Revision 665)
|
||||
@@ -0,0 +1,11 @@
|
||||
+#ifndef CPU_I786_CPUFIXUP_H
|
||||
+#define CPU_I786_CPUFIXUP_H
|
||||
+
|
||||
+
|
||||
+void i786_cpufixup(struct mem_range *mem);
|
||||
+
|
||||
+#define L3_CACHE_DISABLE 0x40
|
||||
+
|
||||
+#endif /* CPU_I786_CPUFIXUP_H */
|
||||
+
|
||||
+
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\include\cpu\i786\cpufixup.h
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout (Revision 0)
|
||||
+++ LinuxBIOSv1/src/mainboard/tyan/guiness/cmos.layout (Revision 665)
|
||||
@@ -0,0 +1,63 @@
|
||||
+entries
|
||||
+
|
||||
+#start-bit length config config-ID name
|
||||
+#0 8 r 0 seconds
|
||||
+#8 8 r 0 alarm_seconds
|
||||
+#16 8 r 0 minutes
|
||||
+#24 8 r 0 alarm_minutes
|
||||
+#32 8 r 0 hours
|
||||
+#40 8 r 0 alarm_hours
|
||||
+#48 8 r 0 day_of_week
|
||||
+#56 8 r 0 day_of_month
|
||||
+#64 8 r 0 month
|
||||
+#72 8 r 0 year
|
||||
+#80 4 r 0 rate_select
|
||||
+#84 3 r 0 REF_Clock
|
||||
+#87 1 r 0 UIP
|
||||
+#88 1 r 0 auto_switch_DST
|
||||
+#89 1 r 0 24_hour_mode
|
||||
+#90 1 r 0 binary_values_enable
|
||||
+#91 1 r 0 square-wave_out_enable
|
||||
+#92 1 r 0 update_finished_enable
|
||||
+#93 1 r 0 alarm_interrupt_enable
|
||||
+#94 1 r 0 periodic_interrupt_enable
|
||||
+#95 1 r 0 disable_clock_updates
|
||||
+#96 288 r 0 temporary_filler
|
||||
+0 384 r 0 reserved_memory
|
||||
+384 1 e 4 boot_option
|
||||
+385 1 e 4 last_boot
|
||||
+386 3 e 5 baud_rate
|
||||
+392 4 e 6 debug_level
|
||||
+396 1 e 1 power_on_after_fail
|
||||
+#401 1 e 1 ECC_memory
|
||||
+#402 1 e 2 hda_disk
|
||||
+#403 1 e 2 hdb_disk
|
||||
+#404 1 e 2 hdc_disk
|
||||
+#405 1 e 2 hdd_disk
|
||||
+#406 2 e 7 boot_device
|
||||
+
|
||||
+enumerations
|
||||
+
|
||||
+#ID value text
|
||||
+1 0 Disable
|
||||
+1 1 Enable
|
||||
+#2 0 No
|
||||
+#2 1 Yes
|
||||
+4 0 Fallback
|
||||
+4 1 Normal
|
||||
+5 0 115200
|
||||
+5 1 57600
|
||||
+5 2 38400
|
||||
+5 3 19200
|
||||
+5 4 9600
|
||||
+5 5 4800
|
||||
+5 6 2400
|
||||
+5 7 1200
|
||||
+6 6 Notice
|
||||
+6 7 Info
|
||||
+6 8 Debug
|
||||
+6 9 Spew
|
||||
+#7 0 Network
|
||||
+#7 1 HDD
|
||||
+#7 2 Floppy
|
||||
+#7 3 ROM
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\mainboard\tyan\guiness\cmos.layout
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/config/linuxbios_c.ld
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/config/linuxbios_c.ld (Revision 0)
|
||||
+++ LinuxBIOSv1/src/config/linuxbios_c.ld (Revision 665)
|
||||
@@ -0,0 +1,105 @@
|
||||
+/*
|
||||
+ * Memory map:
|
||||
+ *
|
||||
+ * _RAMBASE
|
||||
+ * : data segment
|
||||
+ * : bss segment
|
||||
+ * : heap
|
||||
+ * : stack
|
||||
+ */
|
||||
+/*
|
||||
+ * Bootstrap code for the STPC Consumer
|
||||
+ * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
|
||||
+ *
|
||||
+ * $Id$
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * Written by Johan Rydberg, based on work by Daniel Kahlin.
|
||||
+ * Rewritten by Eric Biederman
|
||||
+ */
|
||||
+/*
|
||||
+ * We use ELF as output format. So that we can
|
||||
+ * debug the code in some form.
|
||||
+ */
|
||||
+INCLUDE ldoptions
|
||||
+
|
||||
+ENTRY(_start)
|
||||
+
|
||||
+SECTIONS
|
||||
+{
|
||||
+ . = _RAMBASE;
|
||||
+ /*
|
||||
+ * First we place the code and read only data (typically const declared).
|
||||
+ * This get placed in rom.
|
||||
+ */
|
||||
+ .text : {
|
||||
+ _text = .;
|
||||
+ *(.text);
|
||||
+ *(.text.*);
|
||||
+ . = ALIGN(16);
|
||||
+ _etext = .;
|
||||
+ }
|
||||
+ .rodata : {
|
||||
+ _rodata = .;
|
||||
+ . = ALIGN(4);
|
||||
+ streams = . ;
|
||||
+ *(.rodata.streams)
|
||||
+ estreams = .;
|
||||
+ . = ALIGN(4);
|
||||
+ pci_drivers = . ;
|
||||
+ *(.rodata.pci_drivers)
|
||||
+ epci_drivers = . ;
|
||||
+ *(.rodata)
|
||||
+ *(.rodata.*)
|
||||
+ _erodata = .;
|
||||
+ }
|
||||
+ /*
|
||||
+ * After the code we place initialized data (typically initialized
|
||||
+ * global variables). This gets copied into ram by startup code.
|
||||
+ * __data_start and __data_end shows where in ram this should be placed,
|
||||
+ * whereas __data_loadstart and __data_loadend shows where in rom to
|
||||
+ * copy from.
|
||||
+ */
|
||||
+ .data : {
|
||||
+ _data = .;
|
||||
+ *(.data)
|
||||
+ _edata = .;
|
||||
+ }
|
||||
+ /*
|
||||
+ * bss does not contain data, it is just a space that should be zero
|
||||
+ * initialized on startup. (typically uninitialized global variables)
|
||||
+ * crt0.S fills between _bss and _ebss with zeroes.
|
||||
+ */
|
||||
+ _bss = .;
|
||||
+ .bss . : {
|
||||
+ *(.bss)
|
||||
+ *(.sbss)
|
||||
+ *(COMMON)
|
||||
+ }
|
||||
+ _ebss = .;
|
||||
+ _end = .;
|
||||
+ _stack = .;
|
||||
+ .stack . : {
|
||||
+ /* Reserve a stack for each possible cpu, +1 extra */
|
||||
+ . = ((MAX_CPUS * STACK_SIZE) + STACK_SIZE) ;
|
||||
+ }
|
||||
+ _estack = .;
|
||||
+ _heap = .;
|
||||
+ .heap . : {
|
||||
+ /* Reserve 256K for the heap */
|
||||
+ . = HEAP_SIZE ;
|
||||
+ . = ALIGN(4);
|
||||
+ }
|
||||
+ _eheap = .;
|
||||
+ /* The ram segment
|
||||
+ * This is all address of the memory resident copy of linuxBIOS.
|
||||
+ */
|
||||
+ _ram_seg = _text;
|
||||
+ _eram_seg = _eheap;
|
||||
+ /DISCARD/ : {
|
||||
+ *(.comment)
|
||||
+ *(.note)
|
||||
+ }
|
||||
+}
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\config\linuxbios_c.ld
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h (Revision 0)
|
||||
+++ LinuxBIOSv1/src/arch/i386/include/arch/rom_segs.h (Revision 665)
|
||||
@@ -0,0 +1,10 @@
|
||||
+#ifndef ROM_SEGS_H
|
||||
+#define ROM_SEGS_H
|
||||
+
|
||||
+#define ROM_CODE_SEG 0x08
|
||||
+#define ROM_DATA_SEG 0x10
|
||||
+
|
||||
+#define CACHE_RAM_CODE_SEG 0x18
|
||||
+#define CACHE_RAM_DATA_SEG 0x20
|
||||
+
|
||||
+#endif /* ROM_SEGS_H */
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\arch\i386\include\arch\rom_segs.h
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
||||
Index: LinuxBIOSv1/src/arch/i386/lib/c_start.S
|
||||
===================================================================
|
||||
--- LinuxBIOSv1/src/arch/i386/lib/c_start.S (Revision 0)
|
||||
+++ LinuxBIOSv1/src/arch/i386/lib/c_start.S (Revision 665)
|
||||
@@ -0,0 +1,135 @@
|
||||
+#include <arch/asm.h>
|
||||
+#include <arch/intel.h>
|
||||
+#ifdef SMP
|
||||
+#include <cpu/p6/apic.h>
|
||||
+#endif
|
||||
+ .section ".text"
|
||||
+ .code32
|
||||
+ .globl _start
|
||||
+_start:
|
||||
+ cli
|
||||
+ lgdt %cs:gdtaddr
|
||||
+ ljmp $0x10, $1f
|
||||
+1: movl $0x18, %ax
|
||||
+ movl %eax, %ds
|
||||
+ movl %eax, %es
|
||||
+ movl %eax, %ss
|
||||
+ movl %eax, %fs
|
||||
+ movl %eax, %gs
|
||||
+
|
||||
+ intel_chip_post_macro(0x13) /* post 12 */
|
||||
+
|
||||
+ /** clear stack */
|
||||
+ leal EXT(_stack), %edi
|
||||
+ movl $EXT(_estack), %ecx
|
||||
+ subl %edi, %ecx
|
||||
+ xorl %eax, %eax
|
||||
+ rep
|
||||
+ stosb
|
||||
+
|
||||
+ /** clear bss */
|
||||
+ leal EXT(_bss), %edi
|
||||
+ movl $EXT(_ebss), %ecx
|
||||
+ subl %edi, %ecx
|
||||
+ jz .Lnobss
|
||||
+ xorl %eax, %eax
|
||||
+ rep
|
||||
+ stosb
|
||||
+.Lnobss:
|
||||
+
|
||||
+ /* set new stack */
|
||||
+ movl $_estack, %esp
|
||||
+#ifdef SMP
|
||||
+ /* Get the cpu id */
|
||||
+ movl $APIC_DEFAULT_BASE, %edi
|
||||
+ movl APIC_ID(%edi), %eax
|
||||
+ shrl $24, %eax
|
||||
+
|
||||
+ /* Get the cpu index (MAX_CPUS on error) */
|
||||
+ movl $-4, %ebx
|
||||
+1: addl $4, %ebx
|
||||
+ cmpl $(MAX_CPUS << 2), %ebx
|
||||
+ je 2
|
||||
+ cmpl %eax, EXT(initial_apicid)(%ebx)
|
||||
+ jne 1b
|
||||
+2: shrl $2, %ebx
|
||||
+
|
||||
+ /* Now compute the appropriate stack */
|
||||
+ movl %ebx, %eax
|
||||
+ movl $STACK_SIZE, %ebx
|
||||
+ mull %ebx
|
||||
+ subl %eax, %esp
|
||||
+
|
||||
+ /* push the boot_complete flag */
|
||||
+ pushl %ebp
|
||||
+
|
||||
+ /* Save the stack location */
|
||||
+ movl %esp, %ebp
|
||||
+
|
||||
+ /*
|
||||
+ * Now we are finished. Memory is up, data is copied and
|
||||
+ * bss is cleared. Now we call the main routine and
|
||||
+ * let it do the rest.
|
||||
+ */
|
||||
+ intel_chip_post_macro(0xfe) /* post fe */
|
||||
+
|
||||
+ /* Resort the stack location */
|
||||
+ movl %ebp, %esp
|
||||
+
|
||||
+ /* The boot_complete flag has already been pushed */
|
||||
+ call EXT(hardwaremain)
|
||||
+ /*NOTREACHED*/
|
||||
+.Lhlt:
|
||||
+ intel_chip_post_macro(0xee) /* post fe */
|
||||
+ hlt
|
||||
+ jmp .Lhlt
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+ .globl gdt, gdt_end, gdt_limit
|
||||
+
|
||||
+gdt_limit = gdt_end - gdt - 1 /* compute the table limit */
|
||||
+gdtaddr:
|
||||
+ .word gdt_limit
|
||||
+ .long gdt /* we know the offset */
|
||||
+
|
||||
+gdt:
|
||||
+// selgdt 0
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+// selgdt 8
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+// selgdt 0x10
|
||||
+/* flat code segment */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0x00, 0x9b, 0xcf, 0x00
|
||||
+
|
||||
+//selgdt 0x18
|
||||
+/* flat data segment */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0x00, 0x93, 0xcf, 0x00
|
||||
+
|
||||
+//selgdt 0x20
|
||||
+ .word 0x0000, 0x0000 /* dummy */
|
||||
+ .byte 0x00, 0x00, 0x00, 0x00
|
||||
+
|
||||
+#if defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1)
|
||||
+ // from monty:
|
||||
+ /* 0x00009a00,0000ffffULL, 20h: 16-bit 64k code at 0x00000000 */
|
||||
+ /* 0x00009200,0000ffffULL 28h: 16-bit 64k data at 0x00000000 */
|
||||
+// selgdt 0x28
|
||||
+/*16-bit 64k code at 0x00000000 */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0, 0x9a, 0, 0
|
||||
+
|
||||
+// selgdt 0x30
|
||||
+/*16-bit 64k data at 0x00000000 */
|
||||
+ .word 0xffff, 0x0000
|
||||
+ .byte 0, 0x92, 0, 0
|
||||
+#endif // defined(CONFIG_VGABIOS) && (CONFIG_VGABIOS == 1)
|
||||
+gdt_end:
|
||||
+
|
||||
+.code32
|
||||
|
||||
Eigenschaftsänderungen: LinuxBIOSv1\src\arch\i386\lib\c_start.S
|
||||
___________________________________________________________________
|
||||
Hinzugefügt: svn:keywords
|
||||
+ Author Date Id Revision
|
||||
Hinzugefügt: svn:eol-style
|
||||
+ native
|
||||
|
File diff suppressed because one or more lines are too long
13
test/data/IDF_DiffTest/test-03-mtn-new-file-single-line.diff
Normal file
13
test/data/IDF_DiffTest/test-03-mtn-new-file-single-line.diff
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# old_revision []
|
||||
#
|
||||
# add_dir ""
|
||||
#
|
||||
# add_file "a"
|
||||
# content [03cfd743661f07975fa2f1220c5194cbaff48451]
|
||||
#
|
||||
============================================================
|
||||
--- /dev/null
|
||||
+++ a 03cfd743661f07975fa2f1220c5194cbaff48451
|
||||
@@ -0,0 +1 @@
|
||||
+abc
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
14
test/data/IDF_DiffTest/test-04-mtn-new-file-multi-lines.diff
Normal file
14
test/data/IDF_DiffTest/test-04-mtn-new-file-multi-lines.diff
Normal file
@ -0,0 +1,14 @@
|
||||
#
|
||||
# old_revision []
|
||||
#
|
||||
# add_dir ""
|
||||
#
|
||||
# add_file "a"
|
||||
# content [9decd90bc2eedb78c74d5059a6bb6244dd2d0562]
|
||||
#
|
||||
============================================================
|
||||
--- /dev/null
|
||||
+++ a 9decd90bc2eedb78c74d5059a6bb6244dd2d0562
|
||||
@@ -0,0 +1,2 @@
|
||||
+abc
|
||||
+abc
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
@ -0,0 +1,13 @@
|
||||
#
|
||||
# old_revision [1f31865f7c91525e96aa7615e660303ca04c708f]
|
||||
#
|
||||
# patch "a"
|
||||
# from [9decd90bc2eedb78c74d5059a6bb6244dd2d0562]
|
||||
# to [03cfd743661f07975fa2f1220c5194cbaff48451]
|
||||
#
|
||||
============================================================
|
||||
--- a 9decd90bc2eedb78c74d5059a6bb6244dd2d0562
|
||||
+++ a 03cfd743661f07975fa2f1220c5194cbaff48451
|
||||
@@ -1,2 +1 @@ abc
|
||||
abc
|
||||
-abc
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:3:"abc";}i:1;a:3:{i:0;i:2;i:1;s:0:"";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"2";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
13
test/data/IDF_DiffTest/test-06-mtn-single-line.diff
Normal file
13
test/data/IDF_DiffTest/test-06-mtn-single-line.diff
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# old_revision [019c2c7a876819db59add22c98c7939e32d81161]
|
||||
#
|
||||
# patch "a"
|
||||
# from [03cfd743661f07975fa2f1220c5194cbaff48451]
|
||||
# to [023cc93272e5cbc11f128ffc90fbbe42f6f08d8c]
|
||||
#
|
||||
============================================================
|
||||
--- a 03cfd743661f07975fa2f1220c5194cbaff48451
|
||||
+++ a 023cc93272e5cbc11f128ffc90fbbe42f6f08d8c
|
||||
@@ -1 +1 @@
|
||||
-abc
|
||||
+ls
|
1
test/data/IDF_DiffTest/test-06-mtn-single-line.expected
Normal file
1
test/data/IDF_DiffTest/test-06-mtn-single-line.expected
Normal file
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:3:"abc";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:2:"ls";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
@ -0,0 +1,13 @@
|
||||
#
|
||||
# old_revision [7950c8a4e13342d1dca94c05efc49b291ab327f5]
|
||||
#
|
||||
# patch "a"
|
||||
# from [023cc93272e5cbc11f128ffc90fbbe42f6f08d8c]
|
||||
# to [b3d40c241ccfd6ff1a06047a9f6d609227d2893f]
|
||||
#
|
||||
============================================================
|
||||
--- a 023cc93272e5cbc11f128ffc90fbbe42f6f08d8c
|
||||
+++ a b3d40c241ccfd6ff1a06047a9f6d609227d2893f
|
||||
@@ -1 +1,2 @@ ls
|
||||
ls
|
||||
+ls
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:2:"ls";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:2:"ls";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
@ -0,0 +1,18 @@
|
||||
#
|
||||
# old_revision [9b51b47c6fdd4918f970b81a8672503b8bb30402]
|
||||
#
|
||||
# patch "a"
|
||||
# from [b3d40c241ccfd6ff1a06047a9f6d609227d2893f]
|
||||
# to [4ba8cb789fc34bd4557b5bbf7cb9f4b68b3a9f5e]
|
||||
#
|
||||
# set "a"
|
||||
# attr "foo"
|
||||
# value "bar"
|
||||
#
|
||||
============================================================
|
||||
--- a b3d40c241ccfd6ff1a06047a9f6d609227d2893f
|
||||
+++ a 4ba8cb789fc34bd4557b5bbf7cb9f4b68b3a9f5e
|
||||
@@ -1,2 +1,3 @@ ls
|
||||
ls
|
||||
ls
|
||||
+l
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:2:"ls";}i:1;a:3:{i:0;i:2;i:1;i:2;i:2;s:2:"ls";}i:2;a:3:{i:0;s:0:"";i:1;i:3;i:2;s:1:"l";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"2";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"3";}}}}}
|
5
test/data/IDF_DiffTest/test-09-hg-new-file.diff
Normal file
5
test/data/IDF_DiffTest/test-09-hg-new-file.diff
Normal file
@ -0,0 +1,5 @@
|
||||
diff -r 000000000000 -r 5203a6d9dc87 a
|
||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
||||
+++ b/a Wed Mar 16 16:12:09 2011 +0100
|
||||
@@ -0,0 +1,1 @@
|
||||
+foo
|
1
test/data/IDF_DiffTest/test-09-hg-new-file.expected
Normal file
1
test/data/IDF_DiffTest/test-09-hg-new-file.expected
Normal file
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"1";}}}}}
|
6
test/data/IDF_DiffTest/test-10-hg-change.diff
Normal file
6
test/data/IDF_DiffTest/test-10-hg-change.diff
Normal file
@ -0,0 +1,6 @@
|
||||
diff -r 5203a6d9dc87 -r 76fd636881a3 a
|
||||
--- a/a Wed Mar 16 16:12:09 2011 +0100
|
||||
+++ b/a Wed Mar 16 16:13:23 2011 +0100
|
||||
@@ -1,1 +1,2 @@
|
||||
foo
|
||||
+bf
|
1
test/data/IDF_DiffTest/test-10-hg-change.expected
Normal file
1
test/data/IDF_DiffTest/test-10-hg-change.expected
Normal file
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:3:"foo";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:2:"bf";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"1";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"2";}}}}}
|
13
test/data/IDF_DiffTest/test-11-git-add-singleline-file.diff
Normal file
13
test/data/IDF_DiffTest/test-11-git-add-singleline-file.diff
Normal file
@ -0,0 +1,13 @@
|
||||
commit c28f1dd026dd832398d699fa1fee0cce0562f350
|
||||
Author: Patrick Georgi <patrick@georgi-clan.de>
|
||||
Date: Wed Mar 16 15:14:41 2011 +0100
|
||||
|
||||
foo
|
||||
|
||||
diff --git a/a b/a
|
||||
new file mode 100644
|
||||
index 0000000..8baef1b
|
||||
--- /dev/null
|
||||
+++ b/a
|
||||
@@ -0,0 +1 @@
|
||||
+abc
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"a";a:2:{s:6:"chunks";a:1:{i:0;a:1:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:3:"abc";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
@ -0,0 +1,9 @@
|
||||
diff --git a/b b/b
|
||||
new file mode 100644
|
||||
index 0000000..bfdaa0f
|
||||
--- /dev/null
|
||||
+++ b/b
|
||||
@@ -0,0 +1,3 @@
|
||||
+a
|
||||
+b
|
||||
+
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:1:"b";}i:2;a:3:{i:0;s:0:"";i:1;i:3;i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"0";i:1;s:1:"0";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"3";}}}}}
|
9
test/data/IDF_DiffTest/test-13-git-change-file.diff
Normal file
9
test/data/IDF_DiffTest/test-13-git-change-file.diff
Normal file
@ -0,0 +1,9 @@
|
||||
diff --git a/b b/b
|
||||
index bfdaa0f..e528a92 100644
|
||||
--- a/b
|
||||
+++ b/b
|
||||
@@ -1,3 +1,4 @@
|
||||
a
|
||||
+l
|
||||
b
|
||||
|
1
test/data/IDF_DiffTest/test-13-git-change-file.expected
Normal file
1
test/data/IDF_DiffTest/test-13-git-change-file.expected
Normal file
@ -0,0 +1 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:4:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;s:0:"";i:1;i:2;i:2;s:1:"l";}i:2;a:3:{i:0;i:2;i:1;i:3;i:2;s:1:"b";}i:3;a:3:{i:0;i:3;i:1;i:4;i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"3";}i:1;a:2:{i:0;s:1:"1";i:1;s:1:"4";}}}}}
|
@ -0,0 +1,8 @@
|
||||
diff --git a/b b/b
|
||||
index bfdaa0f..7898192 100644
|
||||
--- a/b
|
||||
+++ b/b
|
||||
@@ -1,3 +1 @@
|
||||
a
|
||||
-b
|
||||
-
|
@ -0,0 +1 @@
|
||||
a:1:{s:1:"b";a:2:{s:6:"chunks";a:1:{i:0;a:3:{i:0;a:3:{i:0;s:1:"1";i:1;s:1:"1";i:2;s:1:"a";}i:1;a:3:{i:0;i:2;i:1;s:0:"";i:2;s:1:"b";}i:2;a:3:{i:0;i:3;i:1;s:0:"";i:2;b:0;}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;s:1:"3";}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
@ -0,0 +1,7 @@
|
||||
diff --git a/test_file b/test_file
|
||||
index 2134e75..2eaf9ea 100644
|
||||
--- a/test_file
|
||||
+++ b/test_file
|
||||
@@ -1 +1 @@
|
||||
-Steddy is awesome
|
||||
+Steddy is very awesome
|
@ -0,0 +1 @@
|
||||
a:1:{s:9:"test_file";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:17:"Steddy is awesome";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:22:"Steddy is very awesome";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
8
test/data/IDF_DiffTest/test-16-git-newline-removed.diff
Normal file
8
test/data/IDF_DiffTest/test-16-git-newline-removed.diff
Normal file
@ -0,0 +1,8 @@
|
||||
diff --git a/foo b/foo
|
||||
index a86c18f..71ccdd0 100644
|
||||
--- a/foo
|
||||
+++ b/foo
|
||||
@@ -1 +1 @@
|
||||
-This is foo
|
||||
+This is foo
|
||||
\ No newline at end of file
|
@ -0,0 +1 @@
|
||||
a:1:{s:3:"foo";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:11:"This is foo";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:11:"This is foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
8
test/data/IDF_DiffTest/test-17-git-newline-added.diff
Normal file
8
test/data/IDF_DiffTest/test-17-git-newline-added.diff
Normal file
@ -0,0 +1,8 @@
|
||||
diff --git a/foo b/foo
|
||||
index 71ccdd0..a86c18f 100644
|
||||
--- a/foo
|
||||
+++ b/foo
|
||||
@@ -1 +1 @@
|
||||
-This is foo
|
||||
\ No newline at end of file
|
||||
+This is foo
|
@ -0,0 +1 @@
|
||||
a:1:{s:3:"foo";a:2:{s:6:"chunks";a:1:{i:0;a:2:{i:0;a:3:{i:0;s:1:"1";i:1;s:0:"";i:2;s:11:"This is foo";}i:1;a:3:{i:0;s:0:"";i:1;s:1:"1";i:2;s:11:"This is foo";}}}s:10:"chunks_def";a:1:{i:0;a:2:{i:0;a:2:{i:0;s:1:"1";i:1;i:1;}i:1;a:2:{i:0;s:1:"1";i:1;i:1;}}}}}
|
@ -273,6 +273,11 @@ div.issue-changes-timeline {
|
||||
color: #888a85;
|
||||
}
|
||||
|
||||
div.issue-prev-next {
|
||||
float: right;
|
||||
margin-top: -25px;
|
||||
}
|
||||
|
||||
div.issue-submit-info {
|
||||
background-color: #d3d7cf;
|
||||
-moz-border-radius: 3px;
|
||||
@ -577,10 +582,6 @@ td.diff-a {
|
||||
background-color: #dfd;
|
||||
}
|
||||
|
||||
td.diff-a > span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
td.diff-r {
|
||||
background-color: #fdd;
|
||||
}
|
||||
@ -588,6 +589,13 @@ td.diff-r {
|
||||
td.diff-a, td.diff-r, td.diff-c {
|
||||
border-bottom: none;
|
||||
border-top: none;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
td.diff-a > span,
|
||||
td.diff-r > span,
|
||||
td.diff-c > span {
|
||||
float: left;
|
||||
}
|
||||
|
||||
table.diff tr.diff-next {
|
||||
|
Loading…
Reference in New Issue
Block a user