Changeset - 0065f7fe60f6
docs/changelog.rst
Show inline comments
 
.. _changelog:
 

	
 
=========
 
Changelog
 
=========
 

	
 
1.6.0 (**2013-XX-XX**)
 
----------------------
 

	
 
:status: in-progress
 
:branch: beta
 

	
 
news
 
++++
 

	
 
fixes
 
+++++
 

	
 
1.5.3 (**2013-02-12**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- IP restrictions now also enabled for IPv6
 

	
 
fixes
 
+++++
 

	
 
- fixed issues with private checkbox not always working
 
- fixed #746 unicodeDedode errors on feed controllers
 
- fixes issue #756 cleanup repos didn't properly compose paths of repos to be cleaned up.
 
- fixed cache invalidation issues together with vcs_full_cache option
 
- repo scan should skip directories with starting with '.'
 
- fixes for issue #731, update-repoinfo sometimes failed to update data when changesets
 
  were initial commits
 
- recursive mode of setting permission skips private repositories
 

	
 
1.5.2 (**2013-01-14**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- IP restrictions for users. Each user can get a set of whitelist IP+mask for
 
  extra protection. Useful for buildbots etc.
 
- added full last changeset info to lightweight dashboard. lightweight dashboard
 
  is now fully functional replacement of original dashboard.
 
- implemented certain API calls for non-admin users.
 
- enabled all Markdown Extra plugins
 
- implemented #725 Pull Request View - Show origin repo URL
 
- show comments from pull requests into associated changesets
 

	
 
fixes
 
+++++
 

	
 
- update repoinfo script is more failsafe
 
- fixed #687  Lazy loaded tooltip bug with simultaneous ajax requests
 
- fixed #691: Notifications for pull requests: move link to top for better
 
  readability
 
- fixed #699: fix missing fork docs for API
 
- fixed #693 Opening changeset from pull request fails
 
- fixed #710 File view stripping empty lines from beginning and end of file
 
- fixed issues with getting repos by path on windows, caused GIT hooks to fail
 
- fixed issues with groups paginator on main dashboard
 
- improved fetch/pull command for git repos, now pulling all refs
 
- fixed issue #719 Journal revision ID tooltip AJAX query path is incorrect
 
  when running in a subdir
 
- fixed issue #702 API methods without arguments fail when "args":null
 
- set the status of changesets initially on pull request. Fixes issues #690 and #587
 

	
 
1.5.1 (**2012-12-13**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- implements #677: Don't allow to close pull requests when they are
 
  under-review status
 
- implemented #670 Implementation of Roles in Pull Request
 

	
 
fixes
 
+++++
 

	
 
- default permissions can get duplicated after migration
 
- fixed changeset status labels, they now select radio buttons
 
- #682 translation difficult for multi-line text
 
- #683 fixed difference between messages about not mapped repositories
 
- email: fail nicely when no SMTP server has been configured
 

	
 
1.5.0 (**2012-12-12**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- new rewritten from scratch diff engine. 10x faster in edge cases. Handling
 
  of file renames, copies, change flags and binary files
 
- added lightweight dashboard option. ref #500. New version of dashboard
 
  page that doesn't use any VCS data and is super fast to render. Recommended
 
  for large amount of repositories.
 
- implements #648 write Script for updating last modification time for
 
  lightweight dashboard
 
- implemented compare engine for git repositories.
 
- LDAP failover, option to specify multiple servers
 
- added Errormator and Sentry support for monitoring RhodeCode
 
- implemented #628: Pass server URL to rc-extensions hooks
 
- new tooltip implementation - added lazy loading of changesets from journal
 
  pages. This can significantly improve speed of rendering the page
 
- implements #632,added branch/tag/bookmarks info into feeds
 
  added changeset link to body of message
 
- implemented #638 permissions overview to groups
 
- implements #636, lazy loading of history and authors to speed up source
 
  pages rendering
 
- implemented #647, option to pass list of default encoding used to
 
  encode to/decode from unicode
 
- added caching layer into RSS/ATOM feeds.
 
- basic implementation of cherry picking changesets for pull request, ref #575
 
- implemented #661 Add option to include diff in RSS feed
 
- implemented file history page for showing detailed changelog for a given file
 
- implemented #663 Admin/permission: specify default repogroup perms
 
- implemented #379 defaults settings page for creation of repositories, locking
 
  statistics, downloads, repository type
 
- implemented #210 filtering of admin journal based on Whoosh Query language
 
- added parents/children links in changeset viewref #650
 

	
 
fixes
 
+++++
 

	
 
- fixed git version checker
 
- #586 patched basic auth handler to fix issues with git behind proxy
 
- #589 search urlgenerator didn't properly escape special characters
 
- fixed issue #614 Include repo name in delete confirmation dialog
 
- fixed #623: Lang meta-tag doesn't work with C#/C++
 
- fixes #612 Double quotes to Single quotes result in bad html in diff
 
- fixes #630 git statistics do too much work making them slow.
 
- fixes #625 Git-Tags are not displayed in Shortlog
 
- fix for issue #602, enforce str when setting mercurial UI object.
 
  When this is used together with mercurial internal translation system
 
  it can lead to UnicodeDecodeErrors
 
- fixes #645 Fix git handler when doing delete remote branch
 
- implements #649 added two seperate method for author and commiter to VCS
 
  changeset class switch author for git backed to be the real author not commiter
 
- implements #649 added two seperate method for author and committer to VCS
 
  changeset class switch author for git backed to be the real author not committer
 
- fix issue #504 RhodeCode is showing different versions of README on
 
  different summary page loads
 
- implemented #658 Changing username in LDAP-Mode should not be allowed.
 
- fixes #652 switch to generator approach when doing file annotation to prevent
 
  huge memory consumption
 
- fixes #666 move lockkey path location to cache_dir to ensure this path is
 
  always writable for rhodecode server
 
- many more small fixes and improvements
 
- fixed issues with recursive scans on removed repositories that could take
 
  long time on instance start
 

	
 
1.4.4 (**2012-10-08**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- obfuscate db password in logs for engine connection string
 
- #574 Show pull request status also in shortlog (if any)
 
- remember selected tab in my account page
 
- Bumped mercurial version to 2.3.2
 
- #595 rcextension hook for repository delete
 

	
 
fixes
 
+++++
 

	
 
- Add git version detection to warn users that Git used in system is to
 
  old. Ref #588 - also show git version in system details in settings page
 
- fixed files quick filter links
 
- #590 Add GET flag that controls the way the diff are generated, for pull
 
  requests we want to use non-bundle based diffs, That are far better for
 
  doing code reviews. The /compare url still uses bundle compare for full
 
  comparison including the incoming changesets
 
- Fixed #585, checks for status of revision where to strict, and made
 
  opening pull request with those revision impossible due to previously set
 
  status. Checks now are made also for the repository.
 
- fixes #591 git backend was causing encoding errors when handling binary
 
  files - added a test case for VCS lib tests
 
- fixed #597 commits in future get negative age.
 
- fixed #598 API docs methods had wrong members parameter as returned data
 

	
 
1.4.3 (**2012-09-28**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- #558 Added config file to hooks extra data
 
- bumped mercurial version to 2.3.1
 
- #518 added possibility of specifying multiple patterns for issues
 
- update codemirror to latest version
 

	
 
fixes
 
+++++
 

	
 
- fixed #570 explicit user group permissions can overwrite owner permissions
 
- fixed #578 set proper PATH with current Python for Git
 
  hooks to execute within same Python as RhodeCode
 
- fixed issue with Git bare repos that ends with .git in name
 

	
 
1.4.2 (**2012-09-12**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- added option to menu to quick lock/unlock repository for users that have
 
  write access to
 
- Implemented permissions for writing to repo
 
  groups. Now only write access to group allows to create a repostiory
 
  within that group
 
- #565 Add support for {netloc} and {scheme} to alternative_gravatar_url
 
- updated translation for zh_CN
 

	
 
fixes
 
+++++
 

	
 
- fixed visual permissions check on repos groups inside groups
 
- fixed issues with non-ascii search terms in search, and indexers
 
- fixed parsing of page number in GET parameters
 
- fixed issues with generating pull-request overview for repos with
 
  bookmarks and tags, also preview doesn't loose chosen revision from
 
  select dropdown
 

	
 
1.4.1 (**2012-09-07**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- always put a comment about code-review status change even if user send
 
  empty data
 
- modified_on column saves repository update and it's going to be used
 
  later for light version of main page ref #500
 
- pull request notifications send much nicer emails with details about pull
 
  request
 
- #551 show breadcrumbs in summary view for repositories inside a group
 

	
 
fixes
 
+++++
 

	
 
- fixed migrations of permissions that can lead to inconsistency.
 
  Some users sent feedback that after upgrading from older versions issues
 
  with updating default permissions occurred. RhodeCode detects that now and
 
  resets default user permission to initial state if there is a need for that.
 
  Also forces users to set the default value for new forking permission.
 
- #535 improved apache wsgi example configuration in docs
 
- fixes #550 mercurial repositories comparision failed when origin repo had
 
  additional not-common changesets
 
- fixed status of code-review in preview windows of pull request
 
- git forks were not initialized at bare repos
 
- fixes #555 fixes issues with comparing non-related repositories
 
- fixes #557 follower counter always counts up
 
- fixed issue #560 require push ssl checkbox wasn't shown when option was
 
  enabled
 
- fixed #559
 
- fixed issue #559 fixed bug in routing that mapped repo names with <name>_<num> in name as
 
  if it was a request to url by repository ID
 

	
 
1.4.0 (**2012-09-03**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- new codereview system
 
- email map, allowing users to have multiple email addresses mapped into
 
  their accounts
 
- improved git-hook system. Now all actions for git are logged into journal
 
  including pushed revisions, user and IP address
 
- changed setup-app into setup-rhodecode and added default options to it.
 
- new git repos are created as bare now by default
 
- #464 added links to groups in permission box
 
- #465 mentions autocomplete inside comments boxes
 
- #469 added --update-only option to whoosh to re-index only given list
 
  of repos in index
 
- rhodecode-api CLI client
 
- new git http protocol replaced buggy dulwich implementation.
 
  Now based on pygrack & gitweb
 
- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and
 
  reformated based on user suggestions. Additional rss/atom feeds for user
 
  journal
 
- various i18n improvements
 
- #478 permissions overview for admin in user edit view
 
- File view now displays small gravatars off all authors of given file
 
- Implemented landing revisions. Each repository will get landing_rev attribute
 
  that defines 'default' revision/branch for generating readme files
 
- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at
 
  earliest possible call.
 
- Import remote svn repositories to mercurial using hgsubversion.
 
- Fixed #508 RhodeCode now has a option to explicitly set forking permissions
 
- RhodeCode can use alternative server for generating avatar icons
 
- implemented repositories locking. Pull locks, push unlocks. Also can be done
 
  via API calls
 
- #538 form for permissions can handle multiple users at once
 

	
 
fixes
 
+++++
 

	
 
- improved translations
 
- fixes issue #455 Creating an archive generates an exception on Windows
 
- fixes #448 Download ZIP archive keeps file in /tmp open and results
 
  in out of disk space
 
- fixes issue #454 Search results under Windows include proceeding
 
  backslash
 
- fixed issue #450. Rhodecode no longer will crash when bad revision is
 
  present in journal data.
 
- fix for issue #417, git execution was broken on windows for certain
 
  commands.
 
- fixed #413. Don't disable .git directory for bare repos on deleting
 
- fixed issue #459. Changed the way of obtaining logger in reindex task.
 
- fixed #453 added ID field in whoosh SCHEMA that solves the issue of
 
  reindexing modified files
 
- fixed #481 rhodecode emails are sent without Date header
 
- fixed #458 wrong count when no repos are present
 
- fixed issue #492 missing `\ No newline at end of file` test at the end of
 
  new chunk in html diff
 
- full text search now works also for commit messages
 

	
 
1.3.6 (**2012-05-17**)
 
----------------------
 

	
 
news
 
++++
 

	
 
- chinese traditional translation
 
- changed setup-app into setup-rhodecode and added arguments for auto-setup
 
  mode that doesn't need user interaction
 

	
 
fixes
 
+++++
 

	
docs/setup.rst
Show inline comments
 
@@ -289,385 +289,385 @@ LDAP Filter : optional
 
.. _LDAP Search Scope:
 

	
 
LDAP Search Scope : required
 
    This limits how far LDAP will search for a matching object.
 

	
 
    BASE
 
        Only allows searching of `Base DN`_ and is usually not what you
 
        want.
 

	
 
    ONELEVEL
 
        Searches all entries under `Base DN`_, but not Base DN itself.
 

	
 
    SUBTREE
 
        Searches all entries below `Base DN`_, but not Base DN itself.
 
        When using SUBTREE `LDAP Filter`_ is useful to limit object
 
        location.
 

	
 
.. _Login Attribute:
 

	
 
Login Attribute : required
 
    The LDAP record attribute that will be matched as the USERNAME or
 
    ACCOUNT used to connect to RhodeCode.  This will be added to `LDAP
 
    Filter`_ for locating the User object.  If `LDAP Filter`_ is specified as
 
    "LDAPFILTER", `Login Attribute`_ is specified as "uid" and the user has
 
    connected as "jsmith" then the `LDAP Filter`_ will be augmented as below
 
    ::
 

	
 
        (&(LDAPFILTER)(uid=jsmith))
 

	
 
.. _ldap_attr_firstname:
 

	
 
First Name Attribute : required
 
    The LDAP record attribute which represents the user's first name.
 

	
 
.. _ldap_attr_lastname:
 

	
 
Last Name Attribute : required
 
    The LDAP record attribute which represents the user's last name.
 

	
 
.. _ldap_attr_email:
 

	
 
Email Attribute : required
 
    The LDAP record attribute which represents the user's email address.
 

	
 
If all data are entered correctly, and python-ldap_ is properly installed
 
users should be granted access to RhodeCode with ldap accounts.  At this
 
time user information is copied from LDAP into the RhodeCode user database.
 
This means that updates of an LDAP user object may not be reflected as a
 
user update in RhodeCode.
 

	
 
If You have problems with LDAP access and believe You entered correct
 
information check out the RhodeCode logs, any error messages sent from LDAP
 
will be saved there.
 

	
 
Active Directory
 
''''''''''''''''
 

	
 
RhodeCode can use Microsoft Active Directory for user authentication.  This
 
is done through an LDAP or LDAPS connection to Active Directory.  The
 
following LDAP configuration settings are typical for using Active
 
Directory ::
 

	
 
 Base DN              = OU=SBSUsers,OU=Users,OU=MyBusiness,DC=v3sys,DC=local
 
 Login Attribute      = sAMAccountName
 
 First Name Attribute = givenName
 
 Last Name Attribute  = sn
 
 E-mail Attribute     = mail
 

	
 
All other LDAP settings will likely be site-specific and should be
 
appropriately configured.
 

	
 

	
 
Authentication by container or reverse-proxy
 
--------------------------------------------
 

	
 
Starting with version 1.3, RhodeCode supports delegating the authentication
 
of users to its WSGI container, or to a reverse-proxy server through which all
 
clients access the application.
 

	
 
When these authentication methods are enabled in RhodeCode, it uses the
 
username that the container/proxy (Apache/Nginx/etc) authenticated and doesn't
 
perform the authentication itself. The authorization, however, is still done by
 
RhodeCode according to its settings.
 

	
 
When a user logs in for the first time using these authentication methods,
 
a matching user account is created in RhodeCode with default permissions. An
 
administrator can then modify it using RhodeCode's admin interface.
 
It's also possible for an administrator to create accounts and configure their
 
permissions before the user logs in for the first time.
 

	
 
Container-based authentication
 
''''''''''''''''''''''''''''''
 

	
 
In a container-based authentication setup, RhodeCode reads the user name from
 
the ``REMOTE_USER`` server variable provided by the WSGI container.
 

	
 
After setting up your container (see `Apache's WSGI config`_), you'd need
 
to configure it to require authentication on the location configured for
 
RhodeCode.
 

	
 
In order for RhodeCode to start using the provided username, you should set the
 
following in the [app:main] section of your .ini file::
 

	
 
    container_auth_enabled = true
 

	
 

	
 
Proxy pass-through authentication
 
'''''''''''''''''''''''''''''''''
 

	
 
In a proxy pass-through authentication setup, RhodeCode reads the user name
 
from the ``X-Forwarded-User`` request header, which should be configured to be
 
sent by the reverse-proxy server.
 

	
 
After setting up your proxy solution (see `Apache virtual host reverse proxy example`_,
 
`Apache as subdirectory`_ or `Nginx virtual host example`_), you'd need to
 
configure the authentication and add the username in a request header named
 
``X-Forwarded-User``.
 

	
 
For example, the following config section for Apache sets a subdirectory in a
 
reverse-proxy setup with basic auth::
 

	
 
    <Location /<someprefix> >
 
      ProxyPass http://127.0.0.1:5000/<someprefix>
 
      ProxyPassReverse http://127.0.0.1:5000/<someprefix>
 
      SetEnvIf X-Url-Scheme https HTTPS=1
 

	
 
      AuthType Basic
 
      AuthName "RhodeCode authentication"
 
      AuthUserFile /home/web/rhodecode/.htpasswd
 
      require valid-user
 

	
 
      RequestHeader unset X-Forwarded-User
 

	
 
      RewriteEngine On
 
      RewriteCond %{LA-U:REMOTE_USER} (.+)
 
      RewriteRule .* - [E=RU:%1]
 
      RequestHeader set X-Forwarded-User %{RU}e
 
    </Location>
 

	
 
In order for RhodeCode to start using the forwarded username, you should set
 
the following in the [app:main] section of your .ini file::
 

	
 
    proxypass_auth_enabled = true
 

	
 
.. note::
 
   If you enable proxy pass-through authentication, make sure your server is
 
   only accessible through the proxy. Otherwise, any client would be able to
 
   forge the authentication header and could effectively become authenticated
 
   using any account of their liking.
 

	
 
Integration with Issue trackers
 
-------------------------------
 

	
 
RhodeCode provides a simple integration with issue trackers. It's possible
 
to define a regular expression that will fetch issue id stored in commit
 
messages and replace that with an url to this issue. To enable this simply
 
uncomment following variables in the ini file::
 

	
 
    url_pat = (?:^#|\s#)(\w+)
 
    issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 
    issue_prefix = #
 

	
 
`url_pat` is the regular expression that will fetch issues from commit messages.
 
Default regex will match issues in format of #<number> eg. #300.
 

	
 
Matched issues will be replace with the link specified as `issue_server_link`
 
{id} will be replaced with issue id, and {repo} with repository name.
 
Since the # is striped `issue_prefix` is added as a prefix to url.
 
`issue_prefix` can be something different than # if you pass
 
ISSUE- as issue prefix this will generate an url in format::
 

	
 
  <a href="https://myissueserver.com/example_repo/issue/300">ISSUE-300</a>
 

	
 
Hook management
 
---------------
 

	
 
Hooks can be managed in similar way to this used in .hgrc files.
 
To access hooks setting click `advanced setup` on Hooks section of Mercurial
 
Settings in Admin.
 

	
 
There are 4 built in hooks that cannot be changed (only enable/disable by
 
checkboxes on previos section).
 
To add another custom hook simply fill in first section with
 
<name>.<hook_type> and the second one with hook path. Example hooks
 
can be found at *rhodecode.lib.hooks*.
 

	
 

	
 
Changing default encoding
 
-------------------------
 

	
 
By default RhodeCode uses utf8 encoding, starting from 1.3 series this
 
can be changed, simply edit default_encoding in .ini file to desired one.
 
This affects many parts in rhodecode including commiters names, filenames,
 
This affects many parts in rhodecode including committers names, filenames,
 
encoding of commit messages. In addition RhodeCode can detect if `chardet`
 
library is installed. If `chardet` is detected RhodeCode will fallback to it
 
when there are encode/decode errors.
 

	
 

	
 
Setting Up Celery
 
-----------------
 

	
 
Since version 1.1 celery is configured by the rhodecode ini configuration files.
 
Simply set use_celery=true in the ini file then add / change the configuration
 
variables inside the ini file.
 

	
 
Remember that the ini files use the format with '.' not with '_' like celery.
 
So for example setting `BROKER_HOST` in celery means setting `broker.host` in
 
the config file.
 

	
 
In order to start using celery run::
 

	
 
 paster celeryd <configfile.ini>
 

	
 

	
 
.. note::
 
   Make sure you run this command from the same virtualenv, and with the same
 
   user that rhodecode runs.
 

	
 
HTTPS support
 
-------------
 

	
 
There are two ways to enable https:
 

	
 
- Set HTTP_X_URL_SCHEME in your http server headers, than rhodecode will
 
  recognize this headers and make proper https redirections
 
- Alternatively, change the `force_https = true` flag in the ini configuration
 
  to force using https, no headers are needed than to enable https
 

	
 

	
 
Nginx virtual host example
 
--------------------------
 

	
 
Sample config for nginx using proxy::
 

	
 
    upstream rc {
 
        server 127.0.0.1:5000;
 
        # add more instances for load balancing
 
        #server 127.0.0.1:5001;
 
        #server 127.0.0.1:5002;
 
    }
 

	
 
    server {
 
       listen          443;
 
       server_name     rhodecode.myserver.com;
 
       access_log      /var/log/nginx/rhodecode.access.log;
 
       error_log       /var/log/nginx/rhodecode.error.log;
 

	
 
       ssl on;
 
       ssl_certificate     rhodecode.myserver.com.crt;
 
       ssl_certificate_key rhodecode.myserver.com.key;
 

	
 
       ssl_session_timeout 5m;
 

	
 
       ssl_protocols SSLv3 TLSv1;
 
       ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
 
       ssl_prefer_server_ciphers on;
 

	
 
       # uncomment if you have nginx with chunking module compiled
 
       # fixes the issues of having to put postBuffer data for large git
 
       # pushes
 
       #chunkin on;
 
       #error_page 411 = @my_411_error;
 
       #location @my_411_error {
 
       #    chunkin_resume;
 
       #}
 

	
 
       # uncomment if you want to serve static files by nginx
 
       #root /path/to/installation/rhodecode/public;
 

	
 
       location / {
 
            try_files $uri @rhode;
 
       }
 

	
 
       location @rhode {
 
            proxy_pass      http://rc;
 
            include         /etc/nginx/proxy.conf;
 
       }
 

	
 
    }
 

	
 
Here's the proxy.conf. It's tuned so it will not timeout on long
 
pushes or large pushes::
 

	
 
    proxy_redirect              off;
 
    proxy_set_header            Host $host;
 
    proxy_set_header            X-Url-Scheme $scheme;
 
    proxy_set_header            X-Host $http_host;
 
    proxy_set_header            X-Real-IP $remote_addr;
 
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
 
    proxy_set_header            Proxy-host $proxy_host;
 
    client_max_body_size        400m;
 
    client_body_buffer_size     128k;
 
    proxy_buffering             off;
 
    proxy_connect_timeout       7200;
 
    proxy_send_timeout          7200;
 
    proxy_read_timeout          7200;
 
    proxy_buffers               8 32k;
 

	
 
Also, when using root path with nginx you might set the static files to false
 
in the production.ini file::
 

	
 
    [app:main]
 
      use = egg:rhodecode
 
      full_stack = true
 
      static_files = false
 
      lang=en
 
      cache_dir = %(here)s/data
 

	
 
In order to not have the statics served by the application. This improves speed.
 

	
 

	
 
Apache virtual host reverse proxy example
 
-----------------------------------------
 

	
 
Here is a sample configuration file for apache using proxy::
 

	
 
    <VirtualHost *:80>
 
            ServerName hg.myserver.com
 
            ServerAlias hg.myserver.com
 

	
 
            <Proxy *>
 
              Order allow,deny
 
              Allow from all
 
            </Proxy>
 

	
 
            #important !
 
            #Directive to properly generate url (clone url) for pylons
 
            ProxyPreserveHost On
 

	
 
            #rhodecode instance
 
            ProxyPass / http://127.0.0.1:5000/
 
            ProxyPassReverse / http://127.0.0.1:5000/
 

	
 
            #to enable https use line below
 
            #SetEnvIf X-Url-Scheme https HTTPS=1
 

	
 
    </VirtualHost>
 

	
 

	
 
Additional tutorial
 
http://wiki.pylonshq.com/display/pylonscookbook/Apache+as+a+reverse+proxy+for+Pylons
 

	
 

	
 
Apache as subdirectory
 
----------------------
 

	
 
Apache subdirectory part::
 

	
 
    <Location /<someprefix> >
 
      ProxyPass http://127.0.0.1:5000/<someprefix>
 
      ProxyPassReverse http://127.0.0.1:5000/<someprefix>
 
      SetEnvIf X-Url-Scheme https HTTPS=1
 
    </Location>
 

	
 
Besides the regular apache setup you will need to add the following line
 
into [app:main] section of your .ini file::
 

	
 
    filter-with = proxy-prefix
 

	
 
Add the following at the end of the .ini file::
 

	
 
    [filter:proxy-prefix]
 
    use = egg:PasteDeploy#prefix
 
    prefix = /<someprefix>
 

	
 

	
 
then change <someprefix> into your choosen prefix
 

	
 
Apache's WSGI config
 
--------------------
 

	
 
Alternatively, RhodeCode can be set up with Apache under mod_wsgi. For
 
that, you'll need to:
 

	
 
- Install mod_wsgi. If using a Debian-based distro, you can install
 
  the package libapache2-mod-wsgi::
 

	
 
    aptitude install libapache2-mod-wsgi
 

	
 
- Enable mod_wsgi::
 

	
 
    a2enmod wsgi
 

	
 
- Create a wsgi dispatch script, like the one below. Make sure you
 
  check the paths correctly point to where you installed RhodeCode
rhodecode/i18n/en/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3541,385 +3541,385 @@ msgstr ""
 
msgid "New status$"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
msgid "View this pull request here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
#, fuzzy
 
msgid "show at revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, fuzzy, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, python-format
 
msgid "edit on branch:%s"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
 
msgid "No entries yet"
rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3680,385 +3680,385 @@ msgstr "Modifier le statut"
 
msgid "This is a notification from RhodeCode."
 
msgstr "Ceci est une notification de RhodeCode."
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "Titre"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr "Description"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "Ajouter un relecteur à cette requête de pull."
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "Modifier le statut"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr "Vous serez redirigé vers %s dans %s secondes."
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr "Diff de fichier de %s"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "Diff de fichier"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr "Fichiers de %s"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "Fichiers"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr "Edition de fichier de %s"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr "Ajouter un fichier"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr "Ajouter un nouveau fichier"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr "Nom de fichier"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr "ou"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr "Téléverser un fichier"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr "Créer un nouveau fichier"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "Emplacement"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr "Utilisez / pour séparer les répertoires"
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "Message de commit"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "Commiter les changements"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "voir"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "révision précédente"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "révision suivante"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr "Suivre la branche actuelle"
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "Rechercher un fichier"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr "Ajouter un fichier"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "Chargement de la liste des fichiers…"
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "Taille"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr "Type MIME"
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr "Dernière révision"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "Dernière modification"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "Dernier commiteur"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "Éditer le fichier"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "Afficher les annotations"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "montrer le fichier brut"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "télécharger le fichier brut"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr "Source"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr "Édition du fichier"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "Historique"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr "Diff avec la révision"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
msgid "show at revision"
 
msgstr "Afficher à la révision"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "Chargement de la liste des fichiers…"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "%s auteur"
 
msgstr[1] "%s auteurs"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
#, fuzzy
 
msgid "Load file history"
 
msgstr "Chargement de la liste des fichiers…"
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "montrer les sources"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "Dépôt %s supprimé"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "Fichier binaire (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "Ce fichier est trop gros pour être affiché."
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr "annotation"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr "Revenir en arrière"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr "Aucun fichier à cet endroit"
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr "Followers de %s"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "followers"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr "A commencé à suivre le dépôt :"
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr "Fork de %s"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "Nom du fork"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "Privé"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr "Copier les permissions"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr "Copier les permissions depuis le dépôt forké"
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr "MÀJ après le clonage"
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr "Mettre à jour depuis la source après clonage"
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "Forker ce dépôt"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr "Forks de %s"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "forks"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "forké"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr "Comparer le fork"
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "Il n’y a pas encore de forks."
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr "Flux ATOM du journal"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr "Flux RSS du journal"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr "Rafraîchir"
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr "Flux RSS"
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr "Flux ATOM"
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr "Surveillé"
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3554,385 +3554,385 @@ msgstr "このユーザーを本当に削除してよろしいですか?: %s"
 
msgid "New status$"
 
msgstr "新しいステータス$"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgstr "RhodeCodeからの通知です"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr "こんにちは"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr "あなたのアカウントの新しいパスワードの生成リクエストを受け取りました。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr "下のURLをクリックすることで再生成が行えます。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr "新しいパスワードのリクエストをしていない場合は、このメールを無視して下さい。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr "ユーザ %s がリポジトリ %s で新しいプルリクエストを作成しました。変更をレビューしてください。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr "タイトル"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr "説明"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
msgid "View this pull request here"
 
msgstr "このプルリクエストを閲覧する"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr "レビュー対象のリビジョン"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr "ユーザ %s がプルリクエスト #%s (リポジトリ %s) にコメントしました。"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr "新しいステータス"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr "このコメントを閲覧する"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr "新しいユーザがRhodeCodeへ登録しました"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr "このユーザを閲覧する"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr "%s ファイル差分"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "ファイル差分"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr "%s ファイル"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "ファイル"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr "ファイルを追加"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr "新しいファイルを追加"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr "ファイル名"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr "または"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr "アップロード"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr "新しいファイルを作成"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "場所"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr "ディレクトリの区切りには / を使います"
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "コミットメッセージ"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "変更をコミット"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "閲覧"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "前のリビジョン"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "次のリビジョン"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr "このブランチで追跡"
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "ファイル一覧を検索"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr "新しいファイルを追加"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "ファイル一覧を読み込み中..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "サイズ"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr "Mimetype"
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr "最後のリビジョン"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "最終更新日"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "最後の作成者"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "ファイルを編集"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "アノテーションを表示"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "元のファイルを表示"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "元のファイルをダウンロード"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr "ソース"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr "ファイルを編集"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "変更履歴"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr "このリビジョンの差分を見る"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
msgid "show at revision"
 
msgstr "このリビジョンを見る"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr "すべての履歴を表示"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "%s 作成者"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr "ファイルの履歴を読み込む"
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "ソースを表示"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "削除されたブランチ: %s"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "バイナリファイル (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "表示するには大きすぎるファイルです"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr "アノテーション"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr "戻る"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr "そのパスにはファイルはありません"
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr "%s フォロワー"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "フォロワー"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr "フォロー開始日 -"
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr "%s フォーク"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "フォーク名"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "非公開"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr "権限のコピー"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr "フォーク元リポジトリから権限をコピーします"
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr "クローン後にupdateする"
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr "クローンした後にソースをチェックアウトします"
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "このリポジトリをフォーク"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr "%s フォーク"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "フォーク"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "フォークしました"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr "フォークを比較"
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "まだフォークがありません"
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr "ATOM ジャーナルフィード"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr "RSS ジャーナルフィード"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr "更新"
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr "RSSフィード"
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr "ATOMフィード"
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr "ウォッチ"
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
 
msgid "No entries yet"
 
msgstr "まだエントリがありません"
 

	
rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3647,385 +3647,385 @@ msgstr "Nowy status$"
 
msgid "This is a notification from RhodeCode."
 
msgstr "To jest powiadomienie z strony"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr "Witaj"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr "Otrzymaliśmy prośbę o utworzenie nowego hasła do twojego konta."
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr "Możesz wygenerować nowe hasło klikając w link URL poniżej:"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr "Jeśli nie chcesz wygenerować nowego hasła to zignoruj tą wiadomość."
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 
"Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby "
 
"sprawdzić zmiany."
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr "tytuł"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr "opis"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
msgid "View this pull request here"
 
msgstr "Wyświetl prośby pobrania tutaj"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr "korekty dotyczące rewizji"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 
"Użytkownik %s skomentował wniosek o połączenie gałęzi #%s dla "
 
"repozytorium %s"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr "Nowy status"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr "Zobacz ten komentarz tutaj"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr "Nowy użytkownik został zarejestrowany na stronie"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr "Zobacz tego użytkownika tutaj"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr "Zostaniesz przekierowany do %s za %s sekund"
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr "%s Pliki różnic"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "Pliki różnic"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr "Pliki %s"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "pliki"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr "Edytuj plik %s"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr "dodaj plik"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr "Dodaj nowy plik"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr "Nazwa Pliku"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr "lub"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr "Dodaj plik"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr "Utwórz nowy plik"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "Położenie"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr "Użyj / do oddzielenia katalogów"
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "komentarz"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "Zatwierdź zmiany"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "widok"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "poprzednia wersja"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "następna wersja"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr "śledź mierzącą gałąź"
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "lista szukanych plików"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr "dodaj nowy plik"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "Wczytywanie listy plików..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "Rozmiar"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr "Typ MIME"
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr "Rewizja"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "Ostatnio modyfikowany"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "Autor"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "edytuj plik"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "pokaż adnotacje"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "wyświetl jako raw"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "Pobierz jako raw"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr "źródło"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr "Edycja pliku"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "Historia"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr "różnice do rewizji"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
msgid "show at revision"
 
msgstr "wskaż zmiany"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr "pokaż pełną historię"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "%s autor"
 
msgstr[1] "%s autorzy"
 
msgstr[2] "%s autorzy"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr "Załaduj historię pliku"
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "pokaż źródło"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "Usunięta gałąź: %s"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "Plik binarny (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "Plik jest za duży do wyświetlenia"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr "adnotacja"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr "Idź wstecz"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr "Brak plików w danej ścieżce"
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr "Obserwatorzy %s"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "obserwatorzy"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr "Rozpoczęto obserwację -"
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr "Gałęzi %s"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "Nazwa rozgałęzienia"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "Prywatny"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr "Skopiuj uprawnienia"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr "Skopiuj zezwolenia z rozwidlenia repozytorium"
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr "Aktualizuj po klonowaniu"
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr "Sprawdź źródło po wykonaniu klonowania"
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "gałąź tego repozytorium"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr "Gałęzi %s"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "gałąź"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "rozgałęziony"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr "Porównaj rozwidlenie"
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "Nie ma jeszcze gałęzi"
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr "Dziennik kanału ATOM"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr "Dziennik kanału RSS"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr "Odśwież"
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr "Kanał RSS"
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr "Kanał ATOM"
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr "Obserwowane"
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
 
msgid "No entries yet"
rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3721,385 +3721,385 @@ msgid "This is a notification from Rhode
 
msgstr "Esta é uma notificação do RhodeCode."
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "escrever"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
#, fuzzy
 
msgid "description"
 
msgstr "Descrição"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "Confirma excluir este repositório"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr "repositório [criado]"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "Conjuntos de mudanças"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "Você se registrou com sucesso no rhodecode"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr "Você será redirecionado para %s em %s segundos"
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, fuzzy, python-format
 
msgid "%s File diff"
 
msgstr "Diff do arquivo"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "Diff do arquivo"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, fuzzy, python-format
 
msgid "%s files"
 
msgstr "arquivos"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "arquivos"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, fuzzy, python-format
 
msgid "%s Edit file"
 
msgstr "editar arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr "adicionar arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr "Adicionar novo arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr "Nome de Arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr "ou"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr "Enviar arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr "Criar novo arquivo"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "Local"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr "use / para separar diretórios"
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "mensagem de commit"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "Realizar commit das alterações"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "ver"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "revisão anterior"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "próxima revisão"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr "seguir ramo atual"
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "pesquisar lista de arquivos"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr "adicionar novo arquivo"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "Carregando lista de arquivos..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "Tamanho"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr "Mimetype"
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr "Última revisão"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "Última alteração"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "Último commiter"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "editar arquivo"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "mostrar anotação"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "mostrar como bruto"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "descarregar como bruto"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr "fonte"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr "Editando arquivo"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "Histórico"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
#, fuzzy
 
msgid "diff to revision"
 
msgstr "próxima revisão"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
#, fuzzy
 
msgid "show at revision"
 
msgstr "próxima revisão"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "Carregando lista de arquivos..."
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, fuzzy, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "autor"
 
msgstr[1] "autors"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
#, fuzzy
 
msgid "Load file history"
 
msgstr "Carregando lista de arquivos..."
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "mostrar fonte"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "excluído o repositório %s"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "Arquivo binário (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "Arquivo é grande demais para exibir"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr "anotação"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr "Voltar"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr "Nenhum arquivo no caminho especificado"
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, fuzzy, python-format
 
msgid "%s Followers"
 
msgstr "seguidores"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "seguidores"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
#, fuzzy
 
msgid "Started following -"
 
msgstr "Passou a seguir"
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, fuzzy, python-format
 
msgid "%s Fork"
 
msgstr "bifurcação"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "Nome da bifurcação"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "Privado"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr "Copiar permissões"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr "Atualizar após clonar"
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "bifurcar este repositório"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, fuzzy, python-format
 
msgid "%s Forks"
 
msgstr "bifurcações"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "bifurcações"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "bifurcado"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
#, fuzzy
 
msgid "Compare fork"
 
msgstr "comparar exibir"
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "Ainda não há bifurcações"
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
#, fuzzy
 
msgid "ATOM journal feed"
 
msgstr "diário público de %s - feed %s"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
#, fuzzy
 
msgid "RSS journal feed"
 
msgstr "diário público de %s - feed %s"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr "Atualizar"
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
#, fuzzy
 
msgid "RSS feed"
 
msgstr "%s - feed %s"
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
rhodecode/i18n/rhodecode.pot
Show inline comments
 
@@ -3491,385 +3491,385 @@ msgid "Confirm to delete this user: %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/changeset_comment.html:10
 
msgid "New status$"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid "User %s opened pull request for repository %s and wants you to review changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
msgid "View this pull request here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
msgid "show at revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] ""
 
msgstr[1] ""
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, python-format
 
msgid "edit on branch:%s"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
 
msgid "No entries yet"
 
msgstr ""
rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3544,385 +3544,385 @@ msgstr "确认删除用户:%s"
 
msgid "New status$"
 
msgstr "新状态$"
 

	
 
#: rhodecode/templates/email_templates/main.html:8
 
msgid "This is a notification from RhodeCode."
 
msgstr "这是一个RhodeCode通知。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:4
 
msgid "Hello"
 
msgstr "你好"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:6
 
msgid "We received a request to create a new password for your account."
 
msgstr "我们收到重置你用户密码的请求。"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr "点击下面的链接以重新生成密码:"
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr "如果你没有要求重置密码,请忽略这封邮件。"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr "用户%s在版本库%s中创建了一个拉取请求需要你检视"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
msgid "title"
 
msgstr "标题"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
msgid "description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
msgid "View this pull request here"
 
msgstr "查看拉取请求"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr "待检视修订"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr "用户%s评论了版本库%s的拉取请求%s"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
msgid "New status"
 
msgstr "新状态"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr "查看评论"
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
msgid "A new user have registered in RhodeCode"
 
msgstr "新用户注册RhodeCode"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr "查看用户"
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr "重定向到%s,于%s秒后"
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, python-format
 
msgid "%s File diff"
 
msgstr "%s文件差异"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "文件差异"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, python-format
 
msgid "%s files"
 
msgstr "%s文件"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "文件"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, python-format
 
msgid "%s Edit file"
 
msgstr "%s编辑文件"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
msgid "add file"
 
msgstr "新建文件"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
msgid "Add new file"
 
msgstr "新建文件"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
msgid "File Name"
 
msgstr "文件名"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "or"
 
msgstr "或者"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
msgid "Upload file"
 
msgstr "上传文件"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
msgid "Create new file"
 
msgstr "创建新文件"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr "使用 / 目录分隔符"
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "提交信息"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "提交修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "显示"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "上一个修订"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "下一个修订"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr "沿着当前分支"
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "搜索文件列表"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
msgid "add new file"
 
msgstr "新建文件"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "加载文件列表..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "大小"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr "MIME类型"
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
msgid "Last Revision"
 
msgstr "最后修订号"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "最后修改于"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "最后提交者"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "显示原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "下载原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
msgid "source"
 
msgstr "显示源文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
msgid "Editing file"
 
msgstr "编辑文件"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "历史"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
msgid "diff to revision"
 
msgstr "比较差异"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
msgid "show at revision"
 
msgstr "显示修订"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
msgid "show full history"
 
msgstr "显示全部历史记录"
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "%s个作者"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
msgid "Load file history"
 
msgstr "加载文件历史记录..."
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "显示代码"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "已经删除分支%s"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "二进制文件(%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "文件过大,不能显示"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
msgid "annotation"
 
msgstr "显示注释"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr "返回"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr "指定的路径中没有文件"
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, python-format
 
msgid "%s Followers"
 
msgstr "%s个关注者"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "关注者"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
msgid "Started following -"
 
msgstr "开始关注 - "
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, python-format
 
msgid "%s Fork"
 
msgstr "%s的复刻"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "复刻名称"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
msgid "Copy permissions"
 
msgstr "拷贝权限"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr "从被复刻版本库拷贝权限"
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr "克隆后更新"
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr "完成克隆后检出源代码"
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "复刻该版本库"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, python-format
 
msgid "%s Forks"
 
msgstr "%s个复刻"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "复刻"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "已有复刻"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr "比较复刻"
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "无复刻"
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
msgid "ATOM journal feed"
 
msgstr "订阅日志ATOM"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
msgid "RSS journal feed"
 
msgstr "订阅日志RSS"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr "刷新"
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr "订阅RSS"
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
 
msgid "ATOM feed"
 
msgstr "订阅ATOM"
 

	
 
#: rhodecode/templates/journal/journal.html:54
 
msgid "Watched"
 
msgstr "关注的"
 

	
 
#: rhodecode/templates/journal/journal_data.html:55
 
msgid "No entries yet"
 
msgstr "没有条目"
 

	
rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po
Show inline comments
 
@@ -3671,385 +3671,385 @@ msgid "We received a request to create a
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:8
 
msgid "You can generate it by clicking following URL"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/password_reset.html:12
 
msgid "If you didn't request new password please ignore this email."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:4
 
#, python-format
 
msgid ""
 
"User %s opened pull request for repository %s and wants you to review "
 
"changes."
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:5
 
#, fuzzy
 
msgid "title"
 
msgstr "寫"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:6
 
#: rhodecode/templates/pullrequests/pullrequest.html:115
 
#, fuzzy
 
msgid "description"
 
msgstr "描述"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:7
 
#, fuzzy
 
msgid "View this pull request here"
 
msgstr "確認移除這個版本庫"
 

	
 
#: rhodecode/templates/email_templates/pull_request.html:12
 
msgid "revisions for reviewing"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:4
 
#, fuzzy, python-format
 
msgid "User %s commented on pull request #%s for repository %s"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:10
 
#, fuzzy
 
msgid "New status"
 
msgstr "變更"
 

	
 
#: rhodecode/templates/email_templates/pull_request_comment.html:14
 
msgid "View this comment here"
 
msgstr ""
 

	
 
#: rhodecode/templates/email_templates/registration.html:4
 
#, fuzzy
 
msgid "A new user have registered in RhodeCode"
 
msgstr "您已經成功註冊rhodecode"
 

	
 
#: rhodecode/templates/email_templates/registration.html:9
 
msgid "View this user here"
 
msgstr ""
 

	
 
#: rhodecode/templates/errors/error_document.html:46
 
#, python-format
 
msgid "You will be redirected to %s in %s seconds"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/file_diff.html:4
 
#, fuzzy, python-format
 
msgid "%s File diff"
 
msgstr "檔案差異"
 

	
 
#: rhodecode/templates/files/file_diff.html:12
 
msgid "File diff"
 
msgstr "檔案差異"
 

	
 
#: rhodecode/templates/files/files.html:4
 
#: rhodecode/templates/files/files.html:74
 
#, fuzzy, python-format
 
msgid "%s files"
 
msgstr "檔案"
 

	
 
#: rhodecode/templates/files/files.html:12
 
#: rhodecode/templates/summary/summary.html:351
 
msgid "files"
 
msgstr "檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:4
 
#: rhodecode/templates/files/files_edit.html:4
 
#, fuzzy, python-format
 
msgid "%s Edit file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:19
 
#, fuzzy
 
msgid "add file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:40
 
#, fuzzy
 
msgid "Add new file"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/files/files_add.html:45
 
#, fuzzy
 
msgid "File Name"
 
msgstr "檔案名稱"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy
 
msgid "or"
 
msgstr "時"
 

	
 
#: rhodecode/templates/files/files_add.html:49
 
#: rhodecode/templates/files/files_add.html:54
 
#, fuzzy
 
msgid "Upload file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_add.html:58
 
#, fuzzy
 
msgid "Create new file"
 
msgstr "建立使用者 %s"
 

	
 
#: rhodecode/templates/files/files_add.html:63
 
#: rhodecode/templates/files/files_edit.html:39
 
#: rhodecode/templates/files/files_ypjax.html:3
 
msgid "Location"
 
msgstr "位置"
 

	
 
#: rhodecode/templates/files/files_add.html:67
 
msgid "use / to separate directories"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_add.html:77
 
#: rhodecode/templates/files/files_edit.html:63
 
#: rhodecode/templates/shortlog/shortlog_data.html:6
 
msgid "commit message"
 
msgstr "遞交資訊"
 

	
 
#: rhodecode/templates/files/files_add.html:81
 
#: rhodecode/templates/files/files_edit.html:67
 
msgid "Commit changes"
 
msgstr "遞交修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:13
 
msgid "view"
 
msgstr "顯示"
 

	
 
#: rhodecode/templates/files/files_browser.html:14
 
msgid "previous revision"
 
msgstr "前一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:16
 
msgid "next revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:23
 
msgid "follow current branch"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:27
 
msgid "search file list"
 
msgstr "搜尋檔案列表"
 

	
 
#: rhodecode/templates/files/files_browser.html:31
 
#: rhodecode/templates/shortlog/shortlog_data.html:78
 
#, fuzzy
 
msgid "add new file"
 
msgstr "新增使用者"
 

	
 
#: rhodecode/templates/files/files_browser.html:35
 
msgid "Loading file list..."
 
msgstr "載入檔案列表..."
 

	
 
#: rhodecode/templates/files/files_browser.html:48
 
msgid "Size"
 
msgstr "大小"
 

	
 
#: rhodecode/templates/files/files_browser.html:49
 
msgid "Mimetype"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_browser.html:50
 
#, fuzzy
 
msgid "Last Revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_browser.html:51
 
msgid "Last modified"
 
msgstr "最後修改"
 

	
 
#: rhodecode/templates/files/files_browser.html:52
 
msgid "Last commiter"
 
msgid "Last committer"
 
msgstr "最後的遞交者"
 

	
 
#: rhodecode/templates/files/files_edit.html:19
 
msgid "edit file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_edit.html:49
 
#: rhodecode/templates/files/files_source.html:23
 
msgid "show annotation"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/files/files_edit.html:50
 
#: rhodecode/templates/files/files_source.html:25
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "show as raw"
 
msgstr "顯示原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:51
 
#: rhodecode/templates/files/files_source.html:26
 
msgid "download as raw"
 
msgstr "下載原始文件"
 

	
 
#: rhodecode/templates/files/files_edit.html:54
 
#, fuzzy
 
msgid "source"
 
msgstr "顯示原始碼"
 

	
 
#: rhodecode/templates/files/files_edit.html:59
 
#, fuzzy
 
msgid "Editing file"
 
msgstr "編輯檔案"
 

	
 
#: rhodecode/templates/files/files_history_box.html:2
 
msgid "History"
 
msgstr "歷史"
 

	
 
#: rhodecode/templates/files/files_history_box.html:9
 
#, fuzzy
 
msgid "diff to revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_history_box.html:10
 
#, fuzzy
 
msgid "show at revision"
 
msgstr "下一個修訂"
 

	
 
#: rhodecode/templates/files/files_history_box.html:11
 
#, fuzzy
 
msgid "show full history"
 
msgstr "載入檔案列表..."
 

	
 
#: rhodecode/templates/files/files_history_box.html:16
 
#, fuzzy, python-format
 
msgid "%s author"
 
msgid_plural "%s authors"
 
msgstr[0] "作者"
 

	
 
#: rhodecode/templates/files/files_source.html:6
 
#, fuzzy
 
msgid "Load file history"
 
msgstr "載入檔案列表..."
 

	
 
#: rhodecode/templates/files/files_source.html:21
 
msgid "show source"
 
msgstr "顯示原始碼"
 

	
 
#: rhodecode/templates/files/files_source.html:29
 
#, fuzzy, python-format
 
msgid "edit on branch:%s"
 
msgstr "刪除版本庫 %s"
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "edit on branch:?"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:31
 
msgid "Editing files allowed only when on branch head revision"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_source.html:46
 
#, python-format
 
msgid "Binary file (%s)"
 
msgstr "二進位檔 (%s)"
 

	
 
#: rhodecode/templates/files/files_source.html:55
 
msgid "File is too big to display"
 
msgstr "顯示的檔案太大"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:5
 
#, fuzzy
 
msgid "annotation"
 
msgstr "險是註釋"
 

	
 
#: rhodecode/templates/files/files_ypjax.html:15
 
msgid "Go back"
 
msgstr ""
 

	
 
#: rhodecode/templates/files/files_ypjax.html:16
 
msgid "No files at given path"
 
msgstr ""
 

	
 
#: rhodecode/templates/followers/followers.html:5
 
#, fuzzy, python-format
 
msgid "%s Followers"
 
msgstr "追蹤者"
 

	
 
#: rhodecode/templates/followers/followers.html:13
 
msgid "followers"
 
msgstr "追蹤者"
 

	
 
#: rhodecode/templates/followers/followers_data.html:12
 
#, fuzzy
 
msgid "Started following -"
 
msgstr "開始追蹤"
 

	
 
#: rhodecode/templates/forks/fork.html:5
 
#, fuzzy, python-format
 
msgid "%s Fork"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/forks/fork.html:31
 
msgid "Fork name"
 
msgstr "分支名稱"
 

	
 
#: rhodecode/templates/forks/fork.html:68
 
msgid "Private"
 
msgstr "私有"
 

	
 
#: rhodecode/templates/forks/fork.html:77
 
#, fuzzy
 
msgid "Copy permissions"
 
msgstr "權限"
 

	
 
#: rhodecode/templates/forks/fork.html:81
 
msgid "Copy permissions from forked repository"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:86
 
msgid "Update after clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:90
 
msgid "Checkout source after making a clone"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/fork.html:94
 
msgid "fork this repository"
 
msgstr "fork 這個版本庫"
 

	
 
#: rhodecode/templates/forks/forks.html:5
 
#, fuzzy, python-format
 
msgid "%s Forks"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/forks/forks.html:13
 
msgid "forks"
 
msgstr "分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:17
 
msgid "forked"
 
msgstr "已建立分支"
 

	
 
#: rhodecode/templates/forks/forks_data.html:21
 
msgid "Compare fork"
 
msgstr ""
 

	
 
#: rhodecode/templates/forks/forks_data.html:42
 
msgid "There are no forks yet"
 
msgstr "尚未有任何 fork"
 

	
 
#: rhodecode/templates/journal/journal.html:21
 
#, fuzzy
 
msgid "ATOM journal feed"
 
msgstr "%s 公開日誌 %s feed"
 

	
 
#: rhodecode/templates/journal/journal.html:22
 
#, fuzzy
 
msgid "RSS journal feed"
 
msgstr "%s 公開日誌 %s feed"
 

	
 
#: rhodecode/templates/journal/journal.html:32
 
#: rhodecode/templates/pullrequests/pullrequest.html:55
 
msgid "Refresh"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:35
 
#: rhodecode/templates/journal/public_journal.html:24
 
msgid "RSS feed"
 
msgstr ""
 

	
 
#: rhodecode/templates/journal/journal.html:38
 
#: rhodecode/templates/journal/public_journal.html:27
rhodecode/lib/vcs/backends/base.py
Show inline comments
 
@@ -265,406 +265,406 @@ class BaseRepository(object):
 
        raise NotImplementedError
 

	
 
    def get_state(self):
 
        """
 
        Returns dictionary with ``added``, ``changed`` and ``removed`` lists
 
        containing ``FileNode`` objects.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_config_value(self, section, name, config_file=None):
 
        """
 
        Returns configuration value for a given [``section``] and ``name``.
 

	
 
        :param section: Section we want to retrieve value from
 
        :param name: Name of configuration we want to retrieve
 
        :param config_file: A path to file which should be used to retrieve
 
          configuration from (might also be a list of file paths)
 
        """
 
        raise NotImplementedError
 

	
 
    def get_user_name(self, config_file=None):
 
        """
 
        Returns user's name from global configuration file.
 

	
 
        :param config_file: A path to file which should be used to retrieve
 
          configuration from (might also be a list of file paths)
 
        """
 
        raise NotImplementedError
 

	
 
    def get_user_email(self, config_file=None):
 
        """
 
        Returns user's email from global configuration file.
 

	
 
        :param config_file: A path to file which should be used to retrieve
 
          configuration from (might also be a list of file paths)
 
        """
 
        raise NotImplementedError
 

	
 
    # =========== #
 
    # WORKDIR API #
 
    # =========== #
 

	
 
    @LazyProperty
 
    def workdir(self):
 
        """
 
        Returns ``Workdir`` instance for this repository.
 
        """
 
        raise NotImplementedError
 

	
 
    def inject_ui(self, **extras):
 
        """
 
        Injects extra parameters into UI object of this repo
 
        """
 
        required_extras = [
 
            'ip',
 
            'username',
 
            'action',
 
            'repository',
 
            'scm',
 
            'config',
 
            'server_url',
 
            'make_lock',
 
            'locked_by',
 
        ]
 
        for req in required_extras:
 
            if req not in extras:
 
                raise AttributeError('Missing attribute %s in extras' % (req))
 
        for k, v in extras.items():
 
            self._repo.ui.setconfig('rhodecode_extras', k, v)
 

	
 

	
 
class BaseChangeset(object):
 
    """
 
    Each backend should implement it's changeset representation.
 

	
 
    **Attributes**
 

	
 
        ``repository``
 
            repository object within which changeset exists
 

	
 
        ``id``
 
            may be ``raw_id`` or i.e. for mercurial's tip just ``tip``
 

	
 
        ``raw_id``
 
            raw changeset representation (i.e. full 40 length sha for git
 
            backend)
 

	
 
        ``short_id``
 
            shortened (if apply) version of ``raw_id``; it would be simple
 
            shortcut for ``raw_id[:12]`` for git/mercurial backends or same
 
            as ``raw_id`` for subversion
 

	
 
        ``revision``
 
            revision number as integer
 

	
 
        ``files``
 
            list of ``FileNode`` (``Node`` with NodeKind.FILE) objects
 

	
 
        ``dirs``
 
            list of ``DirNode`` (``Node`` with NodeKind.DIR) objects
 

	
 
        ``nodes``
 
            combined list of ``Node`` objects
 

	
 
        ``author``
 
            author of the changeset, as unicode
 

	
 
        ``message``
 
            message of the changeset, as unicode
 

	
 
        ``parents``
 
            list of parent changesets
 

	
 
        ``last``
 
            ``True`` if this is last changeset in repository, ``False``
 
            otherwise; trying to access this attribute while there is no
 
            changesets would raise ``EmptyRepositoryError``
 
    """
 
    def __str__(self):
 
        return '<%s at %s:%s>' % (self.__class__.__name__, self.revision,
 
            self.short_id)
 

	
 
    def __repr__(self):
 
        return self.__str__()
 

	
 
    def __unicode__(self):
 
        return u'%s:%s' % (self.revision, self.short_id)
 

	
 
    def __eq__(self, other):
 
        return self.raw_id == other.raw_id
 

	
 
    def __json__(self):
 
        return dict(
 
            short_id=self.short_id,
 
            raw_id=self.raw_id,
 
            revision=self.revision,
 
            message=self.message,
 
            date=self.date,
 
            author=self.author,
 
        )
 

	
 
    @LazyProperty
 
    def last(self):
 
        if self.repository is None:
 
            raise ChangesetError("Cannot check if it's most recent revision")
 
        return self.raw_id == self.repository.revisions[-1]
 

	
 
    @LazyProperty
 
    def parents(self):
 
        """
 
        Returns list of parents changesets.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def children(self):
 
        """
 
        Returns list of children changesets.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def id(self):
 
        """
 
        Returns string identifying this changeset.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def raw_id(self):
 
        """
 
        Returns raw string identifying this changeset.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def short_id(self):
 
        """
 
        Returns shortened version of ``raw_id`` attribute, as string,
 
        identifying this changeset, useful for web representation.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def revision(self):
 
        """
 
        Returns integer identifying this changeset.
 

	
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def commiter(self):
 
    def committer(self):
 
        """
 
        Returns Commiter for given commit
 
        Returns Committer for given commit
 
        """
 

	
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def commiter_name(self):
 
    def committer_name(self):
 
        """
 
        Returns Author name for given commit
 
        """
 

	
 
        return author_name(self.commiter)
 
        return author_name(self.committer)
 

	
 
    @LazyProperty
 
    def commiter_email(self):
 
    def committer_email(self):
 
        """
 
        Returns Author email address for given commit
 
        """
 

	
 
        return author_email(self.commiter)
 
        return author_email(self.committer)
 

	
 
    @LazyProperty
 
    def author(self):
 
        """
 
        Returns Author for given commit
 
        """
 

	
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def author_name(self):
 
        """
 
        Returns Author name for given commit
 
        """
 

	
 
        return author_name(self.author)
 

	
 
    @LazyProperty
 
    def author_email(self):
 
        """
 
        Returns Author email address for given commit
 
        """
 

	
 
        return author_email(self.author)
 

	
 
    def get_file_mode(self, path):
 
        """
 
        Returns stat mode of the file at the given ``path``.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_file_content(self, path):
 
        """
 
        Returns content of the file at the given ``path``.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_file_size(self, path):
 
        """
 
        Returns size of the file at the given ``path``.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_file_changeset(self, path):
 
        """
 
        Returns last commit of the file at the given ``path``.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_file_history(self, path):
 
        """
 
        Returns history of file as reversed list of ``Changeset`` objects for
 
        which file at given ``path`` has been modified.
 
        """
 
        raise NotImplementedError
 

	
 
    def get_nodes(self, path):
 
        """
 
        Returns combined ``DirNode`` and ``FileNode`` objects list representing
 
        state of changeset at the given ``path``.
 

	
 
        :raises ``ChangesetError``: if node at the given ``path`` is not
 
          instance of ``DirNode``
 
        """
 
        raise NotImplementedError
 

	
 
    def get_node(self, path):
 
        """
 
        Returns ``Node`` object from the given ``path``.
 

	
 
        :raises ``NodeDoesNotExistError``: if there is no node at the given
 
          ``path``
 
        """
 
        raise NotImplementedError
 

	
 
    def fill_archive(self, stream=None, kind='tgz', prefix=None):
 
        """
 
        Fills up given stream.
 

	
 
        :param stream: file like object.
 
        :param kind: one of following: ``zip``, ``tar``, ``tgz``
 
            or ``tbz2``. Default: ``tgz``.
 
        :param prefix: name of root directory in archive.
 
            Default is repository name and changeset's raw_id joined with dash.
 

	
 
            repo-tip.<kind>
 
        """
 

	
 
        raise NotImplementedError
 

	
 
    def get_chunked_archive(self, **kwargs):
 
        """
 
        Returns iterable archive. Tiny wrapper around ``fill_archive`` method.
 

	
 
        :param chunk_size: extra parameter which controls size of returned
 
            chunks. Default:8k.
 
        """
 

	
 
        chunk_size = kwargs.pop('chunk_size', 8192)
 
        stream = kwargs.get('stream')
 
        self.fill_archive(**kwargs)
 
        while True:
 
            data = stream.read(chunk_size)
 
            if not data:
 
                break
 
            yield data
 

	
 
    @LazyProperty
 
    def root(self):
 
        """
 
        Returns ``RootNode`` object for this changeset.
 
        """
 
        return self.get_node('')
 

	
 
    def next(self, branch=None):
 
        """
 
        Returns next changeset from current, if branch is gives it will return
 
        next changeset belonging to this branch
 

	
 
        :param branch: show changesets within the given named branch
 
        """
 
        raise NotImplementedError
 

	
 
    def prev(self, branch=None):
 
        """
 
        Returns previous changeset from current, if branch is gives it will
 
        return previous changeset belonging to this branch
 

	
 
        :param branch: show changesets within the given named branch
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def added(self):
 
        """
 
        Returns list of added ``FileNode`` objects.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def changed(self):
 
        """
 
        Returns list of modified ``FileNode`` objects.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def removed(self):
 
        """
 
        Returns list of removed ``FileNode`` objects.
 
        """
 
        raise NotImplementedError
 

	
 
    @LazyProperty
 
    def size(self):
 
        """
 
        Returns total number of bytes from contents of all filenodes.
 
        """
 
        return sum((node.size for node in self.get_filenodes_generator()))
 

	
 
    def walk(self, topurl=''):
 
        """
 
        Similar to os.walk method. Insted of filesystem it walks through
 
        changeset starting at given ``topurl``.  Returns generator of tuples
 
        (topnode, dirnodes, filenodes).
 
        """
 
        topnode = self.get_node(topurl)
 
        yield (topnode, topnode.dirs, topnode.files)
 
        for dirnode in topnode.dirs:
 
            for tup in self.walk(dirnode.path):
 
                yield tup
 

	
 
    def get_filenodes_generator(self):
 
        """
 
        Returns generator that yields *all* file nodes.
 
        """
 
        for topnode, dirs, files in self.walk():
 
            for node in files:
 
                yield node
 

	
 
    def as_dict(self):
 
        """
 
        Returns dictionary with changeset's attributes and their values.
 
        """
 
        data = get_dict_for_attrs(self, ['id', 'raw_id', 'short_id',
 
            'revision', 'date', 'message'])
 
        data['author'] = {'name': self.author_name, 'email': self.author_email}
 
        data['added'] = [node.path for node in self.added]
 
        data['changed'] = [node.path for node in self.changed]
 
        data['removed'] = [node.path for node in self.removed]
 
        return data
 

	
rhodecode/lib/vcs/backends/git/changeset.py
Show inline comments
 
import re
 
from itertools import chain
 
from dulwich import objects
 
from subprocess import Popen, PIPE
 
import rhodecode
 
from rhodecode.lib.vcs.conf import settings
 
from rhodecode.lib.vcs.exceptions import RepositoryError
 
from rhodecode.lib.vcs.exceptions import ChangesetError
 
from rhodecode.lib.vcs.exceptions import NodeDoesNotExistError
 
from rhodecode.lib.vcs.exceptions import VCSError
 
from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError
 
from rhodecode.lib.vcs.exceptions import ImproperArchiveTypeError
 
from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset
 
from rhodecode.lib.vcs.nodes import FileNode, DirNode, NodeKind, RootNode, \
 
    RemovedFileNode, SubModuleNode, ChangedFileNodesGenerator,\
 
    AddedFileNodesGenerator, RemovedFileNodesGenerator
 
from rhodecode.lib.vcs.utils import safe_unicode
 
from rhodecode.lib.vcs.utils import date_fromtimestamp
 
from rhodecode.lib.vcs.utils.lazy import LazyProperty
 

	
 

	
 
class GitChangeset(BaseChangeset):
 
    """
 
    Represents state of the repository at single revision.
 
    """
 

	
 
    def __init__(self, repository, revision):
 
        self._stat_modes = {}
 
        self.repository = repository
 

	
 
        try:
 
            commit = self.repository._repo.get_object(revision)
 
            if isinstance(commit, objects.Tag):
 
                revision = commit.object[1]
 
                commit = self.repository._repo.get_object(commit.object[1])
 
        except KeyError:
 
            raise RepositoryError("Cannot get object with id %s" % revision)
 
        self.raw_id = revision
 
        self.id = self.raw_id
 
        self.short_id = self.raw_id[:12]
 
        self._commit = commit
 

	
 
        self._tree_id = commit.tree
 
        self._commiter_property = 'committer'
 
        self._committer_property = 'committer'
 
        self._author_property = 'author'
 
        self._date_property = 'commit_time'
 
        self._date_tz_property = 'commit_timezone'
 
        self.revision = repository.revisions.index(revision)
 

	
 
        self.message = safe_unicode(commit.message)
 

	
 
        self.nodes = {}
 
        self._paths = {}
 

	
 
    @LazyProperty
 
    def commiter(self):
 
        return safe_unicode(getattr(self._commit, self._commiter_property))
 
    def committer(self):
 
        return safe_unicode(getattr(self._commit, self._committer_property))
 

	
 
    @LazyProperty
 
    def author(self):
 
        return safe_unicode(getattr(self._commit, self._author_property))
 

	
 
    @LazyProperty
 
    def date(self):
 
        return date_fromtimestamp(getattr(self._commit, self._date_property),
 
                                  getattr(self._commit, self._date_tz_property))
 

	
 
    @LazyProperty
 
    def _timestamp(self):
 
        return getattr(self._commit, self._date_property)
 

	
 
    @LazyProperty
 
    def status(self):
 
        """
 
        Returns modified, added, removed, deleted files for current changeset
 
        """
 
        return self.changed, self.added, self.removed
 

	
 
    @LazyProperty
 
    def tags(self):
 
        _tags = []
 
        for tname, tsha in self.repository.tags.iteritems():
 
            if tsha == self.raw_id:
 
                _tags.append(tname)
 
        return _tags
 

	
 
    @LazyProperty
 
    def branch(self):
 

	
 
        heads = self.repository._heads(reverse=False)
 

	
 
        ref = heads.get(self.raw_id)
 
        if ref:
 
            return safe_unicode(ref)
 

	
 
    def _fix_path(self, path):
 
        """
 
        Paths are stored without trailing slash so we need to get rid off it if
 
        needed.
 
        """
 
        if path.endswith('/'):
 
            path = path.rstrip('/')
 
        return path
 

	
 
    def _get_id_for_path(self, path):
 

	
 
        # FIXME: Please, spare a couple of minutes and make those codes cleaner;
 
        if not path in self._paths:
 
            path = path.strip('/')
 
            # set root tree
 
            tree = self.repository._repo[self._tree_id]
 
            if path == '':
 
                self._paths[''] = tree.id
 
                return tree.id
 
            splitted = path.split('/')
 
            dirs, name = splitted[:-1], splitted[-1]
 
            curdir = ''
 

	
 
            # initially extract things from root dir
 
            for item, stat, id in tree.iteritems():
 
                if curdir:
 
                    name = '/'.join((curdir, item))
 
                else:
 
                    name = item
 
                self._paths[name] = id
 
                self._stat_modes[name] = stat
 

	
 
            for dir in dirs:
 
                if curdir:
 
                    curdir = '/'.join((curdir, dir))
 
                else:
 
                    curdir = dir
 
                dir_id = None
 
                for item, stat, id in tree.iteritems():
 
                    if dir == item:
 
                        dir_id = id
 
                if dir_id:
 
                    # Update tree
 
                    tree = self.repository._repo[dir_id]
 
                    if not isinstance(tree, objects.Tree):
 
                        raise ChangesetError('%s is not a directory' % curdir)
 
                else:
 
                    raise ChangesetError('%s have not been found' % curdir)
 

	
 
                # cache all items from the given traversed tree
 
                for item, stat, id in tree.iteritems():
 
                    if curdir:
 
                        name = '/'.join((curdir, item))
 
                    else:
 
                        name = item
 
                    self._paths[name] = id
 
                    self._stat_modes[name] = stat
 
            if not path in self._paths:
 
                raise NodeDoesNotExistError("There is no file nor directory "
 
                    "at the given path %r at revision %r"
 
                    % (path, self.short_id))
 
        return self._paths[path]
 

	
 
    def _get_kind(self, path):
 
        obj = self.repository._repo[self._get_id_for_path(path)]
 
        if isinstance(obj, objects.Blob):
 
            return NodeKind.FILE
 
        elif isinstance(obj, objects.Tree):
 
            return NodeKind.DIR
 

	
 
    def _get_filectx(self, path):
 
        path = self._fix_path(path)
 
        if self._get_kind(path) != NodeKind.FILE:
 
            raise ChangesetError("File does not exist for revision %r at "
 
                " %r" % (self.raw_id, path))
 
        return path
 

	
 
    def _get_file_nodes(self):
 
        return chain(*(t[2] for t in self.walk()))
 

	
 
    @LazyProperty
 
    def parents(self):
 
        """
 
        Returns list of parents changesets.
 
        """
 
        return [self.repository.get_changeset(parent)
 
                for parent in self._commit.parents]
 

	
 
    @LazyProperty
 
    def children(self):
 
        """
 
        Returns list of children changesets.
 
        """
 
        so, se = self.repository.run_git_command(
 
            "rev-list --all --children | grep '^%s'" % self.raw_id
 
        )
 

	
 
        children = []
 
        for l in so.splitlines():
 
            childs = l.split(' ')[1:]
 
            children.extend(childs)
 
        return [self.repository.get_changeset(cs) for cs in children]
 

	
 
    def next(self, branch=None):
 

	
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _next(changeset, branch):
 
            try:
 
                next_ = changeset.revision + 1
 
                next_rev = changeset.repository.revisions[next_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 
            cs = changeset.repository.get_changeset(next_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _next(cs, branch)
 

	
 
            return cs
 

	
 
        return _next(self, branch)
 

	
 
    def prev(self, branch=None):
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _prev(changeset, branch):
 
            try:
 
                prev_ = changeset.revision - 1
 
                if prev_ < 0:
 
                    raise IndexError
 
                prev_rev = changeset.repository.revisions[prev_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 

	
 
            cs = changeset.repository.get_changeset(prev_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _prev(cs, branch)
 

	
 
            return cs
 

	
 
        return _prev(self, branch)
 

	
 
    def diff(self, ignore_whitespace=True, context=3):
 
        rev1 = self.parents[0] if self.parents else self.repository.EMPTY_CHANGESET
 
        rev2 = self
 
        return ''.join(self.repository.get_diff(rev1, rev2,
 
                                    ignore_whitespace=ignore_whitespace,
 
                                    context=context))
 

	
rhodecode/lib/vcs/backends/hg/changeset.py
Show inline comments
 
import os
 
import posixpath
 

	
 
from rhodecode.lib.vcs.backends.base import BaseChangeset
 
from rhodecode.lib.vcs.conf import settings
 
from rhodecode.lib.vcs.exceptions import  ChangesetDoesNotExistError, \
 
    ChangesetError, ImproperArchiveTypeError, NodeDoesNotExistError, VCSError
 
from rhodecode.lib.vcs.nodes import AddedFileNodesGenerator, \
 
    ChangedFileNodesGenerator, DirNode, FileNode, NodeKind, \
 
    RemovedFileNodesGenerator, RootNode, SubModuleNode
 

	
 
from rhodecode.lib.vcs.utils import safe_str, safe_unicode, date_fromtimestamp
 
from rhodecode.lib.vcs.utils.lazy import LazyProperty
 
from rhodecode.lib.vcs.utils.paths import get_dirs_for_path
 
from rhodecode.lib.vcs.utils.hgcompat import archival, hex
 

	
 

	
 
class MercurialChangeset(BaseChangeset):
 
    """
 
    Represents state of the repository at the single revision.
 
    """
 

	
 
    def __init__(self, repository, revision):
 
        self.repository = repository
 
        self.raw_id = revision
 
        self._ctx = repository._repo[revision]
 
        self.revision = self._ctx._rev
 
        self.nodes = {}
 

	
 
    @LazyProperty
 
    def tags(self):
 
        return map(safe_unicode, self._ctx.tags())
 

	
 
    @LazyProperty
 
    def branch(self):
 
        return  safe_unicode(self._ctx.branch())
 

	
 
    @LazyProperty
 
    def bookmarks(self):
 
        return map(safe_unicode, self._ctx.bookmarks())
 

	
 
    @LazyProperty
 
    def message(self):
 
        return safe_unicode(self._ctx.description())
 

	
 
    @LazyProperty
 
    def commiter(self):
 
    def committer(self):
 
        return safe_unicode(self.author)
 

	
 
    @LazyProperty
 
    def author(self):
 
        return safe_unicode(self._ctx.user())
 

	
 
    @LazyProperty
 
    def date(self):
 
        return date_fromtimestamp(*self._ctx.date())
 

	
 
    @LazyProperty
 
    def _timestamp(self):
 
        return self._ctx.date()[0]
 

	
 
    @LazyProperty
 
    def status(self):
 
        """
 
        Returns modified, added, removed, deleted files for current changeset
 
        """
 
        return self.repository._repo.status(self._ctx.p1().node(),
 
                                            self._ctx.node())
 

	
 
    @LazyProperty
 
    def _file_paths(self):
 
        return list(self._ctx)
 

	
 
    @LazyProperty
 
    def _dir_paths(self):
 
        p = list(set(get_dirs_for_path(*self._file_paths)))
 
        p.insert(0, '')
 
        return p
 

	
 
    @LazyProperty
 
    def _paths(self):
 
        return self._dir_paths + self._file_paths
 

	
 
    @LazyProperty
 
    def id(self):
 
        if self.last:
 
            return u'tip'
 
        return self.short_id
 

	
 
    @LazyProperty
 
    def short_id(self):
 
        return self.raw_id[:12]
 

	
 
    @LazyProperty
 
    def parents(self):
 
        """
 
        Returns list of parents changesets.
 
        """
 
        return [self.repository.get_changeset(parent.rev())
 
                for parent in self._ctx.parents() if parent.rev() >= 0]
 

	
 
    @LazyProperty
 
    def children(self):
 
        """
 
        Returns list of children changesets.
 
        """
 
        return [self.repository.get_changeset(child.rev())
 
                for child in self._ctx.children() if child.rev() >= 0]
 

	
 
    def next(self, branch=None):
 

	
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _next(changeset, branch):
 
            try:
 
                next_ = changeset.revision + 1
 
                next_rev = changeset.repository.revisions[next_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 
            cs = changeset.repository.get_changeset(next_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _next(cs, branch)
 

	
 
            return cs
 

	
 
        return _next(self, branch)
 

	
 
    def prev(self, branch=None):
 
        if branch and self.branch != branch:
 
            raise VCSError('Branch option used on changeset not belonging '
 
                           'to that branch')
 

	
 
        def _prev(changeset, branch):
 
            try:
 
                prev_ = changeset.revision - 1
 
                if prev_ < 0:
 
                    raise IndexError
 
                prev_rev = changeset.repository.revisions[prev_]
 
            except IndexError:
 
                raise ChangesetDoesNotExistError
 

	
 
            cs = changeset.repository.get_changeset(prev_rev)
 

	
 
            if branch and branch != cs.branch:
 
                return _prev(cs, branch)
 

	
 
            return cs
 

	
 
        return _prev(self, branch)
 

	
 
    def diff(self, ignore_whitespace=True, context=3):
 
        return ''.join(self._ctx.diff(git=True,
 
                                      ignore_whitespace=ignore_whitespace,
 
                                      context=context))
 

	
 
    def _fix_path(self, path):
 
        """
 
        Paths are stored without trailing slash so we need to get rid off it if
 
        needed. Also mercurial keeps filenodes as str so we need to decode
 
        from unicode to str
 
        """
 
        if path.endswith('/'):
 
            path = path.rstrip('/')
 

	
 
        return safe_str(path)
 

	
 
    def _get_kind(self, path):
 
        path = self._fix_path(path)
 
        if path in self._file_paths:
 
            return NodeKind.FILE
 
        elif path in self._dir_paths:
 
            return NodeKind.DIR
 
        else:
 
            raise ChangesetError("Node does not exist at the given path %r"
 
                % (path))
 

	
 
    def _get_filectx(self, path):
 
        path = self._fix_path(path)
 
        if self._get_kind(path) != NodeKind.FILE:
 
            raise ChangesetError("File does not exist for revision %r at "
 
                " %r" % (self.raw_id, path))
 
        return self._ctx.filectx(path)
 

	
 
    def _extract_submodules(self):
 
        """
 
        returns a dictionary with submodule information from substate file
 
        of hg repository
 
        """
 
        return self._ctx.substate
 

	
 
    def get_file_mode(self, path):
 
        """
 
        Returns stat mode of the file at the given ``path``.
 
        """
 
        fctx = self._get_filectx(path)
 
        if 'x' in fctx.flags():
 
            return 0100755
 
        else:
 
            return 0100644
 

	
 
    def get_file_content(self, path):
 
        """
 
        Returns content of the file at given ``path``.
 
        """
 
        fctx = self._get_filectx(path)
 
        return fctx.data()
 

	
 
    def get_file_size(self, path):
 
        """
 
        Returns size of the file at given ``path``.
 
        """
 
        fctx = self._get_filectx(path)
 
        return fctx.size()
 

	
 
    def get_file_changeset(self, path):
 
        """
 
        Returns last commit of the file at the given ``path``.
 
        """
 
        node = self.get_node(path)
 
        return node.history[0]
 

	
 
    def get_file_history(self, path):
 
        """
 
        Returns history of file as reversed list of ``Changeset`` objects for
 
        which file at given ``path`` has been modified.
 
        """
 
        fctx = self._get_filectx(path)
 
        nodes = [fctx.filectx(x).node() for x in fctx.filelog()]
 
        changesets = [self.repository.get_changeset(hex(node))
 
            for node in reversed(nodes)]
 
        return changesets
 

	
 
    def get_file_annotate(self, path):
 
        """
 
        Returns a generator of four element tuples with
 
            lineno, sha, changeset lazy loader and line
rhodecode/templates/files/files_browser.html
Show inline comments
 
<%def name="file_class(node)">
 
    %if node.is_file():
 
        <%return "browser-file" %>
 
    %else:
 
        <%return "browser-dir"%>
 
    %endif
 
</%def>
 
<div id="body" class="browserblock">
 
    <div class="browser-header">
 
        <div class="browser-nav">
 
            ${h.form(h.url.current())}
 
            <div class="info_box">
 
              <span class="rev">${_('view')}@rev</span>
 
              <a class="ui-btn ypjax-link" href="${c.url_prev}" title="${_('previous revision')}">&laquo;</a>
 
              ${h.text('at_rev',value=c.changeset.revision,size=5)}
 
              <a class="ui-btn ypjax-link" href="${c.url_next}" title="${_('next revision')}">&raquo;</a>
 
              ## ${h.submit('view',_('view'),class_="ui-btn")}
 
            </div>
 
            ${h.end_form()}
 
        </div>
 
        <div class="browser-branch">
 
           ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)}
 
           <label>${_('follow current branch')}</label>
 
        </div>
 
        <div class="browser-search">
 
              <div id="search_activate_id" class="search_activate">
 
                  <a class="ui-btn" id="filter_activate" href="#">${_('search file list')}</a>
 
              </div>
 
              % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
 
                    <div id="add_node_id" class="add_node">
 
                        <a class="ui-btn" href="${h.url('files_add_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path)}">${_('add new file')}</a>
 
                    </div>
 
              % endif
 
        <div>
 
            <div id="node_filter_box_loading" style="display:none">${_('Loading file list...')}</div>
 
            <div id="node_filter_box" style="display:none">
 
            ${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.file.path)}/<input class="init" type="text" value="type to search..." name="filter" size="25" id="node_filter" autocomplete="off">
 
            </div>
 
        </div>
 
        </div>
 
    </div>
 

	
 
    <div class="browser-body">
 
        <table class="code-browser">
 
            <thead>
 
                <tr>
 
                    <th>${_('Name')}</th>
 
                    <th>${_('Size')}</th>
 
                    <th>${_('Mimetype')}</th>
 
                    <th>${_('Last Revision')}</th>
 
                    <th>${_('Last modified')}</th>
 
                    <th>${_('Last commiter')}</th>
 
                    <th>${_('Last committer')}</th>
 
                </tr>
 
            </thead>
 

	
 
            <tbody id="tbody">
 
                %if c.file.parent:
 
                <tr class="parity0">
 
                    <td>
 
                        ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")}
 
                    </td>
 
                    <td></td>
 
                    <td></td>
 
                    <td></td>
 
                    <td></td>
 
                    <td></td>
 
                </tr>
 
                %endif
 

	
 
            %for cnt,node in enumerate(c.file):
 
                <tr class="parity${cnt%2}">
 
                     <td>
 
                        %if node.is_submodule():
 
                           ${h.link_to(node.name,node.url or '#',class_="submodule-dir ypjax-link")}
 
                        %else:
 
                          ${h.link_to(node.name, h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")}
 
                        %endif:
 
                     </td>
 
                     <td>
 
                     %if node.is_file():
 
                         ${h.format_byte_size(node.size,binary=True)}
 
                     %endif
 
                     </td>
 
                     <td>
 
                      %if node.is_file():
 
                          ${node.mimetype}
 
                      %endif
 
                     </td>
 
                     <td>
 
                         %if node.is_file():
 
                             <div class="tooltip" title="${h.tooltip(node.last_changeset.message)}">
 
                             <pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre>
 
                            </div>
 
                         %endif
 
                     </td>
 
                     <td>
 
                         %if node.is_file():
 
                             <span class="tooltip" title="${h.tooltip(h.fmt_date(node.last_changeset.date))}">
 
                            ${h.age(node.last_changeset.date)}</span>
 
                         %endif
 
                     </td>
 
                     <td>
 
                         %if node.is_file():
 
                             <span title="${node.last_changeset.author}">
 
                            ${h.person(node.last_changeset.author)}
 
                            </span>
 
                         %endif
 
                     </td>
 
                </tr>
 
            %endfor
 
            </tbody>
 
            <tbody id="tbody_filtered" style="display:none">
 
            </tbody>
 
        </table>
 
    </div>
 
</div>
0 comments (0 inline, 0 general)