Merge branch 'stable-3.6' into stable-3.7

* stable-3.6:
  Set version to 3.6.9-SNAPSHOT
  Set version to 3.6.8
  Update jgit to 82e277c81339
  Fire `ref-updated` stream events on online edit refs update
  Fix documentation attributes bug
  Introduce Documentation:searchfree_safe with local-only fonts

Release-Notes: skip
Change-Id: I3f65ae41849ff6f0fae09199eea3122cfd02155a
diff --git a/Documentation/BUILD b/Documentation/BUILD
index af355ca..85ddbe7 100644
--- a/Documentation/BUILD
+++ b/Documentation/BUILD
@@ -126,3 +126,13 @@
     directory = DOC_DIR,
     searchbox = False,
 )
+
+genasciidoc_zip(
+    name = "searchfree_safe",
+    srcs = SRCS,
+    attributes = documentation_attributes(),
+    backend = "html5",
+    directory = DOC_DIR,
+    searchbox = False,
+    webfonts = False,
+)
diff --git a/Documentation/dev-bazel.txt b/Documentation/dev-bazel.txt
index 08529df..a2bd6fc 100644
--- a/Documentation/dev-bazel.txt
+++ b/Documentation/dev-bazel.txt
@@ -225,6 +225,19 @@
   bazel-bin/Documentation/searchfree.zip
 ----
 
+To use local fonts with the searchfree target:
+
+----
+  bazel build Documentation:searchfree_safe
+----
+
+The html files will be bundled into `searchfree.zip` or `searchfree_safe.zip` in this location:
+
+----
+  bazel-bin/Documentation/searchfree.zip
+  bazel-bin/Documentation/searchfree_safe.zip
+----
+
 To generate HTML files skipping the zip archiving:
 
 ----
diff --git a/java/com/google/gerrit/server/edit/ChangeEditModifier.java b/java/com/google/gerrit/server/edit/ChangeEditModifier.java
index 9c3210d..765dd59 100644
--- a/java/com/google/gerrit/server/edit/ChangeEditModifier.java
+++ b/java/com/google/gerrit/server/edit/ChangeEditModifier.java
@@ -33,12 +33,14 @@
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.PatchSetUtil;
+import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.edit.tree.ChangeFileContentModification;
 import com.google.gerrit.server.edit.tree.DeleteFileModification;
 import com.google.gerrit.server.edit.tree.RenameFileModification;
 import com.google.gerrit.server.edit.tree.RestoreFileModification;
 import com.google.gerrit.server.edit.tree.TreeCreator;
 import com.google.gerrit.server.edit.tree.TreeModification;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.index.change.ChangeIndexer;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.permissions.ChangePermission;
@@ -107,7 +109,8 @@
       PermissionBackend permissionBackend,
       ChangeEditUtil changeEditUtil,
       PatchSetUtil patchSetUtil,
-      ProjectCache projectCache) {
+      ProjectCache projectCache,
+      GitReferenceUpdated gitRefUpdated) {
     this.currentUser = currentUser;
     this.permissionBackend = permissionBackend;
     this.zoneId = gerritIdent.getZoneId();
@@ -115,7 +118,7 @@
     this.patchSetUtil = patchSetUtil;
     this.projectCache = projectCache;
 
-    noteDbEdits = new NoteDbEdits(zoneId, indexer, currentUser);
+    noteDbEdits = new NoteDbEdits(zoneId, indexer, currentUser, gitRefUpdated);
   }
 
   /**
@@ -712,11 +715,17 @@
     private final ZoneId zoneId;
     private final ChangeIndexer indexer;
     private final Provider<CurrentUser> currentUser;
+    private final GitReferenceUpdated gitRefUpdated;
 
-    NoteDbEdits(ZoneId zoneId, ChangeIndexer indexer, Provider<CurrentUser> currentUser) {
+    NoteDbEdits(
+        ZoneId zoneId,
+        ChangeIndexer indexer,
+        Provider<CurrentUser> currentUser,
+        GitReferenceUpdated gitRefUpdated) {
       this.zoneId = zoneId;
       this.indexer = indexer;
       this.currentUser = currentUser;
+      this.gitRefUpdated = gitRefUpdated;
     }
 
     ChangeEdit createEdit(
@@ -772,6 +781,7 @@
         ObjectId targetObjectId,
         Instant timestamp)
         throws IOException {
+      AccountState userAccountState = currentUser.get().asIdentifiedUser().state();
       RefUpdate ru = repository.updateRef(refName);
       ru.setExpectedOldObjectId(currentObjectId);
       ru.setNewObjectId(targetObjectId);
@@ -787,6 +797,7 @@
         if (res != RefUpdate.Result.NEW && res != RefUpdate.Result.FORCED) {
           throw new IOException(message);
         }
+        gitRefUpdated.fire(projectName, ru, userAccountState);
       }
     }
 
diff --git a/java/com/google/gerrit/server/edit/ChangeEditUtil.java b/java/com/google/gerrit/server/edit/ChangeEditUtil.java
index 8aba9f7..96a84f6 100644
--- a/java/com/google/gerrit/server/edit/ChangeEditUtil.java
+++ b/java/com/google/gerrit/server/edit/ChangeEditUtil.java
@@ -29,9 +29,11 @@
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.PatchSetUtil;
+import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.change.ChangeKindCache;
 import com.google.gerrit.server.change.NotifyResolver;
 import com.google.gerrit.server.change.PatchSetInserter;
+import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.index.change.ChangeIndexer;
 import com.google.gerrit.server.notedb.ChangeNotes;
@@ -69,6 +71,7 @@
   private final Provider<CurrentUser> userProvider;
   private final ChangeKindCache changeKindCache;
   private final PatchSetUtil psUtil;
+  private final GitReferenceUpdated gitRefUpdated;
 
   @Inject
   ChangeEditUtil(
@@ -77,13 +80,15 @@
       ChangeIndexer indexer,
       Provider<CurrentUser> userProvider,
       ChangeKindCache changeKindCache,
-      PatchSetUtil psUtil) {
+      PatchSetUtil psUtil,
+      GitReferenceUpdated gitRefUpdated) {
     this.gitManager = gitManager;
     this.patchSetInserterFactory = patchSetInserterFactory;
     this.indexer = indexer;
     this.userProvider = userProvider;
     this.changeKindCache = changeKindCache;
     this.psUtil = psUtil;
+    this.gitRefUpdated = gitRefUpdated;
   }
 
   /**
@@ -237,7 +242,8 @@
     return writeSquashedCommit(rw, inserter, parent, edit);
   }
 
-  private static void deleteRef(Repository repo, ChangeEdit edit) throws IOException {
+  private void deleteRef(Repository repo, ChangeEdit edit) throws IOException {
+    AccountState userAccountState = userProvider.get().asIdentifiedUser().state();
     String refName = edit.getRefName();
     RefUpdate ru = repo.updateRef(refName, true);
     ru.setExpectedOldObjectId(edit.getEditCommit());
@@ -246,6 +252,8 @@
     switch (result) {
       case FORCED:
       case NEW:
+        gitRefUpdated.fire(edit.getChange().getProject(), ru, userAccountState);
+        break;
       case NO_CHANGE:
         break;
       case LOCK_FAILURE:
diff --git a/tools/bzl/asciidoc.bzl b/tools/bzl/asciidoc.bzl
index 7977cf0..703d5b7 100644
--- a/tools/bzl/asciidoc.bzl
+++ b/tools/bzl/asciidoc.bzl
@@ -300,13 +300,14 @@
         backend = None,
         searchbox = True,
         resources = True,
+        webfonts = True,
         **kwargs):
     SUFFIX = "_htmlonly"
 
     _genasciidoc_htmlonly_zip(
         name = name + SUFFIX if resources else name,
         srcs = srcs,
-        attributes = attributes,
+        attributes = attributes + ([] if webfonts else ["webfonts!"]),
         backend = backend,
         searchbox = searchbox,
         **kwargs