Merge "ChangeScreen2: Simplify update available bar"
diff --git a/.gitmodules b/.gitmodules
index 2ac959c..b7154da 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,11 @@
+[submodule "plugins/commit-message-length-validator"]
+ path = plugins/commit-message-length-validator
+ url = https://gerrit.googlesource.com/plugins/commit-message-length-validator
+
+[submodule "plugins/cookbook-plugin"]
+ path = plugins/cookbook-plugin
+ url = https://gerrit.googlesource.com/plugins/cookbook-plugin
+
[submodule "plugins/replication"]
path = plugins/replication
url = https://gerrit.googlesource.com/plugins/replication
@@ -6,10 +14,3 @@
path = plugins/reviewnotes
url = https://gerrit.googlesource.com/plugins/reviewnotes
-[submodule "plugins/commit-message-length-validator"]
- path = plugins/commit-message-length-validator
- url = https://gerrit.googlesource.com/plugins/commit-message-length-validator
-
-[submodule "plugins/cookbook-plugin"]
- path = plugins/cookbook-plugin
- url = https://gerrit.googlesource.com/plugins/cookbook-plugin
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index 218891c..c644ef9 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -388,6 +388,10 @@
more agreements.
+
By default this is false (no agreements are used).
++
+To enable the actual usage of contributor agreement the project
+specific config option in the `project.config` must be set:
+link:config-project-config.html[receive.requireContributorAgreement].
auth.allowGoogleAccountUpgrade::
+
@@ -1460,6 +1464,19 @@
+
Valid values are the characters '*', '(' and ')'.
+[[gitweb.linkDrafts]]gitweb.urlEncode::
++
+Whether or not Gerrit should encode the generated viewer URL.
++
+Gerrit composes the viewer URL using information about the project, branch, file
+or commit of the target object to be displayed. Typically viewers such as CGit
+and GitWeb do need those parts to be encoded, including the '/' in project's name,
+for being correctly parsed.
+However other viewers could instead require an unencoded URL (e.g. GitHub web
+based viewer)
++
+Valid values are "true" and "false," default is "true."
+
[[gitweb.linkDrafts]]gitweb.linkDrafts::
+
Whether or not Gerrit should provide links to gitweb on draft patch sets.
@@ -1468,7 +1485,7 @@
only allows publicly viewable references, set this to false to remove
the links to draft patch sets from the change review screen.
+
-Valid values are "true" and "false," default is "true."
+Valid values are "true" and "false," default is "true".
[[groups]]Section groups
~~~~~~~~~~~~~~~~~~~~~~~~
@@ -2250,9 +2267,10 @@
Gerrit administrators can use this setting to prevent developers
from pushing objects which are too large to Gerrit.
+
-This setting can also be set in the `project.config` in order to further
-reduce the global setting. The project specific setting is only honored
-when it further reduces the global limit.
+This setting can also be set in the `project.config`
+link:config-project-config.html[receive.maxObjectSizeLimit] in order
+to further reduce the global setting. The project specific setting is
+only honored when it further reduces the global limit.
+
Default is zero.
+
@@ -2929,7 +2947,7 @@
[[user.anonymousCoward]]user.anonymousCoward::
+
-Username that this displayed in the Gerrit WebUI and in e-mail
+Username that is displayed in the Gerrit WebUI and in e-mail
notifications if the full name of the user is not set.
+
By default "Anonymous Coward" is used.
diff --git a/Documentation/config-project-config.txt b/Documentation/config-project-config.txt
new file mode 100644
index 0000000..8529b67
--- /dev/null
+++ b/Documentation/config-project-config.txt
@@ -0,0 +1,225 @@
+Gerrit Code Review - Project Configuration File Format
+======================================================
+
+This page explains the storage format of Gerrit's project configuration
+and access control models.
+
+The web UI access control panel is a front end for human-readable
+configuration files under the +refs/meta/config+ namespace in the
+affected project. Direct manipulation of these files is mainly
+relevant in an automation scenario of the access controls.
+
+
+The +refs/meta/config+ namespace
+--------------------------------
+
+The namespace contains three different files that play different
+roles in the permission model. With read permission to that reference,
+it is possible to fetch the +refs/meta/config+ reference to a local
+repository. A nice side effect is that you can also upload changes
+to project permissions and review them just like with regular code
+changes. The preview changes option is also provided on the UI. Please note
+that you will have to configure push rights for the +refs/meta/config+ name
+space if you'd like to use the possibility to automate permission updates.
+
+
+[[file-project_config]]
+The file +project.config+
+-------------------------
+
+The +project.config+ file contains the link between groups and their
+permitted actions on reference patterns in this project and any projects
+that inherit its permissions.
+
+The format in this file corresponds to the Git config file format, so
+if you want to automate your permissions it is a good idea to use the
++git config+ command when writing to the file. This way you know you
+don't accidentally break the format of the file.
+
+Here follows a +git config+ command example:
+
+----
+$ git config -f project.config project.description "Rights inherited by all other projects"
+----
+
+Below you will find an example of the +project.config+ file format:
+
+----
+[project]
+ description = Rights inherited by all other projects
+[access "refs/*"]
+ read = group Administrators
+[capability]
+ administrateServer = group Administrators
+[receive]
+ requireContributorAgreement = false
+----
+
+As you can see, there are several sections.
+
+The link:#project-section[+project+ section] appears once per project.
+
+The link:#access-section[+access+ section] appears once per reference pattern,
+such as `refs/*` or `refs/heads/*`. Only one access section per pattern is
+allowed. You will find examples of keys and values in each category section
+<<access_category,below>>.
+
+The link:#receive-section[+receive+ section] appears once per project.
+
+The link:#submit-section[+submit+ section] appears once per project.
+
+The link:#capability-section[+capability+] section only appears once, and only
+in the +All-Projects+ repository. It controls core features that are configured
+on a global level. You can find examples of these
+<<capability_category,below>>.
+
+
+[[project-section]]
+Project section
+~~~~~~~~~~~~~~~
+
+The project section includes configuration of project settings.
+
+These are the keys:
+
+- Description
+
+
+[[receive-section]]
+Receive section
+~~~~~~~~~~~~~~~
+
+The receive section includes configuration of project-specific
+receive settings:
+
+[[receive.requireContributorAgreement]]receive.requireContributorAgreement::
++
+Controls whether or not a user must complete a contributor agreement before
+they can upload changes. Default is `INHERIT`. If `All-Project` enables this
+option then the dependent project must set it to false if users are not
+required to sign a contributor agreement prior to submitting changes for that
+specific project. To use that feature the global option in `gerrit.config`
+must be enabled:
+link:config-gerrit.html#auth.contributorAgreements[auth.contributorAgreements].
+
+[[receive.requireSignedOffBy]]receive.requireSignedOffBy::
++
+Sign-off can be a requirement for some projects (for example Linux kernel uses
+it). Sign-off is a line at the end of the commit message which certifies who
+is the author of the commit. Its main purpose is to improve tracking of who
+did what, especially with patches. Default is `INHERIT`, which means that this
+property is inherited from the parent project.
+
+[[receive.requireChangeId]]receive.requireChangeId::
++
+Controls whether or not the Change-Id must be included in the commit message
+in the last paragraph. Default is `INHERIT`, which means that this property
+is inherited from the parent project.
+
+[[receive.maxObjectSizeLimit]]receive.maxObjectSizeLimit::
++
+Maximum allowed Git object size that receive-pack will accept. If an object
+is larger than the given size the pack-parsing will abort and the push
+operation will fail. If set to zero then there is no limit.
++
+Project owners can use this setting to prevent developers from pushing
+objects which are too large to Gerrit. This setting can also be set it
+`gerrit.config` globally link:config-gerrit.html#receive.maxObjectSizeLimit[
+receive.maxObjectSizeLimit].
++
+The project specific setting in `project.config` is only honored when it
+further reduces the global limit.
++
+Default is zero.
++
+Common unit suffixes of k, m, or g are supported.
+
+[[submit-section]]
+Submit section
+~~~~~~~~~~~~~~
+
+The submit section includes configuration of project-specific
+submit settings:
+
+- 'mergeContent': Defines whether to automatically merge changes. Valid values
+are 'true', 'false', or 'INHERIT'. Default is 'INHERIT'.
+
+- 'action': defines the link:project-setup.html#submit_type[submit type]. Valid
+values are 'fast forward only', 'merge if necessary', 'rebase if necessary',
+'merge always' and 'cherry pick'. The default is 'merge if necessary'.
+
+Merge strategy
+
+
+[[access-section]]
+Access section
+~~~~~~~~~~~~~~
+
+Each +access+ section includes a reference and access rights connected
+to groups. Each group listed must exist in the link:#file-groups[+groups+ file].
+
+Please refer to the
+link:access-control.html#access_categories[Access Categories]
+documentation for a full list of available access rights.
+
+
+[[capability-section]]
+Capability section
+~~~~~~~~~~~~~~~~~~
+
+The +capability+ section only appears once, and only in the +All-Projects+
+repository. It controls Gerrit administration capabilities that are configured
+on a global level.
+
+Please refer to the
+link:access-control.html#global_capabilities[Global Capabilities]
+documentation for a full list of available capabilities.
+
+
+[[file-groups]]
+The file +groups+
+-----------------
+
+Each group in this list is linked with its UUID so that renaming of
+groups is possible without having to rewrite every +groups+ file
+in every repository where it's used.
+
+This is what the default groups file for +All-Projects.git+ looks like:
+
+----
+# UUID Group Name
+#
+3d6da7dc4e99e6f6e5b5196e21b6f504fc530bba Administrators
+global:Anonymous-Users Anonymous Users
+global:Project-Owners Project Owners
+global:Registered-Users Registered Users
+----
+
+This file can't be written to by the +git config+ command.
+
+In order to reference a group in +project.config+, it must be listed in
+the +groups+ file. When editing permissions through the web UI this
+file is maintained automatically, but when pushing updates to
++refs/meta/config+ this must be dealt with by hand. Gerrit will refuse
++project.config+ files that refer to groups not listed in +groups+.
+
+The UUID of a group can be found on the General tab of the group's page
+in the web UI or via the +-v+ option to
+link:cmd-ls-groups.html[the +ls-groups+ SSH command].
+
+
+[[file-rules_pl]]
+The file +rules.pl+
+-------------------
+
+The +rules.pl+ files allows you to replace or amend the default Prolog
+rules that control e.g. what conditions need to be fulfilled for a
+change to be submittable. This file content should be
+interpretable by the 'Prolog Cafe' interpreter.
+
+You can read more about the +rules.pl+ file and the prolog rules on
+link:prolog-cookbook.html[the Prolog cookbook page].
+
+GERRIT
+------
+Part of link:index.html[Gerrit Code Review]
diff --git a/Documentation/dev-buck.txt b/Documentation/dev-buck.txt
index 8bbea7e..15c145a 100644
--- a/Documentation/dev-buck.txt
+++ b/Documentation/dev-buck.txt
@@ -345,12 +345,13 @@
[-] BUILDING...FINISHED 0.2s
----
-Overwrite Buck's settings
-~~~~~~~~~~~~~~~~~~~~~~~~~
+Override Buck's settings
+~~~~~~~~~~~~~~~~~~~~~~~~
-In the latest version of Buck the wrapper script `buck_common` will source
-one of these files (if they exist): /etc/buck.conf, $HOME/.buck/buck.conf or
-$HOME/.buckrc. The trivial case to overwrite the Buck's default 1GB heap size:
+User-specific configuration can be placed in one of the following files:
+`/etc/buck.conf`, `$HOME/.buck/buck.conf` or `$HOME/.buckrc`.
+
+For example to override Buck's default 1GB heap size:
----
cat > $HOME/.buckrc <<EOF
@@ -361,7 +362,7 @@
EOF
----
-Or to debug BUCK, set BUCK_DEBUG_MODE to anything non-empty, then connect to
+Or to debug BUCK, set `BUCK_DEBUG_MODE` to anything non-empty, then connect to
port 8888:
----
diff --git a/Documentation/index.txt b/Documentation/index.txt
index 8ce2904..9b8acc4 100644
--- a/Documentation/index.txt
+++ b/Documentation/index.txt
@@ -33,6 +33,7 @@
.. link:project-setup.html[Project Setup]
.. link:access-control.html[Access Controls]
... link:config-labels.html[Review Labels]
+... link:config-project-config.html[Access Controls Configuration Format]
.. Multi-project management
... Submodules
... Repo
diff --git a/Documentation/rest-api-accounts.txt b/Documentation/rest-api-accounts.txt
index 7db83a4..02bb549 100644
--- a/Documentation/rest-api-accounts.txt
+++ b/Documentation/rest-api-accounts.txt
@@ -977,12 +977,15 @@
|Field Name ||Description
|`_account_id` ||The numeric ID of the account.
|`name` |optional|The full name of the user. +
-Only set if detailed account information is requested.
+Only set if link:rest-api-changes.html#detailed-accounts[detailed
+account information] is requested.
|`email` |optional|
The email address the user prefers to be contacted through. +
-Only set if detailed account information is requested.
+Only set if link:rest-api-changes.html#detailed-accounts[detailed
+account information] is requested.
|`username` |optional|The username of the user. +
-Only set if detailed account information is requested.
+Only set if link:rest-api-changes.html#detailed-accounts[detailed
+account information] is requested.
|===========================
[[account-input]]
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 08411f5..8c1fa16 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -209,8 +209,8 @@
[[detailed-accounts]]
--
-* `DETAILED_ACCOUNTS`: include `_account_id` and `email` fields when
- referencing accounts.
+* `DETAILED_ACCOUNTS`: include `_account_id`, `email` and `username`
+ fields when referencing accounts.
--
[[messages]]
@@ -422,7 +422,8 @@
"owner": {
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
"labels": {
"Verified": {
@@ -431,13 +432,15 @@
"value": 0,
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
{
"value": 0,
"_account_id": 1000097,
"name": "Jane Roe",
- "email": "jane.roe@example.com"
+ "email": "jane.roe@example.com",
+ "username": "jroe"
}
],
"values": {
@@ -450,25 +453,29 @@
"recommended": {
"_account_id": 1000097,
"name": "Jane Roe",
- "email": "jane.roe@example.com"
+ "email": "jane.roe@example.com",
+ "username": "jroe"
},
"disliked": {
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
"all": [
{
"value": -1,
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
{
"value": 1,
"_account_id": 1000097,
"name": "Jane Roe",
- "email": "jane.roe@example.com"
+ "email": "jane.roe@example.com",
+ "username": "jroe"
}
]
"values": {
@@ -498,12 +505,14 @@
{
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
{
"_account_id": 1000097,
"name": "Jane Roe",
- "email": "jane.roe@example.com"
+ "email": "jane.roe@example.com",
+ "username": "jroe"
}
],
"messages": [
@@ -512,7 +521,8 @@
"author": {
"_account_id": 1000096,
"name": "John Doe",
- "email": "john.doe@example.com"
+ "email": "john.doe@example.com",
+ "username": "jdoe"
},
"updated": "2013-03-23 21:34:02.419000000",
"message": "Patch Set 1:\n\nThis is the first message.",
@@ -523,7 +533,8 @@
"author": {
"_account_id": 1000097,
"name": "Jane Roe",
- "email": "jane.roe@example.com"
+ "email": "jane.roe@example.com",
+ "username": "jroe"
},
"updated": "2013-03-23 21:36:52.332000000",
"message": "Patch Set 1:\n\nThis is the second message.\n\nWith a line break.",
diff --git a/ReleaseNotes/ReleaseNotes-2.8.txt b/ReleaseNotes/ReleaseNotes-2.8.txt
index f0a948d..c07ae6c 100644
--- a/ReleaseNotes/ReleaseNotes-2.8.txt
+++ b/ReleaseNotes/ReleaseNotes-2.8.txt
@@ -32,7 +32,8 @@
------------------
-* New change screen with completely redesigned UI and fully using the REST API.
+* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/intro-change-screen.html[
+New change screen] with completely redesigned UI and fully using the REST API.
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-gerrit.html#index[
Secondary indexing with Lucene and Solr].
@@ -111,6 +112,14 @@
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_gerrit.html#httpd.filterClass[
Configurable filtering of HTTP traffic through Gerrit's HTTP protocol].
+* Labels can be
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_labels.html#httpd.label_copyAllScoresIfNoCodeChange[
+configured to copy scores forward to new patch sets if there is no code change].
+
+* Labels can be
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config_labels.html#httpd.label_copyAllScoresOnTrivialRebase[
+configured to copy scores forward to new patch sets for trivial rebases].
+
Web UI
~~~~~~
@@ -124,7 +133,7 @@
^^^^^^^^^^^^^^
-* New change screen with completely redesigned UI and using the REST API.
+* New change screen with completely redesigned UI, using the REST API.
+
Site administrators can
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/config-gerrit.html#gerrit.changeScreen[
@@ -133,6 +142,9 @@
Users can choose which one to use in their personal preferences, either using
the site default or explicitly choosing the old one or new one.
+* link:https://code.google.com/p/gerrit/issues/detail?id=141[Issue 141]:
+In the new change screen, comments can be added on a range of lines.
+
* New button to cherry-pick the change to another branch.
* When issuing a rebase via the Web UI, the committer is now the logged in
@@ -272,6 +284,9 @@
* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#suggest-reviewers[
Suggest reviewers]
+* link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/rest-api-changes.html#get-included-in[
+Get included in]
+
Config
^^^^^^
@@ -370,7 +385,7 @@
* Plugins may now
link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#plugin_name[
-define their own name].
+define their own name] and get the name injected at runtime.
* The "hello world" plugin is replaced with the "cookbook plugin" which has more
examples of the plugin API's usage.
@@ -384,6 +399,14 @@
* Plugins may bind REST endpoints with empty view names.
+* Plugins may now provide
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#top-menu-extensions[
+entries in Gerrit's top menu].
+
+* Plugins may now
+link:http://gerrit-documentation.googlecode.com/svn/Documentation/2.8/dev-plugins.html#stream-events[
+send events to the events stream].
+
Commit Message Length Checker
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -434,11 +457,6 @@
job is rescheduled according to the replication delay, rather than the retry
delay.
-Review Notes
-^^^^^^^^^^^^
-
-* Do not try to create review notes for ref deletion events.
-
ssh
~~~
@@ -517,6 +535,9 @@
* link:https://code.google.com/p/gerrit/issues/detail?id=1990[Issue 1990]:
Support optional Certificate Revocation List (CRL) with `CLIENT_SSL_CERT_LDAP`.
+* Do not override error and gc logging configuration provided by the
+`-Dlog4j.configuration` parameter.
+
Web UI
~~~~~~
@@ -525,9 +546,6 @@
^^^^^^
-* link:https://code.google.com/p/gerrit/issues/detail?id=1072[Issue 1072]:
-Fix "Push Merge Commit" permission on refs/heads/*
-
* link:https://code.google.com/p/gerrit/issues/detail?id=1574[Issue 1574]:
Correctly highlight matches of text in escaped HTML entities in suggestion results.
@@ -549,6 +567,15 @@
* link:https://code.google.com/p/gerrit/issues/detail?id=1814[Issue 1814]:
Sort labels alphabetically by name in the approval table.
+* Don't add "This patchset was cherry picked to ..." for the same change.
++
+If a patchset is cherry-picked to the same destination branch and
+ends up on the same change, it does not make sense to add the "This
+patchset was cherry picked to change ..." message.
++
+In this case, it makes more sense for the message to say "Uploaded
+patch set N" instead.
+
Project Screens
^^^^^^^^^^^^^^^
@@ -606,8 +633,28 @@
Plugins
~~~~~~~
+Global
+^^^^^^
+
* Better error message when a Javascript plugin cannot be loaded.
+* Plugin documentation links are opened in a new tab.
+
+
+Review Notes
+^^^^^^^^^^^^
+
+* Do not try to create review notes for ref deletion events.
+
+* Fix committing the notes from the export command.
+
+* link:https://code.google.com/p/gerrit/issues/detail?id=2087[Issue 2087]:
+Fix note creation when the same commit exists in another Git repository.
+
+* Improve the export command performance.
+
+* Create review note also when newObjectId already present in another branch.
+
Emails
~~~~~~
@@ -632,3 +679,15 @@
* Various spelling mistakes are corrected in the documentation and previous
release notes.
+
+Upgrades
+~~~~~~~~
+
+* Update JGit to 3.0.0.201306101825-r.41-g84d2738
+* Update gwtorm to 1.7
+* Update guice to 4.0-beta
+* Update guava to 15.0
+* Update H2 to 1.3.173
+* Update bouncycastle to 1.44
+* asciidoctor 0.1.4 is now required to build the documentation
+* jsr305 library was removed
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AccountCreator.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AccountCreator.java
index cb785b9..12add3e 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AccountCreator.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/AccountCreator.java
@@ -30,8 +30,10 @@
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.GroupCache;
import com.google.gerrit.server.ssh.SshKeyCache;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
+
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.KeyPair;
@@ -77,7 +79,7 @@
db.accountExternalIds().insert(Collections.singleton(extMailto));
}
- Account a = new Account(id);
+ Account a = new Account(id, TimeUtil.nowTs());
a.setFullName(fullName);
a.setPreferredEmail(email);
db.accounts().insert(Collections.singleton(a));
diff --git a/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java b/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
index 41474da..1f120ed 100644
--- a/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
+++ b/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
@@ -11,6 +11,7 @@
import com.google.common.hash.Funnel;
import com.google.common.hash.Funnels;
import com.google.common.hash.PrimitiveSink;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.TypeLiteral;
import org.h2.jdbc.JdbcSQLException;
@@ -114,7 +115,7 @@
@Override
public void put(final K key, V val) {
final ValueHolder<V> h = new ValueHolder<V>(val);
- h.created = System.currentTimeMillis();
+ h.created = TimeUtil.nowMs();
mem.put(key, h);
executor.execute(new Runnable() {
@Override
@@ -182,7 +183,7 @@
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.DAY_OF_MONTH, 1);
- long delay = cal.getTimeInMillis() - System.currentTimeMillis();
+ long delay = cal.getTimeInMillis() - TimeUtil.nowMs();
service.schedule(new Runnable() {
@Override
public void run() {
@@ -245,7 +246,7 @@
}
final ValueHolder<V> h = new ValueHolder<V>(loader.load(key));
- h.created = System.currentTimeMillis();
+ h.created = TimeUtil.nowMs();
executor.execute(new Runnable() {
@Override
public void run() {
@@ -461,7 +462,7 @@
c.touch =c.conn.prepareStatement("UPDATE data SET accessed=? WHERE k=?");
}
try {
- c.touch.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
+ c.touch.setTimestamp(1, TimeUtil.nowTs());
keyType.set(c.touch, 2, key);
c.touch.executeUpdate();
} finally {
@@ -490,7 +491,7 @@
keyType.set(c.put, 1, key);
c.put.setObject(2, holder.value);
c.put.setTimestamp(3, new Timestamp(holder.created));
- c.put.setTimestamp(4, new Timestamp(System.currentTimeMillis()));
+ c.put.setTimestamp(4, TimeUtil.nowTs());
c.put.executeUpdate();
holder.clean = true;
} finally {
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/GitWebType.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/GitWebType.java
index f4dc444..5ef6d6a 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/GitWebType.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/GitWebType.java
@@ -78,6 +78,9 @@
/** Whether to include links to draft patch sets */
private boolean linkDrafts;
+ /** Whether to encode URL segments */
+ private boolean urlEncode;
+
/** Private default constructor for gson. */
protected GitWebType() {
}
@@ -217,4 +220,12 @@
public void setLinkDrafts(boolean linkDrafts) {
this.linkDrafts = linkDrafts;
}
+
+ public boolean isUrlEncode() {
+ return urlEncode;
+ }
+
+ public void setUrlEncode(boolean urlEncode) {
+ this.urlEncode = urlEncode;
+ }
}
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/GitReferenceUpdatedListener.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/GitReferenceUpdatedListener.java
index 2911ded..49a697e 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/GitReferenceUpdatedListener.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/GitReferenceUpdatedListener.java
@@ -16,20 +16,15 @@
import com.google.gerrit.extensions.annotations.ExtensionPoint;
-import java.util.List;
-
/** Notified when one or more references are modified. */
@ExtensionPoint
public interface GitReferenceUpdatedListener {
- public interface Update {
- String getRefName();
- String getOldObjectId();
- String getNewObjectId();
- }
public interface Event {
String getProjectName();
- List<Update> getUpdates();
+ String getRefName();
+ String getOldObjectId();
+ String getNewObjectId();
}
void onGitReferenceUpdated(Event event);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
index 2f59435..6466f42 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -560,7 +560,7 @@
};
gBody.add(body);
- RpcStatus.INSTANCE = new RpcStatus(topMenu);
+ RpcStatus.INSTANCE = new RpcStatus();
JsonUtil.addRpcStartHandler(RpcStatus.INSTANCE);
JsonUtil.addRpcCompleteHandler(RpcStatus.INSTANCE);
JsonUtil.setDefaultXsrfManager(new XsrfManager() {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
index 44b4479..0cb3fa2 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritCss.java
@@ -198,8 +198,6 @@
String rightBorder();
String rightmost();
String rpcStatus();
- String rpcStatusLoading();
- String rpcStatusPanel();
String screen();
String screenHeader();
String screenNoHeader();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GitwebLink.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GitwebLink.java
index 493b3f8..216395b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GitwebLink.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GitwebLink.java
@@ -94,6 +94,10 @@
}
private String encode(String segment) {
- return URL.encodeQueryString(type.replacePathSeparator(segment));
+ if (type.isUrlEncode()) {
+ return URL.encodeQueryString(type.replacePathSeparator(segment));
+ } else {
+ return segment;
+ }
}
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/RpcStatus.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/RpcStatus.java
index 955c8e2..cd715c6 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/RpcStatus.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/RpcStatus.java
@@ -14,10 +14,9 @@
package com.google.gerrit.client;
-import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwtjsonrpc.client.event.RpcCompleteEvent;
import com.google.gwtjsonrpc.client.event.RpcCompleteHandler;
import com.google.gwtjsonrpc.client.event.RpcStartEvent;
@@ -41,17 +40,12 @@
private final Label loading;
private int activeCalls;
- RpcStatus(final Panel p) {
- final FlowPanel r = new FlowPanel();
- r.setStyleName(Gerrit.RESOURCES.css().rpcStatusPanel());
- p.add(r);
-
+ RpcStatus() {
loading = new InlineLabel();
loading.setText(Gerrit.C.rpcStatusWorking());
loading.setStyleName(Gerrit.RESOURCES.css().rpcStatus());
- loading.addStyleName(Gerrit.RESOURCES.css().rpcStatusLoading());
loading.setVisible(false);
- r.add(loading);
+ RootPanel.get().add(loading);
}
@Override
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
index 7ec0844..f4db4ff 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectInfoScreen.java
@@ -326,6 +326,9 @@
}
private void initProjectActions(ConfigInfo info) {
+ actionsGrid.clear(true);
+ actionsGrid.removeAllRows();
+
NativeMap<ActionInfo> actions = info.actions();
if (actions == null || actions.isEmpty()) {
return;
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml
index 1a64b1d..4c8579c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DiffTable.ui.xml
@@ -53,10 +53,10 @@
.a .CodeMirror-scroll { padding-right: 0; }
.a .CodeMirror-vscrollbar { display: none !important; }
- .a .diff { background-color: rgba(255, 170, 170, 0.3); }
- .b .diff { background-color: rgba(153, 255, 153, 0.3); }
- .a .intralineBg { background-color: rgba(255, 238, 238, 0.3); }
- .b .intralineBg { background-color: rgba(221, 255, 221, 0.3); }
+ .a .diff { background-color: #faa; }
+ .b .diff { background-color: #9f9; }
+ .a .intralineBg { background-color: #fee; }
+ .b .intralineBg { background-color: #dfd; }
.fileCommentRow {
background-color: #eee;
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
index 505b644..58b476c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java
@@ -51,7 +51,6 @@
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
-import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
@@ -68,9 +67,6 @@
import com.google.gwtexpui.globalkey.client.KeyCommand;
import com.google.gwtexpui.globalkey.client.KeyCommandSet;
import com.google.gwtexpui.globalkey.client.ShowHelpCommand;
-import com.google.gwtexpui.user.client.DialogVisibleEvent;
-import com.google.gwtexpui.user.client.DialogVisibleHandler;
-import com.google.gwtexpui.user.client.UserAgent;
import net.codemirror.lib.CodeMirror;
import net.codemirror.lib.CodeMirror.EventHandler;
@@ -237,16 +233,6 @@
@Override
public void onShowView() {
super.onShowView();
-
- handlers.add(UserAgent.addDialogVisibleHandler(new DialogVisibleHandler() {
- @Override
- public void onDialogVisible(DialogVisibleEvent event) {
- diffTable.getElement().getStyle().setVisibility(
- event.isVisible()
- ? Style.Visibility.HIDDEN
- : Style.Visibility.VISIBLE);
- }
- }));
resizeCodeMirror();
Window.enableScrolling(false);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css b/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
index 7f45d2e..651ab51 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/gerrit.css
@@ -341,7 +341,7 @@
border: 1px solid black;
background: white;
box-shadow: 3px 3px 5px #888;
- z-index: 5;
+ z-index: 200;
}
.searchPanel {
white-space: nowrap;
@@ -356,29 +356,22 @@
padding: 3px 6px;
}
.suggestBoxPopup {
- z-index: 5;
+ z-index: 200;
}
/** RPC Status **/
-.rpcStatusPanel {
- position: absolute;
- left: 50%;
- float: left;
- top: 6px;
-}
-
.rpcStatus {
position: fixed;
+ top: 6px;
+ left: 50%;
padding-top: 4px;
padding-bottom: 4px;
padding-left: 10px;
padding-right: 10px;
text-align: center;
font-weight: bold;
-}
-
-.rpcStatusLoading {
background: #FFF1A8;
+ z-index: 10;
}
@@ -391,9 +384,11 @@
color: backgroundColor;
font-size: 15px;
font-family: verdana;
+ z-index: 200;
}
.errorDialogGlass {
opacity: 0.75;
+ z-index: 200;
}
@if user.agent safari {
.errorDialogGlass {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
index a0789ec..fd3e35c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
@@ -66,6 +66,7 @@
import org.eclipse.jgit.diff.Edit;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@@ -250,7 +251,7 @@
}
protected boolean hasDifferences(PatchScript script) {
- return hasEdits(script) || hasMeta(script);
+ return hasEdits(script) || hasMeta(script) || hasComments(script);
}
public boolean isPureMetaChange(PatchScript script) {
@@ -267,6 +268,12 @@
return false;
}
+ // True if one of the two patch sets has comments
+ private boolean hasComments(PatchScript script) {
+ return !script.getCommentDetail().getCommentsA().isEmpty()
+ || !script.getCommentDetail().getCommentsB().isEmpty();
+ }
+
// True if this change is a mode change or a pure rename/copy
private boolean hasMeta(PatchScript script) {
return !script.getPatchHeader().isEmpty();
@@ -517,9 +524,10 @@
throw new RuntimeException("unexpected file id " + file);
}
- final PatchLineComment newComment =
- new PatchLineComment(new PatchLineComment.Key(parentKey, null),
- line, Gerrit.getUserAccount().getId(), null);
+ final PatchLineComment newComment = new PatchLineComment(
+ new PatchLineComment.Key(parentKey, null), line,
+ Gerrit.getUserAccount().getId(), null,
+ new Timestamp(System.currentTimeMillis()));
newComment.setSide(side);
newComment.setMessage("");
@@ -963,7 +971,8 @@
PatchLineComment newComment =
new PatchLineComment(new PatchLineComment.Key(comment.getKey()
.getParentKey(), null), comment.getLine(), Gerrit
- .getUserAccount().getId(), comment.getKey().get());
+ .getUserAccount().getId(), comment.getKey().get(),
+ new Timestamp(System.currentTimeMillis()));
newComment.setSide(comment.getSide());
return newComment;
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitWebConfig.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitWebConfig.java
index 22d7568..dfb1cc2 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitWebConfig.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitWebConfig.java
@@ -56,6 +56,7 @@
type.setRevision(cfg.getString("gitweb", null, "revision"));
type.setFileHistory(cfg.getString("gitweb", null, "filehistory"));
type.setLinkDrafts(cfg.getBoolean("gitweb", null, "linkdrafts", true));
+ type.setUrlEncode(cfg.getBoolean("gitweb", null, "urlencode", true));
String pathSeparator = cfg.getString("gitweb", null, "pathSeparator");
if (pathSeparator != null) {
if (pathSeparator.length() == 1) {
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/HttpLogoutServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/HttpLogoutServlet.java
index c3639ce..ddbba3b 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/HttpLogoutServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/HttpLogoutServlet.java
@@ -14,14 +14,15 @@
package com.google.gerrit.httpd;
+import com.google.common.base.Strings;
import com.google.gerrit.audit.AuditEvent;
import com.google.gerrit.audit.AuditService;
-import com.google.common.base.Strings;
import com.google.gerrit.common.Nullable;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.account.AccountManager;
import com.google.gerrit.server.config.AuthConfig;
import com.google.gerrit.server.config.CanonicalWebUrl;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -80,7 +81,7 @@
final String sid = webSession.get().getSessionId();
final CurrentUser currentUser = webSession.get().getCurrentUser();
final String what = "sign out";
- final long when = System.currentTimeMillis();
+ final long when = TimeUtil.nowMs();
try {
doLogout(req, rsp);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
index a5338f8..03eca9f 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebSessionManager.java
@@ -22,6 +22,7 @@
import static com.google.gerrit.server.ioutil.BasicSerialization.writeFixInt64;
import static com.google.gerrit.server.ioutil.BasicSerialization.writeString;
import static com.google.gerrit.server.ioutil.BasicSerialization.writeVarInt32;
+import static com.google.gerrit.server.util.TimeUtil.nowMs;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
@@ -53,10 +54,6 @@
private static final Logger log = LoggerFactory.getLogger(WebSessionManager.class);
static final String CACHE_NAME = "web_sessions";
- static long now() {
- return System.currentTimeMillis();
- }
-
private final long sessionMaxAgeMillis;
private final SecureRandom prng;
private final Cache<String, Val> self;
@@ -117,7 +114,7 @@
final long halfAgeRefresh = sessionMaxAgeMillis >>> 1;
final long minRefresh = MILLISECONDS.convert(1, HOURS);
final long refresh = Math.min(halfAgeRefresh, minRefresh);
- final long now = now();
+ final long now = nowMs();
final long refreshCookieAt = now + refresh;
final long expiresAt = now + sessionMaxAgeMillis;
if (sid == null) {
@@ -150,7 +147,7 @@
Val get(final Key key) {
Val val = self.getIfPresent(key.token);
- if (val != null && val.expiresAt <= now()) {
+ if (val != null && val.expiresAt <= nowMs()) {
self.invalidate(key.token);
return null;
}
@@ -223,7 +220,7 @@
}
boolean needsCookieRefresh() {
- return refreshCookieAt <= now();
+ return refreshCookieAt <= nowMs();
}
boolean isPersistentCookie() {
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
index 1ecd929..47a9263 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java
@@ -24,6 +24,7 @@
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.NoSuchChangeException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtexpui.server.CacheHeaders;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -333,7 +334,7 @@
md.update(req.getRemoteAddr().getBytes("UTF-8"));
md.update(buf, 0, 4);
- NB.encodeInt64(buf, 0, System.currentTimeMillis());
+ NB.encodeInt64(buf, 0, TimeUtil.nowMs());
md.update(buf, 0, 8);
rng.nextBytes(buf);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
index becacf1..517b017 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
@@ -16,7 +16,9 @@
import static com.google.common.base.Charsets.UTF_8;
import static com.google.common.base.Preconditions.checkNotNull;
+
import static java.math.RoundingMode.CEILING;
+
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
import static javax.servlet.http.HttpServletResponse.SC_CREATED;
@@ -76,6 +78,7 @@
import com.google.gerrit.server.OptionUtil;
import com.google.gerrit.server.OutputFormat;
import com.google.gerrit.server.account.CapabilityUtils;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.FieldNamingPolicy;
@@ -185,7 +188,7 @@
@Override
protected final void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
- long auditStartTs = System.currentTimeMillis();
+ long auditStartTs = TimeUtil.nowMs();
res.setHeader("Content-Disposition", "attachment");
res.setHeader("X-Content-Type-Options", "nosniff");
int status = SC_OK;
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java
index 55ecb01..5a0d328 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java
@@ -24,6 +24,7 @@
import com.google.gerrit.httpd.WebSession;
import com.google.gerrit.server.AccessPath;
import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gson.GsonBuilder;
import com.google.gwtjsonrpc.common.RemoteJsonService;
import com.google.gwtjsonrpc.server.ActiveCall;
@@ -238,7 +239,7 @@
final HttpServletResponse o) {
super(i, o);
this.session = session;
- this.when = System.currentTimeMillis();
+ this.when = TimeUtil.nowMs();
}
@Override
@@ -290,7 +291,7 @@
}
public long getElapsed() {
- return System.currentTimeMillis() - when;
+ return TimeUtil.nowMs() - when;
}
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
index d3e0f84..b6549ea 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
@@ -42,6 +42,7 @@
import com.google.gerrit.server.contact.ContactStore;
import com.google.gerrit.server.mail.EmailTokenVerifier;
import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtjsonrpc.common.AsyncCallback;
import com.google.gwtjsonrpc.common.VoidResult;
import com.google.gwtorm.server.OrmException;
@@ -139,7 +140,7 @@
if (useContactInfo) {
if (ContactInformation.hasAddress(info)
|| (me.isContactFiled() && ContactInformation.hasData(info))) {
- me.setContactFiled();
+ me.setContactFiled(TimeUtil.nowTs());
}
if (ContactInformation.hasData(info)) {
try {
@@ -198,8 +199,8 @@
if (m == null) {
m = new AccountGroupMember(key);
db.accountGroupMembersAudit().insert(
- Collections.singleton(
- new AccountGroupMemberAudit(m, account.getId())));
+ Collections.singleton(new AccountGroupMemberAudit(
+ m, account.getId(), TimeUtil.nowTs())));
db.accountGroupMembers().insert(Collections.singleton(m));
accountCache.evict(m.getAccountId());
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/SaveDraft.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/SaveDraft.java
index 66b5ec1..a9b908d 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/SaveDraft.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/patch/SaveDraft.java
@@ -25,6 +25,7 @@
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.NoSuchChangeException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
@@ -91,8 +92,9 @@
}
final PatchLineComment nc =
- new PatchLineComment(new PatchLineComment.Key(patchKey, ChangeUtil
- .messageUUID(db)), comment.getLine(), me, comment.getParentUuid());
+ new PatchLineComment(new PatchLineComment.Key(patchKey,
+ ChangeUtil.messageUUID(db)), comment.getLine(), me,
+ comment.getParentUuid(), TimeUtil.nowTs());
nc.setSide(comment.getSide());
nc.setMessage(comment.getMessage());
nc.setRange(comment.getRange());
@@ -104,7 +106,7 @@
if (!me.equals(comment.getAuthor())) {
throw new NoSuchChangeException(changeId);
}
- comment.updated();
+ comment.updated(TimeUtil.nowTs());
db.patchComments().update(Collections.singleton(comment));
db.commit();
return comment;
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
index d686f68..3681888 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/ReviewProjectAccess.java
@@ -37,6 +37,7 @@
import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -105,7 +106,8 @@
user.getAccountId(),
new Branch.NameKey(
config.getProject().getNameKey(),
- GitRepositoryManager.REF_CONFIG));
+ GitRepositoryManager.REF_CONFIG),
+ TimeUtil.nowTs());
ps.setCreatedOn(change.getCreatedOn());
ps.setUploader(change.getOwner());
diff --git a/gerrit-launcher/BUCK b/gerrit-launcher/BUCK
index e5ff3d0..344e53d 100644
--- a/gerrit-launcher/BUCK
+++ b/gerrit-launcher/BUCK
@@ -1,6 +1,7 @@
java_library(
name = 'launcher',
srcs = glob(['src/main/java/**/*.java']),
+ deps = ['//lib/joda:joda-time'],
visibility = [
'//gerrit-acceptance-tests/...',
'//gerrit-main:main_lib',
diff --git a/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java b/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java
index afe61d2..2dd20a2 100644
--- a/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java
+++ b/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java
@@ -17,6 +17,8 @@
import static java.util.concurrent.TimeUnit.DAYS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import org.joda.time.DateTimeUtils;
+
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -506,7 +508,7 @@
//
final File[] tmpEntries = tmp.listFiles();
if (tmpEntries != null) {
- final long now = System.currentTimeMillis();
+ final long now = DateTimeUtils.currentTimeMillis();
final long expired = now - MILLISECONDS.convert(7, DAYS);
for (final File tmpEntry : tmpEntries) {
if (tmpEntry.isDirectory() && tmpEntry.lastModified() < expired) {
diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java
index d5666c2..c3570a1 100644
--- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java
+++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/LuceneVersionManager.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.lucene;
diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/OnlineReindexer.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/OnlineReindexer.java
index 08338eb..d3dc963 100644
--- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/OnlineReindexer.java
+++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/OnlineReindexer.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.lucene;
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java
index 5ee335d..6aef509 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HttpLog.java
@@ -17,6 +17,7 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.util.TimeUtil;
import org.apache.log4j.Appender;
import org.apache.log4j.AsyncAppender;
@@ -95,7 +96,7 @@
final LoggingEvent event = new LoggingEvent( //
Logger.class.getName(), // fqnOfCategoryClass
log, // logger
- System.currentTimeMillis(), // when
+ TimeUtil.nowMs(), // when
Level.INFO, // level
"", // message text
"HTTPD", // thread name
@@ -162,7 +163,7 @@
dateFormat = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z");
dateFormat.setTimeZone(tz);
- lastTimeMillis = System.currentTimeMillis();
+ lastTimeMillis = TimeUtil.nowMs();
lastTimeString = dateFormat.format(new Date(lastTimeMillis));
}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
index 35df8d9..da08804 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
@@ -25,6 +25,7 @@
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
@@ -593,10 +594,10 @@
ProcessBuilder proc = new ProcessBuilder(buck, "build", target)
.directory(root)
.redirectErrorStream(true);
- if (properties.contains("PATH")) {
+ if (properties.containsKey("PATH")) {
proc.environment().put("PATH", properties.getProperty("PATH"));
}
- long start = System.currentTimeMillis();
+ long start = TimeUtil.nowMs();
Process rebuild = proc.start();
byte[] out;
InputStream in = rebuild.getInputStream();
@@ -619,7 +620,7 @@
System.exit(status);
}
- long time = System.currentTimeMillis() - start;
+ long time = TimeUtil.nowMs() - start;
log.info(String.format("UPDATED %s in %.3fs", target, time / 1000.0));
}
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitContainer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitContainer.java
index fbd543d..aa584e8 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitContainer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/InitContainer.java
@@ -57,7 +57,7 @@
try {
myWar = GerritLauncher.getDistributionArchive();
} catch (FileNotFoundException e) {
- System.err.println("warn: Cannot find gerrit.war");
+ System.err.println("warn: Cannot find distribution archive (e.g. gerrit.war)");
myWar = null;
}
@@ -75,7 +75,7 @@
if (siteWar.exists()) {
copy = ui.yesno(true, "Upgrade %s", siteWar.getPath());
} else {
- copy = ui.yesno(true, "Copy gerrit.war to %s", siteWar.getPath());
+ copy = ui.yesno(true, "Copy %s to %s", myWar.getName(), siteWar.getPath());
if (copy) {
container.unset("war");
} else {
@@ -84,7 +84,7 @@
}
if (copy) {
if (!ui.isBatch()) {
- System.err.format("Copying gerrit.war to %s", siteWar.getPath());
+ System.err.format("Copying %s to %s", myWar.getName(), siteWar.getPath());
System.err.println();
}
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
index 3ae61e4..5cfa5e1 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Account.java
@@ -144,10 +144,11 @@
*
* @param newId unique id, see
* {@link com.google.gerrit.reviewdb.server.ReviewDb#nextAccountId()}.
+ * @param registeredOn when the account was registered.
*/
- public Account(final Account.Id newId) {
- accountId = newId;
- registeredOn = new Timestamp(System.currentTimeMillis());
+ public Account(Account.Id newId, Timestamp registeredOn) {
+ this.accountId = newId;
+ this.registeredOn = registeredOn;
generalPreferences = new AccountGeneralPreferences();
generalPreferences.resetToDefaults();
@@ -203,8 +204,8 @@
return contactFiledOn;
}
- public void setContactFiled() {
- contactFiledOn = new Timestamp(System.currentTimeMillis());
+ public void setContactFiled(Timestamp ts) {
+ contactFiledOn = ts;
}
public boolean isActive() {
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupByIdAud.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupByIdAud.java
index 8ea78e2..07e7d03 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupByIdAud.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupByIdAud.java
@@ -86,11 +86,6 @@
addedBy = adder;
}
- public AccountGroupByIdAud(final AccountGroupById m,
- final Account.Id adder) {
- this(m, adder, now());
- }
-
public AccountGroupByIdAud.Key getKey() {
return key;
}
@@ -99,17 +94,8 @@
return removedOn == null;
}
- public void removed(final Account.Id deleter) {
- removedBy = deleter;
- removedOn = now();
- }
-
public void removed(final Account.Id deleter, final Timestamp when) {
removedBy = deleter;
removedOn = when;
}
-
- private static Timestamp now() {
- return new Timestamp(System.currentTimeMillis());
- }
}
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupMemberAudit.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupMemberAudit.java
index 523134b..d3798db 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupMemberAudit.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/AccountGroupMemberAudit.java
@@ -79,11 +79,6 @@
}
public AccountGroupMemberAudit(final AccountGroupMember m,
- final Account.Id adder) {
- this(m, adder, now());
- }
-
- public AccountGroupMemberAudit(final AccountGroupMember m,
final Account.Id adder, Timestamp addedOn) {
final Account.Id who = m.getAccountId();
final AccountGroup.Id group = m.getAccountGroupId();
@@ -99,17 +94,13 @@
return removedOn == null;
}
- public void removed(final Account.Id deleter) {
+ public void removed(final Account.Id deleter, final Timestamp when) {
removedBy = deleter;
- removedOn = now();
+ removedOn = when;
}
public void removedLegacy() {
removedBy = addedBy;
removedOn = key.addedOn;
}
-
- private static Timestamp now() {
- return new Timestamp(System.currentTimeMillis());
- }
}
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
index 7dedf14..76a38b9 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
@@ -388,11 +388,11 @@
protected Change() {
}
- public Change(final Change.Key newKey, final Change.Id newId,
- final Account.Id ownedBy, final Branch.NameKey forBranch) {
+ public Change(Change.Key newKey, Change.Id newId, Account.Id ownedBy,
+ Branch.NameKey forBranch, Timestamp ts) {
changeKey = newKey;
changeId = newId;
- createdOn = new Timestamp(System.currentTimeMillis());
+ createdOn = ts;
lastUpdatedOn = createdOn;
owner = ownedBy;
dest = forBranch;
@@ -435,10 +435,6 @@
return rowVersion;
}
- public void resetLastUpdatedOn() {
- lastUpdatedOn = new Timestamp(System.currentTimeMillis());
- }
-
public String getSortKey() {
return sortKey;
}
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/ChangeMessage.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/ChangeMessage.java
index e05f5e7..b98104a 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/ChangeMessage.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/ChangeMessage.java
@@ -78,11 +78,6 @@
}
public ChangeMessage(final ChangeMessage.Key k, final Account.Id a,
- final PatchSet.Id psid) {
- this(k, a, new Timestamp(System.currentTimeMillis()), psid);
- }
-
- public ChangeMessage(final ChangeMessage.Key k, final Account.Id a,
final Timestamp wo, final PatchSet.Id psid) {
key = k;
author = a;
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchLineComment.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchLineComment.java
index 0119c3e..916219b 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchLineComment.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchLineComment.java
@@ -123,14 +123,14 @@
protected PatchLineComment() {
}
- public PatchLineComment(final PatchLineComment.Key id, final int line,
- final Account.Id a, String parentUuid) {
+ public PatchLineComment(PatchLineComment.Key id, int line, Account.Id a,
+ String parentUuid, Timestamp when) {
key = id;
lineNbr = line;
author = a;
this.parentUuid = parentUuid;
setStatus(Status.DRAFT);
- updated();
+ updated(when);
}
public PatchLineComment.Key getKey() {
@@ -177,8 +177,8 @@
message = s;
}
- public void updated() {
- writtenOn = new Timestamp(System.currentTimeMillis());
+ public void updated(Timestamp when) {
+ writtenOn = when;
}
public void setWrittenOn(Timestamp ts) {
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSetApproval.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSetApproval.java
index 8d79d66..2c0f1f4 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSetApproval.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSetApproval.java
@@ -140,11 +140,11 @@
protected PatchSetApproval() {
}
- public PatchSetApproval(final PatchSetApproval.Key k, final short v) {
+ public PatchSetApproval(PatchSetApproval.Key k, short v, Timestamp ts) {
key = k;
changeOpen = true;
setValue(v);
- setGranted();
+ setGranted(ts);
}
public PatchSetApproval(final PatchSet.Id psId, final PatchSetApproval src) {
@@ -183,10 +183,6 @@
return granted;
}
- public void setGranted() {
- granted = new Timestamp(System.currentTimeMillis());
- }
-
public void setGranted(Timestamp ts) {
granted = ts;
}
diff --git a/gerrit-server/BUCK b/gerrit-server/BUCK
index b5799aa..1db7555 100644
--- a/gerrit-server/BUCK
+++ b/gerrit-server/BUCK
@@ -45,6 +45,7 @@
'//lib/guice:guice-assistedinject',
'//lib/guice:guice-servlet',
'//lib/jgit:jgit',
+ '//lib/joda:joda-time',
'//lib/log:api',
'//lib/prolog:prolog-cafe',
],
@@ -136,6 +137,7 @@
'//lib/guice:guice',
'//lib/jgit:jgit',
'//lib/jgit:junit',
+ '//lib/joda:joda-time',
'//lib/prolog:prolog-cafe',
],
source_under_test = [':server'],
diff --git a/gerrit-server/src/main/java/com/google/gerrit/audit/AuditEvent.java b/gerrit-server/src/main/java/com/google/gerrit/audit/AuditEvent.java
index 173ced6..cdb24e7 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/audit/AuditEvent.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/audit/AuditEvent.java
@@ -19,6 +19,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.util.TimeUtil;
public class AuditEvent {
@@ -94,7 +95,7 @@
this.params = Objects.firstNonNull(params, EMPTY_PARAMS);
this.uuid = new UUID();
this.result = result;
- this.elapsed = System.currentTimeMillis() - timeAtStart;
+ this.elapsed = TimeUtil.nowMs() - timeAtStart;
}
@Override
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
index 984b55f..96a7b7e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHookRunner.java
@@ -608,7 +608,7 @@
@Override
public void postEvent(final Branch.NameKey branchName,
- final ChangeEvent event) throws OrmException {
+ final ChangeEvent event) {
fireEvent(branchName, event);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHooks.java b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHooks.java
index 97c0bdf..3399272 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHooks.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/ChangeHooks.java
@@ -188,8 +188,6 @@
*
* @param branchName The branch that the event is related to
* @param event The event to post
- * @throws OrmException
*/
- public void postEvent(Branch.NameKey branchName, ChangeEvent event)
- throws OrmException;
+ public void postEvent(Branch.NameKey branchName, ChangeEvent event);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologCompiler.java b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologCompiler.java
index f9aac59..a0196fd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/rules/PrologCompiler.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/rules/PrologCompiler.java
@@ -18,6 +18,7 @@
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
@@ -222,7 +223,7 @@
/** Takes compiled prolog .class files, puts them into the jar file. */
private void createJar(File archiveFile, List<String> toBeJared,
File tempDir, ObjectId metaConfig, ObjectId rulesId) throws IOException {
- long now = System.currentTimeMillis();
+ long now = TimeUtil.nowMs();
File tmpjar = File.createTempFile(".rulec_", ".jar", archiveFile.getParentFile());
try {
Manifest mf = new Manifest();
@@ -315,4 +316,4 @@
}
dir.delete();
}
-}
\ No newline at end of file
+}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java
index da2f98f..deb6f30 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java
@@ -27,6 +27,7 @@
import com.google.gerrit.reviewdb.client.PatchSetInfo;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.change.PatchSetInserter.ChangeKind;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -136,7 +137,7 @@
for (Account.Id account : need) {
PatchSetApproval psa = new PatchSetApproval(
new PatchSetApproval.Key(ps.getId(), account, labelId),
- (short) 0);
+ (short) 0, TimeUtil.nowTs());
psa.cache(change);
cells.add(psa);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
index 560bee3..24a4b16 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
@@ -15,8 +15,12 @@
package com.google.gerrit.server;
import static com.google.gerrit.server.change.PatchSetInserter.ValidatePolicy.RECEIVE_COMMITS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.MINUTES;
+import static java.util.concurrent.TimeUnit.SECONDS;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.primitives.Ints;
import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.common.errors.EmailException;
import com.google.gerrit.reviewdb.client.Change;
@@ -46,6 +50,7 @@
import com.google.gerrit.server.project.RefControl;
import com.google.gerrit.server.util.IdGenerator;
import com.google.gerrit.server.util.MagicBranch;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmConcurrencyException;
import com.google.gwtorm.server.OrmException;
@@ -80,8 +85,14 @@
import java.util.regex.Matcher;
public class ChangeUtil {
+ /**
+ * Epoch for sort key calculations, Tue Sep 30 2008 17:00:00.
+ * <p>
+ * We overrun approximately 4,083 years later, so ~6092.
+ */
@VisibleForTesting
- public static final long SORT_KEY_EPOCH = 1222819200L; // Oct 1 2008 00:00
+ public static final long SORT_KEY_EPOCH_MINS =
+ MINUTES.convert(1222819200L, SECONDS);
private static final Object uuidLock = new Object();
private static final int SEED = 0x2418e6f9;
@@ -134,7 +145,7 @@
}
public static void updated(final Change c) {
- c.resetLastUpdatedOn();
+ c.setLastUpdatedOn(TimeUtil.nowTs());
computeSortKey(c);
}
@@ -262,7 +273,8 @@
new Change.Key("I" + computedChangeId.name()),
new Change.Id(db.nextChangeId()),
user.getAccountId(),
- changeToRevert.getDest());
+ changeToRevert.getDest(),
+ TimeUtil.nowTs());
change.setTopic(changeToRevert.getTopic());
ChangeInserter ins =
changeInserterFactory.create(refControl, change, revertCommit);
@@ -293,9 +305,9 @@
change.getDest().getParentKey().get(), ru.getResult()));
}
- final ChangeMessage cmsg =
- new ChangeMessage(new ChangeMessage.Key(changeId,
- ChangeUtil.messageUUID(db)), user.getAccountId(), patchSetId);
+ final ChangeMessage cmsg = new ChangeMessage(
+ new ChangeMessage.Key(changeId, ChangeUtil.messageUUID(db)),
+ user.getAccountId(), TimeUtil.nowTs(), patchSetId);
final StringBuilder msgBuf =
new StringBuilder("Patch Set " + patchSetId.get() + ": Reverted");
msgBuf.append("\n\n");
@@ -465,14 +477,12 @@
db.patchSets().delete(Collections.singleton(patch));
}
- public static String sortKey(long lastUpdated, int id){
- // The encoding uses minutes since Wed Oct 1 00:00:00 2008 UTC.
- // We overrun approximately 4,085 years later, so ~6093.
- //
- final long lastUpdatedOn = (lastUpdated / 1000L) - SORT_KEY_EPOCH;
- final StringBuilder r = new StringBuilder(16);
+ public static String sortKey(long lastUpdatedMs, int id){
+ long lastUpdatedMins = MINUTES.convert(lastUpdatedMs, MILLISECONDS);
+ long minsSinceEpoch = lastUpdatedMins - SORT_KEY_EPOCH_MINS;
+ StringBuilder r = new StringBuilder(16);
r.setLength(16);
- formatHexInt(r, 0, (int) (lastUpdatedOn / 60));
+ formatHexInt(r, 0, Ints.checkedCast(minsSinceEpoch));
formatHexInt(r, 8, id);
return r.toString();
}
@@ -484,10 +494,10 @@
return Long.parseLong(sortKey, 16);
}
- public static void computeSortKey(final Change c) {
- long lastUpdated = c.getLastUpdatedOn().getTime();
+ public static void computeSortKey(Change c) {
+ long lastUpdatedMs = c.getLastUpdatedOn().getTime();
int id = c.getId().get();
- c.setSortKey(sortKey(lastUpdated, id));
+ c.setSortKey(sortKey(lastUpdatedMs, id));
}
public static PatchSet.Id nextPatchSetId(Map<String, Ref> allRefs,
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountCacheImpl.java
index b74daa5..0e10080 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountCacheImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountCacheImpl.java
@@ -24,6 +24,7 @@
import com.google.gerrit.reviewdb.client.AccountGroupMember;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.cache.CacheModule;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
@@ -115,7 +116,7 @@
}
private static AccountState missing(Account.Id accountId) {
- Account account = new Account(accountId);
+ Account account = new Account(accountId, TimeUtil.nowTs());
Collection<AccountExternalId> ids = Collections.emptySet();
Set<AccountGroup.UUID> anon = ImmutableSet.of(AccountGroup.ANONYMOUS_USERS);
return new AccountState(account, anon, ids);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountInfo.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountInfo.java
index cde59e1..7498002 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountInfo.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountInfo.java
@@ -38,6 +38,7 @@
Collections.unmodifiableSet(EnumSet.of(
FillOptions.NAME,
FillOptions.EMAIL,
+ FillOptions.USERNAME,
FillOptions.AVATARS));
public interface Factory {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountManager.java
index a34a86c..f068812 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountManager.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/AccountManager.java
@@ -29,6 +29,7 @@
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.AuthConfig;
import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
@@ -258,7 +259,7 @@
}
final Account.Id newId = new Account.Id(db.nextAccountId());
- final Account account = new Account(newId);
+ final Account account = new Account(newId, TimeUtil.nowTs());
final AccountExternalId extId = createId(newId, who);
extId.setEmailAddress(who.getEmailAddress());
@@ -293,8 +294,8 @@
final AccountGroup.Id adminId = g.getId();
final AccountGroupMember m =
new AccountGroupMember(new AccountGroupMember.Key(newId, adminId));
- db.accountGroupMembersAudit().insert(
- Collections.singleton(new AccountGroupMemberAudit(m, newId)));
+ db.accountGroupMembersAudit().insert(Collections.singleton(
+ new AccountGroupMemberAudit(m, newId, TimeUtil.nowTs())));
db.accountGroupMembers().insert(Collections.singleton(m));
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
index 4b61cec..340746e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/CreateAccount.java
@@ -37,6 +37,7 @@
import com.google.gerrit.server.account.CreateAccount.Input;
import com.google.gerrit.server.group.GroupsCollection;
import com.google.gerrit.server.ssh.SshKeyCache;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmDuplicateKeyException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -149,7 +150,7 @@
}
}
- Account a = new Account(id);
+ Account a = new Account(id, TimeUtil.nowTs());
a.setFullName(input.name);
a.setPreferredEmail(input.email);
db.accounts().insert(Collections.singleton(a));
@@ -162,7 +163,8 @@
AccountGroupMember m =
new AccountGroupMember(new AccountGroupMember.Key(id, groupId));
db.accountGroupMembersAudit().insert(Collections.singleton(
- new AccountGroupMemberAudit(m, currentUser.getAccountId())));
+ new AccountGroupMemberAudit(
+ m, currentUser.getAccountId(), TimeUtil.nowTs())));
db.accountGroupMembers().insert(Collections.singleton(m));
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/PerformCreateGroup.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/PerformCreateGroup.java
index 9dc0d5a..92e9b86 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/PerformCreateGroup.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/PerformCreateGroup.java
@@ -26,6 +26,7 @@
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.GerritPersonIdent;
import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmDuplicateKeyException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -147,8 +148,8 @@
new AccountGroupMember(new AccountGroupMember.Key(accountId, groupId));
memberships.add(membership);
- final AccountGroupMemberAudit audit =
- new AccountGroupMemberAudit(membership, currentUser.getAccountId());
+ final AccountGroupMemberAudit audit = new AccountGroupMemberAudit(
+ membership, currentUser.getAccountId(), TimeUtil.nowTs());
membershipsAudit.add(audit);
}
db.accountGroupMembers().insert(memberships);
@@ -170,8 +171,8 @@
new AccountGroupById(new AccountGroupById.Key(groupId, includeUUID));
includeList.add(groupInclude);
- final AccountGroupByIdAud audit =
- new AccountGroupByIdAud(groupInclude, currentUser.getAccountId());
+ final AccountGroupByIdAud audit = new AccountGroupByIdAud(
+ groupInclude, currentUser.getAccountId(), TimeUtil.nowTs());
includesAudit.add(audit);
}
db.accountGroupById().insert(includeList);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
index e129432..f206a3d 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java
@@ -35,6 +35,7 @@
import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.project.RefControl;
import com.google.gerrit.server.ssh.NoSshInfo;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -211,7 +212,7 @@
Change change =
new Change(changeKey, new Change.Id(db.nextChangeId()),
currentUser.getAccountId(), new Branch.NameKey(project,
- destRef.getName()));
+ destRef.getName()), TimeUtil.nowTs());
ChangeInserter ins =
changeInserterFactory.create(refControl, change, cherryPickCommit);
PatchSet newPatchSet = ins.getPatchSet();
@@ -247,10 +248,10 @@
private ChangeMessage buildChangeMessage(PatchSet.Id patchSetId, Change dest)
throws OrmException {
- ChangeMessage cmsg =
- new ChangeMessage(new ChangeMessage.Key(patchSetId.getParentKey(),
- ChangeUtil.messageUUID(db)), currentUser.getAccountId(),
- patchSetId);
+ ChangeMessage cmsg = new ChangeMessage(
+ new ChangeMessage.Key(
+ patchSetId.getParentKey(), ChangeUtil.messageUUID(db)),
+ currentUser.getAccountId(), TimeUtil.nowTs(), patchSetId);
StringBuilder msgBuf =
new StringBuilder("Patch Set " + patchSetId.get()
+ ": Cherry Picked");
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentInfo.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentInfo.java
index fe372f3..f4c148a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentInfo.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CommentInfo.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.change;
+// limitations under the License.
package com.google.gerrit.server.change;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraft.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraft.java
index 1b7bbe7..229e072 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraft.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraft.java
@@ -27,6 +27,7 @@
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.change.PutDraft.Input;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -62,7 +63,7 @@
new PatchLineComment.Key(
new Patch.Key(rsrc.getPatchSet().getId(), in.path),
ChangeUtil.messageUUID(db.get())),
- line, rsrc.getAccountId(), Url.decode(in.inReplyTo));
+ line, rsrc.getAccountId(), Url.decode(in.inReplyTo), TimeUtil.nowTs());
c.setSide(in.side == Side.PARENT ? (short) 0 : (short) 1);
c.setMessage(in.message.trim());
c.setRange(in.range);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Index.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Index.java
index 294ff1a..6ecc544 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Index.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Index.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.change;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
index c64db76..e4f4f1f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java
@@ -18,7 +18,6 @@
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Sets;
-
import com.google.common.util.concurrent.CheckedFuture;
import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.reviewdb.client.Account;
@@ -46,6 +45,7 @@
import com.google.gerrit.server.project.RefControl;
import com.google.gerrit.server.ssh.NoSshInfo;
import com.google.gerrit.server.ssh.SshInfo;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.AtomicUpdate;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -63,7 +63,6 @@
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -169,8 +168,9 @@
}
public PatchSetInserter setMessage(String message) throws OrmException {
- changeMessage = new ChangeMessage(new ChangeMessage.Key(change.getId(),
- ChangeUtil.messageUUID(db)), user.getAccountId(), patchSet.getId());
+ changeMessage = new ChangeMessage(
+ new ChangeMessage.Key(change.getId(), ChangeUtil.messageUUID(db)),
+ user.getAccountId(), TimeUtil.nowTs(), patchSet.getId());
changeMessage.setMessage(message);
return this;
}
@@ -332,7 +332,7 @@
if (patchSet == null) {
patchSet = new PatchSet(
ChangeUtil.nextPatchSetId(git, change.currentPatchSetId()));
- patchSet.setCreatedOn(new Timestamp(System.currentTimeMillis()));
+ patchSet.setCreatedOn(TimeUtil.nowTs());
patchSet.setUploader(change.getOwner());
patchSet.setRevision(new RevId(commit.name()));
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
index 3b1f1fb..367087c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java
@@ -47,6 +47,7 @@
import com.google.gerrit.server.change.PostReview.Input;
import com.google.gerrit.server.index.ChangeIndexer;
import com.google.gerrit.server.project.ChangeControl;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -361,7 +362,7 @@
ChangeUtil.messageUUID(db.get())),
c.line,
rsrc.getAccountId(),
- parent);
+ parent, TimeUtil.nowTs());
} else if (parent != null) {
e.setParentUuid(parent);
}
@@ -452,7 +453,7 @@
rsrc.getPatchSet().getId(),
rsrc.getAccountId(),
lt.getLabelId()),
- ent.getValue());
+ ent.getValue(), TimeUtil.nowTs());
c.setGranted(timestamp);
c.cache(change);
ins.add(c);
@@ -481,7 +482,7 @@
rsrc.getAccountId(),
rsrc.getControl().getLabelTypes().getLabelTypes().get(0)
.getLabelId()),
- (short) 0);
+ (short) 0, TimeUtil.nowTs());
c.setGranted(timestamp);
c.cache(change);
ins.add(c);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java
index b066ab7..13deeb0 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java
@@ -53,6 +53,7 @@
import com.google.gerrit.server.mail.AddReviewerSender;
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.NoSuchProjectException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -314,7 +315,8 @@
LabelId id =
Iterables.getLast(ctl.getLabelTypes().getLabelTypes()).getLabelId();
PatchSetApproval dummyApproval = new PatchSetApproval(
- new PatchSetApproval.Key(patchSetId, reviewerId, id), (short) 0);
+ new PatchSetApproval.Key(patchSetId, reviewerId, id), (short) 0,
+ TimeUtil.nowTs());
dummyApproval.cache(ctl.getChange());
return dummyApproval;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraft.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraft.java
index 005d493..803af17 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraft.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraft.java
@@ -26,6 +26,7 @@
import com.google.gerrit.reviewdb.client.CommentRange;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.change.PutDraft.Input;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -84,7 +85,7 @@
c.getKey().get()),
c.getLine(),
rsrc.getAuthorId(),
- c.getParentUuid());
+ c.getParentUuid(), TimeUtil.nowTs());
db.get().patchComments().insert(Collections.singleton(update(c, in)));
} else {
db.get().patchComments().update(Collections.singleton(update(c, in)));
@@ -104,7 +105,7 @@
e.setRange(in.range);
e.setLine(in.range != null ? in.range.getEndLine() : in.line);
}
- e.updated();
+ e.updated(TimeUtil.nowTs());
return e;
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java
index f8255b8..acf96e6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutTopic.java
@@ -32,6 +32,7 @@
import com.google.gerrit.server.change.PutTopic.Input;
import com.google.gerrit.server.index.ChangeIndexer;
import com.google.gerrit.server.project.ChangeControl;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.AtomicUpdate;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -91,7 +92,7 @@
IdentifiedUser currentUser = ((IdentifiedUser) control.getCurrentUser());
ChangeMessage cmsg = new ChangeMessage(
new ChangeMessage.Key(change.getId(), ChangeUtil.messageUUID(db)),
- currentUser.getAccountId(),
+ currentUser.getAccountId(), TimeUtil.nowTs(),
change.currentPatchSetId());
StringBuilder msgBuf = new StringBuilder(summary);
if (!Strings.isNullOrEmpty(input.message)) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
index f446bc5..a507096 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Submit.java
@@ -39,6 +39,7 @@
import com.google.gerrit.server.git.MergeQueue;
import com.google.gerrit.server.index.ChangeIndexer;
import com.google.gerrit.server.project.ChangeControl;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.AtomicUpdate;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -178,7 +179,7 @@
public Change submit(RevisionResource rsrc, IdentifiedUser caller)
throws OrmException, IOException {
- final Timestamp timestamp = new Timestamp(System.currentTimeMillis());
+ final Timestamp timestamp = TimeUtil.nowTs();
Change change = rsrc.getChange();
ReviewDb db = dbProvider.get();
db.changes().beginTransaction(change.getId());
@@ -226,7 +227,7 @@
rev.getId(),
caller.getAccountId(),
LabelId.SUBMIT),
- (short) 1);
+ (short) 1, TimeUtil.nowTs());
}
submit.setValue((short) 1);
submit.setGranted(timestamp);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
index dceecbe..b766cea 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java
@@ -35,6 +35,7 @@
import com.google.gerrit.server.project.ChangeControl;
import com.google.gerrit.server.project.InvalidChangeOperationException;
import com.google.gerrit.server.project.NoSuchChangeException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -302,9 +303,9 @@
.setRunHooks(runHooks);
final PatchSet.Id newPatchSetId = patchSetInserter.getPatchSetId();
- final ChangeMessage cmsg =
- new ChangeMessage(new ChangeMessage.Key(change.getId(),
- ChangeUtil.messageUUID(db)), uploader.getAccountId(), patchSetId);
+ final ChangeMessage cmsg = new ChangeMessage(
+ new ChangeMessage.Key(change.getId(), ChangeUtil.messageUUID(db)),
+ uploader.getAccountId(), TimeUtil.nowTs(), patchSetId);
cmsg.setMessage("Patch Set " + newPatchSetId.get()
+ ": Patch Set " + patchSetId.get() + " was rebased");
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/AuthModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/AuthModule.java
index f9e9949..ca4a9d2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/config/AuthModule.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/AuthModule.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.config;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/contact/EncryptedContactStore.java b/gerrit-server/src/main/java/com/google/gerrit/server/contact/EncryptedContactStore.java
index bd1c0d7..17c9060 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/contact/EncryptedContactStore.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/contact/EncryptedContactStore.java
@@ -20,6 +20,7 @@
import com.google.gerrit.reviewdb.client.ContactInformation;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.UrlEncoded;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.ProvisionException;
@@ -213,7 +214,7 @@
throws ContactInformationStoreException {
Timestamp on = account.getContactFiledOn();
if (on == null) {
- on = new Timestamp(System.currentTimeMillis());
+ on = TimeUtil.nowTs();
}
final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/GitReferenceUpdated.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/GitReferenceUpdated.java
index 04fccc2..9e48e81 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/GitReferenceUpdated.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/GitReferenceUpdated.java
@@ -14,7 +14,6 @@
package com.google.gerrit.server.extensions.events;
-import com.google.common.collect.ImmutableList;
import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Project;
@@ -26,7 +25,6 @@
import org.slf4j.LoggerFactory;
import java.util.Collections;
-import java.util.List;
public class GitReferenceUpdated {
private static final Logger log = LoggerFactory
@@ -85,25 +83,18 @@
}
@Override
- public List<GitReferenceUpdatedListener.Update> getUpdates() {
- GitReferenceUpdatedListener.Update update =
- new GitReferenceUpdatedListener.Update() {
- @Override
- public String getRefName() {
- return ref;
- }
+ public String getRefName() {
+ return ref;
+ }
- @Override
- public String getOldObjectId() {
- return oldObjectId;
- }
+ @Override
+ public String getOldObjectId() {
+ return oldObjectId;
+ }
- @Override
- public String getNewObjectId() {
- return newObjectId;
- }
- };
- return ImmutableList.of(update);
+ @Override
+ public String getNewObjectId() {
+ return newObjectId;
}
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeCache.java
index 3262b23..32dc303 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeCache.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeCache.java
@@ -72,11 +72,8 @@
@Override
public void onGitReferenceUpdated(GitReferenceUpdatedListener.Event event) {
- for (GitReferenceUpdatedListener.Update u : event.getUpdates()) {
- if (u.getRefName().startsWith("refs/changes/")) {
- cache.invalidate(new Project.NameKey(event.getProjectName()));
- break;
- }
+ if (event.getRefName().startsWith("refs/changes/")) {
+ cache.invalidate(new Project.NameKey(event.getProjectName()));
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeMergeQueue.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeMergeQueue.java
index 12219e2..a6b0a12 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeMergeQueue.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeMergeQueue.java
@@ -27,6 +27,7 @@
import com.google.gerrit.server.ssh.SshInfo;
import com.google.gerrit.server.util.RequestContext;
import com.google.gerrit.server.util.RequestScopePropagator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Injector;
@@ -155,7 +156,7 @@
@Override
public synchronized void recheckAfter(final Branch.NameKey branch,
final long delay, final TimeUnit delayUnit) {
- final long now = System.currentTimeMillis();
+ final long now = TimeUtil.nowMs();
final long at = now + MILLISECONDS.convert(delay, delayUnit);
RecheckJob e = recheck.get(branch);
if (e == null) {
@@ -216,7 +217,7 @@
}
private synchronized void recheck(final RecheckJob e) {
- final long remainingDelay = e.recheckAt - System.currentTimeMillis();
+ final long remainingDelay = e.recheckAt - TimeUtil.nowMs();
if (MILLISECONDS.convert(10, SECONDS) < remainingDelay) {
// Woke up too early, the job deadline was pushed back.
// Reschedule for the new deadline. We allow for a small
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/CherryPick.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/CherryPick.java
index f4ed7cd..ce7a708 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/CherryPick.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/CherryPick.java
@@ -24,6 +24,7 @@
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.patch.PatchSetInfoFactory;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import org.eclipse.jgit.lib.ObjectId;
@@ -32,7 +33,6 @@
import org.eclipse.jgit.revwalk.RevCommit;
import java.io.IOException;
-import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -159,7 +159,7 @@
PatchSet.Id id =
ChangeUtil.nextPatchSetId(args.repo, n.change.currentPatchSetId());
final PatchSet ps = new PatchSet(id);
- ps.setCreatedOn(new Timestamp(System.currentTimeMillis()));
+ ps.setCreatedOn(TimeUtil.nowTs());
ps.setUploader(submitAudit.getAccountId());
ps.setRevision(new RevId(newCommit.getId().getName()));
insertAncestors(args.db, ps.getId(), newCommit);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
index f20de2d..aa334f3 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java
@@ -15,10 +15,12 @@
package com.google.gerrit.server.git;
import static com.google.gerrit.server.git.MergeUtil.getSubmitter;
+
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
+
import static org.eclipse.jgit.lib.RefDatabase.ALL;
import com.google.common.base.Objects;
@@ -59,6 +61,7 @@
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.util.RequestScopePropagator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.AtomicUpdate;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.SchemaFactory;
@@ -705,7 +708,7 @@
final Capable capable;
final Change c = commit.change;
final boolean submitStillPossible = isSubmitForMissingCommitsStillPossible(commit);
- final long now = System.currentTimeMillis();
+ final long now = TimeUtil.nowMs();
final long waitUntil = c.getLastUpdatedOn().getTime() + DEPENDENCY_DELAY;
if (submitStillPossible && now < waitUntil) {
// If we waited a short while we might still be able to get
@@ -791,9 +794,8 @@
} catch (OrmException e) {
return null;
}
- final ChangeMessage m =
- new ChangeMessage(new ChangeMessage.Key(c.getId(), uuid), null,
- c.currentPatchSetId());
+ ChangeMessage m = new ChangeMessage(new ChangeMessage.Key(c.getId(), uuid),
+ null, TimeUtil.nowTs(), c.currentPatchSetId());
m.setMessage(body);
return m;
}
@@ -956,7 +958,7 @@
@Nullable PatchSetApproval submitter,
ChangeMessage msg) {
if (submitter != null
- && System.currentTimeMillis() - submitter.getGranted().getTime()
+ && TimeUtil.nowMs() - submitter.getGranted().getTime()
> MAX_SUBMIT_WINDOW) {
return RetryStatus.UNSUBMIT;
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index 594b4e4..06e88e4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -17,6 +17,7 @@
import static com.google.gerrit.server.git.MultiProgressMonitor.UNKNOWN;
import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromApprovals;
import static com.google.gerrit.server.mail.MailUtil.getRecipientsFromFooters;
+
import static org.eclipse.jgit.lib.Constants.R_HEADS;
import static org.eclipse.jgit.lib.RefDatabase.ALL;
import static org.eclipse.jgit.transport.ReceiveCommand.Result.NOT_ATTEMPTED;
@@ -94,6 +95,7 @@
import com.google.gerrit.server.ssh.SshInfo;
import com.google.gerrit.server.util.MagicBranch;
import com.google.gerrit.server.util.RequestScopePropagator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.util.cli.CmdLineParser;
import com.google.gwtorm.server.AtomicUpdate;
import com.google.gwtorm.server.OrmException;
@@ -124,9 +126,9 @@
import org.eclipse.jgit.transport.AdvertiseRefsHookChain;
import org.eclipse.jgit.transport.BaseReceivePack;
import org.eclipse.jgit.transport.ReceiveCommand;
-import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.ReceiveCommand.Result;
import org.eclipse.jgit.transport.ReceivePack;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
import org.eclipse.jgit.transport.UploadPack;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.Option;
@@ -135,7 +137,6 @@
import java.io.IOException;
import java.io.StringWriter;
-import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -1427,7 +1428,8 @@
change = new Change(changeKey,
new Change.Id(db.nextChangeId()),
currentUser.getAccountId(),
- magicBranch.dest);
+ magicBranch.dest,
+ TimeUtil.nowTs());
change.setTopic(magicBranch.topic);
ins = changeInserterFactory.create(ctl, change, c)
.setDraft(magicBranch.isDraft());
@@ -1740,7 +1742,7 @@
PatchSet.Id id =
ChangeUtil.nextPatchSetId(allRefs, change.currentPatchSetId());
newPatchSet = new PatchSet(id);
- newPatchSet.setCreatedOn(new Timestamp(System.currentTimeMillis()));
+ newPatchSet.setCreatedOn(TimeUtil.nowTs());
newPatchSet.setUploader(currentUser.getAccountId());
newPatchSet.setRevision(toRevId(newCommit));
if (magicBranch != null && magicBranch.isDraft()) {
@@ -2235,9 +2237,9 @@
}
}
msgBuf.append(".");
- final ChangeMessage msg =
- new ChangeMessage(new ChangeMessage.Key(change.getId(), ChangeUtil
- .messageUUID(db)), currentUser.getAccountId(), result.info.getKey());
+ final ChangeMessage msg = new ChangeMessage(
+ new ChangeMessage.Key(change.getId(), ChangeUtil.messageUUID(db)),
+ currentUser.getAccountId(), TimeUtil.nowTs(), result.info.getKey());
msg.setMessage(msgBuf.toString());
db.changeMessages().insert(Collections.singleton(msg));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/group/AddIncludedGroups.java b/gerrit-server/src/main/java/com/google/gerrit/server/group/AddIncludedGroups.java
index 9d0dbf8..195ea1c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/group/AddIncludedGroups.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/group/AddIncludedGroups.java
@@ -35,6 +35,7 @@
import com.google.gerrit.server.account.GroupIncludeCache;
import com.google.gerrit.server.group.AddIncludedGroups.Input;
import com.google.gerrit.server.group.GroupJson.GroupInfo;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -115,7 +116,8 @@
if (agi == null) {
agi = new AccountGroupById(agiKey);
newIncludedGroups.put(d.getGroupUUID(), agi);
- newIncludedGroupsAudits.add(new AccountGroupByIdAud(agi, me));
+ newIncludedGroupsAudits.add(
+ new AccountGroupByIdAud(agi, me, TimeUtil.nowTs()));
}
}
result.add(json.format(d));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/group/AddMembers.java b/gerrit-server/src/main/java/com/google/gerrit/server/group/AddMembers.java
index b3002da..5ebf504 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/group/AddMembers.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/group/AddMembers.java
@@ -39,6 +39,7 @@
import com.google.gerrit.server.account.GroupControl;
import com.google.gerrit.server.config.AuthConfig;
import com.google.gerrit.server.group.AddMembers.Input;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -132,7 +133,8 @@
if (m == null) {
m = new AccountGroupMember(key);
newAccountGroupMembers.put(m.getAccountId(), m);
- newAccountGroupMemberAudits.add(new AccountGroupMemberAudit(m, me));
+ newAccountGroupMemberAudits.add(
+ new AccountGroupMemberAudit(m, me, TimeUtil.nowTs()));
}
}
result.add(loader.get(a.getId()));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteIncludedGroups.java b/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteIncludedGroups.java
index 6c98c8f..c5d95b0 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteIncludedGroups.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteIncludedGroups.java
@@ -34,6 +34,7 @@
import com.google.gerrit.server.account.GroupControl;
import com.google.gerrit.server.account.GroupIncludeCache;
import com.google.gerrit.server.group.AddIncludedGroups.Input;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -122,7 +123,7 @@
}
if (audit != null) {
- audit.removed(me);
+ audit.removed(me, TimeUtil.nowTs());
auditUpdates.add(audit);
}
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteMembers.java b/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteMembers.java
index 07276ca..186d4b6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteMembers.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/group/DeleteMembers.java
@@ -33,6 +33,7 @@
import com.google.gerrit.server.account.AccountsCollection;
import com.google.gerrit.server.account.GroupControl;
import com.google.gerrit.server.group.AddMembers.Input;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -107,10 +108,10 @@
}
if (audit != null) {
- audit.removed(me);
+ audit.removed(me, TimeUtil.nowTs());
auditUpdates.add(audit);
} else {
- audit = new AccountGroupMemberAudit(m, me);
+ audit = new AccountGroupMemberAudit(m, me, TimeUtil.nowTs());
audit.removedLegacy();
auditInserts.add(audit);
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
index 63befe8..7865d5e 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeSchemas.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeSchemas.java
index ef2fb46..0654e80 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeSchemas.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeSchemas.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java
index 51a6578..0c90e32 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/IndexCollection.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
index e1262cd..bda2ace 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java
index 9f9a3a2..89fc6b9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/SmtpEmailSender.java
@@ -18,6 +18,7 @@
import com.google.gerrit.common.errors.EmailException;
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -151,7 +152,7 @@
setMissingHeader(hdrs, "Importance", importance);
}
if(expiryDays > 0) {
- Date expiry = new Date(System.currentTimeMillis() +
+ Date expiry = new Date(TimeUtil.nowMs() +
expiryDays * 24 * 60 * 60 * 1000L );
setMissingHeader(hdrs, "Expiry-Date",
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z").format(expiry));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginCleanerTask.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginCleanerTask.java
index 7081d70..606d5da 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginCleanerTask.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginCleanerTask.java
@@ -15,6 +15,7 @@
package com.google.gerrit.server.plugins;
import com.google.gerrit.server.git.WorkQueue;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -52,7 +53,7 @@
self = null;
if (0 < left) {
- long waiting = System.currentTimeMillis() - start;
+ long waiting = TimeUtil.nowMs() - start;
PluginLoader.log.warn(String.format(
"%d plugins still waiting to be reclaimed after %d minutes",
pending,
@@ -76,7 +77,7 @@
synchronized void clean(int expect) {
if (self == null && pending == 0) {
- start = System.currentTimeMillis();
+ start = TimeUtil.nowMs();
}
pending = expect;
ensureScheduled();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java
index 5f457c3..9a867d4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/AgePredicate.java
@@ -22,6 +22,7 @@
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.index.ChangeField;
import com.google.gerrit.server.index.TimestampRangePredicate;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Provider;
@@ -37,7 +38,7 @@
long s = ConfigUtil.getTimeUnit(getValue(), 0, SECONDS);
long ms = MILLISECONDS.convert(s, SECONDS);
- this.cut = System.currentTimeMillis() - ms;
+ this.cut = TimeUtil.nowMs() - ms;
}
public Timestamp getMinTimestamp() {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
index bdce7f4..5624f45 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/QueryProcessor.java
@@ -31,6 +31,7 @@
import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.query.Predicate;
import com.google.gerrit.server.query.QueryParseException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gson.Gson;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.ResultSet;
@@ -292,7 +293,7 @@
try {
final QueryStatsAttribute stats = new QueryStatsAttribute();
- stats.runTimeMilliseconds = System.currentTimeMillis();
+ stats.runTimeMilliseconds = TimeUtil.nowMs();
List<ChangeData> results = queryChanges(queryString);
ChangeAttribute c = null;
@@ -362,7 +363,7 @@
stats.resumeSortKey = c.sortKey;
}
stats.runTimeMilliseconds =
- System.currentTimeMillis() - stats.runTimeMilliseconds;
+ TimeUtil.nowMs() - stats.runTimeMilliseconds;
show(stats);
} catch (OrmException err) {
log.error("Cannot execute query: " + queryString, err);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_65.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_65.java
index 1cdf25c..624a51b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_65.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_65.java
@@ -39,6 +39,7 @@
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.git.VersionedMetaData.BatchMetaDataUpdate;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.jdbc.JdbcSchema;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -348,7 +349,7 @@
" reviewed_on, review_comments " +
"FROM account_agreements WHERE status = 'V'");
try {
- long minTime = System.currentTimeMillis();
+ long minTime = TimeUtil.nowMs();
while (rs.next()) {
Account.Id accountId = new Account.Id(rs.getInt(1));
Account.Id reviewerId = new Account.Id(rs.getInt(4));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/util/TimeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/util/TimeUtil.java
new file mode 100644
index 0000000..4c4b96e
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/util/TimeUtil.java
@@ -0,0 +1,33 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.util;
+
+import org.joda.time.DateTimeUtils;
+
+import java.sql.Timestamp;
+
+/** Static utility methods for dealing with dates and times. */
+public class TimeUtil {
+ public static long nowMs() {
+ return DateTimeUtils.currentTimeMillis();
+ }
+
+ public static Timestamp nowTs() {
+ return new Timestamp(nowMs());
+ }
+
+ private TimeUtil() {
+ }
+}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java b/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
index 4cd05ea..0d0ab1a 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/rules/GerritCommonTest.java
@@ -22,6 +22,7 @@
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.project.Util;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.common.data.LabelType;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Branch;
@@ -79,7 +80,8 @@
Change change =
new Change(new Change.Key("Ibeef"), new Change.Id(1),
new Account.Id(2),
- new Branch.NameKey(localKey, "refs/heads/master"));
+ new Branch.NameKey(localKey, "refs/heads/master"),
+ TimeUtil.nowTs());
env.set(StoredValues.CHANGE, change);
env.set(StoredValues.CHANGE_CONTROL, util.user(local).controlFor(change));
}
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
index 4d86596a..df39003 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
@@ -14,6 +14,7 @@
package com.google.gerrit.rules;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.inject.Guice;
import com.google.inject.Module;
@@ -116,7 +117,7 @@
public void runPrologBasedTests() {
int errors = 0;
- long start = System.currentTimeMillis();
+ long start = TimeUtil.nowMs();
for (Term test : tests) {
PrologEnvironment env = envFactory.create(machine);
@@ -159,7 +160,7 @@
}
}
- long end = System.currentTimeMillis();
+ long end = TimeUtil.nowMs();
System.out.println("-------------------------------");
System.out.format("Prolog tests: %d, Failures: %d, Time elapsed %.3f sec",
tests.size(), errors, (end - start) / 1000.0);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java
index f1d986d..18b3c98 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/change/CommentsTest.java
@@ -30,14 +30,15 @@
import com.google.gerrit.extensions.restapi.RestView;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.CommentRange;
import com.google.gerrit.reviewdb.client.Patch;
import com.google.gerrit.reviewdb.client.PatchLineComment;
import com.google.gerrit.reviewdb.client.PatchLineComment.Status;
import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.client.CommentRange;
import com.google.gerrit.reviewdb.server.PatchLineCommentAccess;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.account.AccountInfo;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.ListResultSet;
import com.google.gwtorm.server.ResultSet;
import com.google.inject.AbstractModule;
@@ -109,7 +110,7 @@
PatchSet ps2 = new PatchSet(psId2);
expect(revRes2.getPatchSet()).andReturn(ps2);
- long timeBase = System.currentTimeMillis();
+ long timeBase = TimeUtil.nowMs();
plc1 = newPatchLineComment(psId1, "Comment1", null,
"FileOne.txt", Side.REVISION, 1, account1, timeBase,
"First Comment", new CommentRange(1, 2, 3, 4));
@@ -216,7 +217,7 @@
Patch.Key p = new Patch.Key(psId, filename);
PatchLineComment.Key id = new PatchLineComment.Key(p, uuid);
PatchLineComment plc =
- new PatchLineComment(id, line, authorId, inReplyToUuid);
+ new PatchLineComment(id, line, authorId, inReplyToUuid, TimeUtil.nowTs());
plc.setMessage(message);
plc.setRange(range);
plc.setSide(side == Side.PARENT ? (short) 0 : (short) 1);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/git/SubmoduleOpTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/git/SubmoduleOpTest.java
index 322ffe2..e9a4cf3 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/git/SubmoduleOpTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/git/SubmoduleOpTest.java
@@ -30,6 +30,7 @@
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.reviewdb.server.SubmoduleSubscriptionAccess;
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.client.KeyUtil;
import com.google.gwtorm.server.ListResultSet;
import com.google.gwtorm.server.ResultSet;
@@ -608,9 +609,9 @@
final CodeReviewCommit codeReviewCommit =
new CodeReviewCommit(sourceMergeTip.toObjectId());
- final Change submittedChange =
- new Change(new Change.Key(sourceMergeTip.toObjectId().getName()),
- new Change.Id(1), new Account.Id(1), sourceBranchNameKey);
+ final Change submittedChange = new Change(
+ new Change.Key(sourceMergeTip.toObjectId().getName()), new Change.Id(1),
+ new Account.Id(1), sourceBranchNameKey, TimeUtil.nowTs());
codeReviewCommit.change = submittedChange;
final Map<Change.Id, CodeReviewCommit> mergedCommits =
@@ -712,9 +713,9 @@
final CodeReviewCommit codeReviewCommit =
new CodeReviewCommit(sourceMergeTip.toObjectId());
- final Change submittedChange =
- new Change(new Change.Key(sourceMergeTip.toObjectId().getName()),
- new Change.Id(1), new Account.Id(1), sourceBranchNameKey);
+ final Change submittedChange = new Change(
+ new Change.Key(sourceMergeTip.toObjectId().getName()), new Change.Id(1),
+ new Account.Id(1), sourceBranchNameKey, TimeUtil.nowTs());
codeReviewCommit.change = submittedChange;
final Map<Change.Id, CodeReviewCommit> mergedCommits =
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeIndex.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeIndex.java
index c92c9a6..d8a0f65 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeIndex.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeIndex.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeQueryBuilder.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeQueryBuilder.java
index f9ef2dd..63e62a0 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeQueryBuilder.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/FakeQueryBuilder.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexedChangeQueryTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexedChangeQueryTest.java
index ba1f53d..81518f5 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexedChangeQueryTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/index/IndexedChangeQueryTest.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.index;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/mail/FromAddressGeneratorProviderTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/mail/FromAddressGeneratorProviderTest.java
index 2db2b67..721059c 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/mail/FromAddressGeneratorProviderTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/mail/FromAddressGeneratorProviderTest.java
@@ -25,6 +25,7 @@
import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
+import com.google.gerrit.server.util.TimeUtil;
import junit.framework.TestCase;
@@ -276,7 +277,7 @@
private AccountState makeUser(final String name, final String email) {
final Account.Id userId = new Account.Id(42);
- final Account account = new Account(userId);
+ final Account account = new Account(userId, TimeUtil.nowTs());
account.setFullName(name);
account.setPreferredEmail(email);
final AccountState s =
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractIndexQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractIndexQueryChangesTest.java
index 22f51cc..5dacd49 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractIndexQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractIndexQueryChangesTest.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.query.change;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
index f504760..87fdb18 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/AbstractQueryChangesTest.java
@@ -10,10 +10,13 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.query.change;
+import static java.util.concurrent.TimeUnit.DAYS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.MINUTES;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -45,6 +48,7 @@
import com.google.gerrit.server.schema.SchemaCreator;
import com.google.gerrit.server.util.RequestContext;
import com.google.gerrit.server.util.ThreadLocalRequestContext;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.testutil.InMemoryDatabase;
import com.google.gerrit.testutil.InMemoryRepositoryManager;
import com.google.inject.Inject;
@@ -55,13 +59,15 @@
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.revwalk.RevCommit;
+import org.joda.time.DateTimeUtils;
+import org.joda.time.DateTimeUtils.MillisProvider;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
-import java.sql.Timestamp;
import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
@Ignore
public abstract class AbstractQueryChangesTest {
@@ -84,8 +90,7 @@
protected ReviewDb db;
protected Account.Id userId;
protected CurrentUser user;
- protected int clockStepMs = 1;
- private long ts = ChangeUtil.SORT_KEY_EPOCH * 1000;
+ protected volatile long clockStepMs;
protected abstract Injector createInjector();
@@ -118,12 +123,36 @@
@After
public void tearDownInjector() {
- lifecycle.stop();
+ if (lifecycle != null) {
+ lifecycle.stop();
+ }
requestContext.setContext(null);
- db.close();
+ if (db != null) {
+ db.close();
+ }
InMemoryDatabase.drop(schemaFactory);
}
+ @Before
+ public void setMillisProvider() {
+ clockStepMs = 1;
+ final AtomicLong clockMs = new AtomicLong(
+ MILLISECONDS.convert(ChangeUtil.SORT_KEY_EPOCH_MINS, MINUTES)
+ + MILLISECONDS.convert(60, DAYS));
+
+ DateTimeUtils.setCurrentMillisProvider(new MillisProvider() {
+ @Override
+ public long getMillis() {
+ return clockMs.getAndAdd(clockStepMs);
+ }
+ });
+ }
+
+ @After
+ public void resetMillisProvider() {
+ DateTimeUtils.setCurrentMillisSystem();
+ }
+
@Test
public void byId() throws Exception {
TestRepository<InMemoryRepository> repo = createProject("repo");
@@ -411,9 +440,7 @@
}
Change change = new Change(new Change.Key(key), id, ownerId,
- new Branch.NameKey(project, branch));
- change.setLastUpdatedOn(new Timestamp(ts));
- ts += clockStepMs;
+ new Branch.NameKey(project, branch), TimeUtil.nowTs());
return changeFactory.create(
projectControlFactory.controlFor(project,
userFactory.create(ownerId)).controlFor(change).getRefControl(),
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java
index 3756632..ab12986 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/LuceneQueryChangesTest.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.query.change;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java
index 37210ab..f235efc 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/query/change/SqlQueryChangesTest.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.server.query.change;
diff --git a/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java b/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java
index c4d5b93..9714124 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.testutil;
@@ -19,7 +19,6 @@
import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.common.DisabledChangeHooks;
-import com.google.gerrit.lucene.LuceneIndexModule;
import com.google.gerrit.reviewdb.client.AuthType;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.GerritPersonIdent;
@@ -55,6 +54,7 @@
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.Module;
import com.google.inject.Provider;
import com.google.inject.Provides;
import com.google.inject.ProvisionException;
@@ -66,6 +66,8 @@
import org.eclipse.jgit.lib.PersonIdent;
import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
@@ -121,9 +123,7 @@
bind(SocketAddress.class).annotatedWith(RemotePeer.class)
.toInstance(new InetSocketAddress(InetAddress.getLocalHost(), 1234));
} catch (UnknownHostException e) {
- ProvisionException pe = new ProvisionException(e.getMessage());
- pe.initCause(e);
- throw pe;
+ throw newProvisionException(e);
}
bind(PersonIdent.class)
.annotatedWith(GerritPersonIdent.class)
@@ -165,10 +165,7 @@
if (indexType != null) {
switch (indexType) {
case LUCENE:
- int version = cfg.getInt("index", "lucene", "testVersion", -1);
- checkState(ChangeSchemas.ALL.containsKey(version),
- "invalid index.lucene.testVersion %s", version);
- install(new LuceneIndexModule(version, 0, null));
+ install(luceneIndexModule());
break;
case SQL:
install(new NoIndexModule());
@@ -186,4 +183,37 @@
SchemaCreator schemaCreator) throws OrmException {
return new InMemoryDatabase(schemaVersion, schemaCreator);
}
+
+ private Module luceneIndexModule() {
+ try {
+ int version = cfg.getInt("index", "lucene", "testVersion", -1);
+ checkState(ChangeSchemas.ALL.containsKey(version),
+ "invalid index.lucene.testVersion %s", version);
+ Class<?> clazz =
+ Class.forName("com.google.gerrit.lucene.LuceneIndexModule");
+ Constructor<?> c =
+ clazz.getConstructor(Integer.class, int.class, String.class);
+ return (Module) c.newInstance(Integer.valueOf(version), 0, (String) null);
+ } catch (ClassNotFoundException e) {
+ throw newProvisionException(e);
+ } catch (SecurityException e) {
+ throw newProvisionException(e);
+ } catch (NoSuchMethodException e) {
+ throw newProvisionException(e);
+ } catch (IllegalArgumentException e) {
+ throw newProvisionException(e);
+ } catch (InstantiationException e) {
+ throw newProvisionException(e);
+ } catch (IllegalAccessException e) {
+ throw newProvisionException(e);
+ } catch (InvocationTargetException e) {
+ throw newProvisionException(e);
+ }
+ }
+
+ private static ProvisionException newProvisionException(Throwable cause) {
+ ProvisionException pe = new ProvisionException(cause.getMessage());
+ pe.initCause(cause);
+ return pe;
+ }
}
diff --git a/gerrit-solr/src/main/java/com/google/gerrit/solr/IndexVersionCheck.java b/gerrit-solr/src/main/java/com/google/gerrit/solr/IndexVersionCheck.java
index 7e32bac..ddb86c3 100644
--- a/gerrit-solr/src/main/java/com/google/gerrit/solr/IndexVersionCheck.java
+++ b/gerrit-solr/src/main/java/com/google/gerrit/solr/IndexVersionCheck.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.solr;
diff --git a/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrChangeIndex.java b/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrChangeIndex.java
index 00fcc59..4f616b9 100644
--- a/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrChangeIndex.java
+++ b/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrChangeIndex.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.solr;
diff --git a/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrIndexModule.java b/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrIndexModule.java
index 8c614f7..e73c6c1 100644
--- a/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrIndexModule.java
+++ b/gerrit-solr/src/main/java/com/google/gerrit/solr/SolrIndexModule.java
@@ -10,7 +10,7 @@
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
-// limitations under the License.package com.google.gerrit.server.git;
+// limitations under the License.
package com.google.gerrit.solr;
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java
index 8673b28..c8b24f7 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/BaseCommand.java
@@ -27,6 +27,7 @@
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.project.NoSuchProjectException;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.sshd.SshScope.Context;
import com.google.gerrit.util.cli.CmdLineParser;
import com.google.gerrit.util.cli.EndOfOptionsHandler;
@@ -429,7 +430,7 @@
int rc = 0;
final Context old = sshScope.set(context);
try {
- context.started = System.currentTimeMillis();
+ context.started = TimeUtil.nowMs();
thisThread.setName("SSH " + taskName);
if (thunk instanceof ProjectCommandRunnable) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java
index 8c17407..b3b6815 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshLog.java
@@ -25,6 +25,7 @@
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.util.IdGenerator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.sshd.SshScope.Context;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -109,7 +110,7 @@
final LoggingEvent event = new LoggingEvent( //
Logger.class.getName(), // fqnOfCategoryClass
log, // logger
- System.currentTimeMillis(), // when
+ TimeUtil.nowMs(), // when
Level.INFO, // level
"AUTH FAILURE FROM " + sd.getRemoteAddressAsString(), // message text
"SSHD", // thread name
@@ -133,7 +134,7 @@
void onExecute(DispatchCommand dcmd, int exitValue) {
final Context ctx = context.get();
- ctx.finished = System.currentTimeMillis();
+ ctx.finished = TimeUtil.nowMs();
String cmd = extractWhat(dcmd);
@@ -219,7 +220,7 @@
final LoggingEvent event = new LoggingEvent( //
Logger.class.getName(), // fqnOfCategoryClass
log, // logger
- System.currentTimeMillis(), // when
+ TimeUtil.nowMs(), // when
Level.INFO, // level
msg, // message text
"SSHD", // thread name
@@ -473,7 +474,7 @@
}
private long extractCreated(final Context ctx) {
- return (ctx != null) ? ctx.created : System.currentTimeMillis();
+ return (ctx != null) ? ctx.created : TimeUtil.nowMs();
}
private CurrentUser extractCurrentUser(final Context ctx) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshScope.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshScope.java
index 9b19e02..440f236 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshScope.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/SshScope.java
@@ -23,6 +23,7 @@
import com.google.gerrit.server.util.RequestContext;
import com.google.gerrit.server.util.ThreadLocalRequestContext;
import com.google.gerrit.server.util.ThreadLocalRequestScopePropagator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
import com.google.inject.Key;
@@ -165,7 +166,7 @@
}
Context newContext(SchemaFactory<ReviewDb> sf, SshSession s, String cmd) {
- return new Context(sf, s, cmd, System.currentTimeMillis());
+ return new Context(sf, s, cmd, TimeUtil.nowMs());
}
private Context newContinuingContext(Context ctx) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
index 3f0bc4c..5649843 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/QueryShell.java
@@ -16,6 +16,7 @@
import com.google.gerrit.common.Version;
import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gwtorm.jdbc.JdbcSchema;
@@ -354,7 +355,7 @@
}
private void executeStatement(final String sql) {
- final long start = System.currentTimeMillis();
+ final long start = TimeUtil.nowMs();
final boolean hasResultSet;
try {
hasResultSet = statement.execute(sql);
@@ -374,7 +375,7 @@
} else {
final int updateCount = statement.getUpdateCount();
- final long ms = System.currentTimeMillis() - start;
+ final long ms = TimeUtil.nowMs() - start;
switch (outputFormat) {
case JSON_SINGLE:
case JSON: {
@@ -490,7 +491,7 @@
tail = new JsonObject();
tail.addProperty("type", "query-stats");
tail.addProperty("rowCount", rowCnt);
- final long ms = System.currentTimeMillis() - start;
+ final long ms = TimeUtil.nowMs() - start;
tail.addProperty("runTimeMilliseconds", ms);
}
@@ -629,7 +630,7 @@
if (start != 0) {
final int rowCount = rows.size();
- final long ms = System.currentTimeMillis() - start;
+ final long ms = TimeUtil.nowMs() - start;
println("(" + rowCount + (rowCount == 1 ? " row" : " rows")
+ "; " + ms + " ms)");
}
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
index b02d9c8..89ba6ba 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowCaches.java
@@ -26,6 +26,7 @@
import com.google.gerrit.server.config.SitePath;
import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.git.WorkQueue.Task;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshDaemon;
import com.google.inject.Inject;
@@ -59,7 +60,7 @@
static class StartupListener implements LifecycleListener {
@Override
public void start() {
- serverStarted = System.currentTimeMillis();
+ serverStarted = TimeUtil.nowMs();
}
@Override
@@ -270,7 +271,7 @@
return;
}
- long now = System.currentTimeMillis();
+ long now = TimeUtil.nowMs();
Collection<IoSession> list = acceptor.getManagedSessions().values();
long oldest = now;
for (IoSession s : list) {
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
index c0e5d6e..f8531ed 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowConnections.java
@@ -19,6 +19,7 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.util.IdGenerator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
import com.google.gerrit.sshd.SshDaemon;
@@ -94,7 +95,7 @@
hostNameWidth = wide ? Integer.MAX_VALUE : columns - 9 - 9 - 10 - 32;
- final long now = System.currentTimeMillis();
+ final long now = TimeUtil.nowMs();
stdout.print(String.format("%-8s %8s %8s %-15s %s\n", //
"Session", "Start", "Idle", "User", "Remote Host"));
stdout.print("--------------------------------------------------------------\n");
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
index 2f1d0bf..7759c94 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/ShowQueue.java
@@ -22,6 +22,7 @@
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.util.IdGenerator;
+import com.google.gerrit.server.util.TimeUtil;
import com.google.gerrit.sshd.AdminHighPriorityCommand;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
@@ -102,7 +103,7 @@
+ "--------------------------------\n");
int numberOfPendingTasks = 0;
- final long now = System.currentTimeMillis();
+ final long now = TimeUtil.nowMs();
final boolean viewAll = currentUser.getCapabilities().canViewQueue();
for (final Task<?> task : pending) {
@@ -186,7 +187,7 @@
}
private static String startTime(final Date when) {
- return format(when, System.currentTimeMillis() - when.getTime());
+ return format(when, TimeUtil.nowMs() - when.getTime());
}
private static String format(final Date when, final long timeFromNow) {
diff --git a/lib/asciidoctor/java/DocIndexer.java b/lib/asciidoctor/java/DocIndexer.java
index ce6d9fe..497cba5 100644
--- a/lib/asciidoctor/java/DocIndexer.java
+++ b/lib/asciidoctor/java/DocIndexer.java
@@ -89,7 +89,7 @@
BufferedReader titleReader = new BufferedReader(
new InputStreamReader(new FileInputStream(file), "UTF-8"));
String title = titleReader.readLine();
- if (title.startsWith("[[")) {
+ if (title != null && title.startsWith("[[")) {
// Generally the first line of the txt is the title. In a few cases the
// first line is a "[[tag]]" and the second line is the title.
title = titleReader.readLine();
diff --git a/lib/gwt/BUCK b/lib/gwt/BUCK
index c28c048..0ccb22b 100644
--- a/lib/gwt/BUCK
+++ b/lib/gwt/BUCK
@@ -39,10 +39,9 @@
maven_jar(
name = 'gwt-test-utils',
- id = 'com.googlecode.gwt-test-utils:gwt-test-utils:0.46-SNAPSHOT-20130930.170040-1',
- sha1 = 'e8f5bd1b8c75be333da36f41613436a8eb175dad',
+ id = 'com.googlecode.gwt-test-utils:gwt-test-utils:0.45',
+ sha1 = 'ed16fa85defc685802e11cc61f8bc70454412fdb',
license = 'Apache2.0',
- repository = 'http://oss.sonatype.org/content/repositories/snapshots',
deps = [
':javassist',
'//lib/log:api',
diff --git a/lib/joda/BUCK b/lib/joda/BUCK
new file mode 100644
index 0000000..d45ce78
--- /dev/null
+++ b/lib/joda/BUCK
@@ -0,0 +1,25 @@
+include_defs('//lib/maven.defs')
+
+EXCLUDE = [
+ 'META-INF/LICENSE.txt',
+ 'META-INF/NOTICE.txt',
+]
+
+maven_jar(
+ name = 'joda-time',
+ id = 'joda-time:joda-time:2.3',
+ sha1 = '56498efd17752898cfcc3868c1b6211a07b12b8f',
+ deps = [':joda-convert'],
+ license = 'Apache2.0',
+ exclude = EXCLUDE,
+ visibility = ['PUBLIC'],
+)
+
+maven_jar(
+ name = 'joda-convert',
+ id = 'org.joda:joda-convert:1.2',
+ bin_sha1 = '35ec554f0cd00c956cc69051514d9488b1374dec',
+ license = 'Apache2.0',
+ exclude = EXCLUDE,
+ visibility = ['//lib/joda:joda-time'],
+)
diff --git a/plugins/replication b/plugins/replication
index 87d7a64..68ab447 160000
--- a/plugins/replication
+++ b/plugins/replication
@@ -1 +1 @@
-Subproject commit 87d7a646419badac537f83ca8b8c1858e06d9b25
+Subproject commit 68ab44794695bf5f7faec3bcae27bce42052a68b
diff --git a/plugins/reviewnotes b/plugins/reviewnotes
index 7392674..9905f7a 160000
--- a/plugins/reviewnotes
+++ b/plugins/reviewnotes
@@ -1 +1 @@
-Subproject commit 73926747285a04ea28ca1933e24762f60cfc3986
+Subproject commit 9905f7af6c4e258365413a03f092898b167ea25a