Browse Source

Merge branch 'gitblit:master' into master

pull/1357/head
牧码山人 2 years ago
parent
commit
34bd0db700
No account linked to committer's email address

+ 4
- 0
src/main/distrib/win/add-indexed-branch.cmd View File

@@ -14,7 +14,11 @@
@REM Set BRANCH ("default" or fully qualified ref - i.e. refs/heads/master)
@REM Set EXCLUSIONS for any repositories that you do not want to change
@REM --------------------------------------------------------------------------
@SETLOCAL
@SET FOLDER=data/git
@SET EXCLUSIONS=--skip test.git --skip group/test*
@SET BRANCH=default
@PUSHD %~dp0
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.AddIndexedBranch --repositoriesFolder %FOLDER% --branch %BRANCH% %EXCLUSIONS% %*
@POPD
@ENDLOCAL

+ 8
- 1
src/main/distrib/win/authority.cmd View File

@@ -1 +1,8 @@
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.authority.GitblitAuthority --baseFolder data %*
@SETLOCAL
@SET gbhome=%~dp0
@SET gbhome=%gbhome:~0,-1%
@java -cp "%gbhome%\gitblit.jar";"%gbhome%\ext\*" com.gitblit.authority.GitblitAuthority --baseFolder "%gbhome%\data" %*
@ENDLOCAL

+ 1
- 1
src/main/distrib/win/gitblit-stop.cmd View File

@@ -1 +1 @@
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.GitBlitServer --stop --baseFolder data %*
@java -cp "%~dp0gitblit.jar";"%~dp0ext\*" com.gitblit.GitBlitServer --stop %*

+ 8
- 1
src/main/distrib/win/gitblit.cmd View File

@@ -1 +1,8 @@
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.GitBlitServer --baseFolder data %*
@SETLOCAL
@SET gbhome=%~dp0
@SET gbhome=%gbhome:~0,-1%
@java -cp "%gbhome%\gitblit.jar";"%gbhome%\ext\*" com.gitblit.GitBlitServer --baseFolder "%gbhome%\data" %*
@ENDLOCAL

+ 14
- 8
src/main/distrib/win/installService.cmd View File

@@ -8,31 +8,37 @@
@REM
@REM http://commons.apache.org/daemon/procrun.html
@SETLOCAL
@REM arch = x86, amd64, or ia32
SET ARCH=amd64
@SET gbhome=%~dp0
@SET gbhome=%gbhome:~0,-1%
@REM Be careful not to introduce trailing whitespace after the ^ characters.
@REM Use ; or # to separate values in the --StartParams parameter.
"%CD%\%ARCH%\gitblit.exe" //IS//gitblit ^
"%gbhome%\%ARCH%\gitblit.exe" //IS//gitblit ^
--DisplayName="gitblit" ^
--Description="a pure Java Git solution" ^
--Startup=auto ^
--LogPath="%CD%\logs" ^
--LogPath="%gbhome%\logs" ^
--LogLevel=INFO ^
--LogPrefix=gitblit ^
--StdOutput=auto ^
--StdError=auto ^
--StartPath="%CD%" ^
--StartPath="%gbhome%" ^
--StartClass=com.gitblit.GitBlitServer ^
--StartMethod=main ^
--StartParams="--storePassword;gitblit;--baseFolder;%CD%\data" ^
--StartParams="--storePassword;gitblit;--baseFolder;%gbhome%\data" ^
--StartMode=jvm ^
--StopPath="%CD%" ^
--StopPath="%gbhome%" ^
--StopClass=com.gitblit.GitBlitServer ^
--StopMethod=main ^
--StopParams="--stop;--baseFolder;%CD%\data" ^
--StopParams="--stop;--baseFolder;%gbhome%\data" ^
--StopMode=jvm ^
--Classpath="%CD%\gitblit.jar;%CD%\ext\*" ^
--Classpath="%gbhome%\gitblit.jar;%gbhome%\ext\*" ^
--Jvm=auto ^
--JvmMx=1024
@ENDLOCAL

+ 6
- 6
src/main/distrib/win/migrate-tickets.cmd View File

@@ -9,13 +9,13 @@
@if [%2]==[] goto help
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.MigrateTickets %1 --baseFolder %2
@java -cp "%~dp0gitblit.jar";"%~dp0ext\*" com.gitblit.MigrateTickets %1 --baseFolder %2
@goto end
:help
@echo "Please specify the output ticket service and your baseFolder!"
@echo
@echo " migrate-tickets com.gitblit.tickets.RedisTicketService c:/gitblit-data"
@echo
@echo Please specify the output ticket service and your baseFolder!
@echo.
@echo e.g.: migrate-tickets com.gitblit.tickets.RedisTicketService "c:/gitblit data"
@echo.
:end
:end

+ 6
- 6
src/main/distrib/win/reindex-tickets.cmd View File

@@ -10,13 +10,13 @@
@REM --------------------------------------------------------------------------
@if [%1]==[] goto nobasefolder
@java -cp gitblit.jar;"%CD%\ext\*" com.gitblit.ReindexTickets --baseFolder %1
@java -cp "%~dp0gitblit.jar";"%~dp0ext\*" com.gitblit.ReindexTickets --baseFolder %1
@goto end
:nobasefolder
@echo "Please specify your baseFolder!"
@echo
@echo " reindex-tickets c:/gitblit-data"
@echo
@echo Please specify your baseFolder!
@echo.
@echo reindex-tickets c:/gitblit-data
@echo.
:end
:end

+ 5
- 1
src/main/distrib/win/uninstallService.cmd View File

@@ -1,5 +1,9 @@
@SETLOCAL
@REM arch = x86, amd64, or ia32
SET ARCH=amd64
@REM Delete the gitblit service
"%CD%\%ARCH%\gitblit.exe" //DS//gitblit
"%~dp0%ARCH%\gitblit.exe" //DS//gitblit
@ENDLOCAL

+ 1
- 1
src/main/java/com/gitblit/ConfigUserService.java View File

@@ -676,7 +676,7 @@ public class ConfigUserService implements IUserService {
// Write a temporary copy of the users file
File realmFileCopy = new File(realmFile.getAbsolutePath() + ".tmp");
StoredConfig config = new FileBasedConfig(realmFileCopy, FS.detect());
StoredUserConfig config = new StoredUserConfig(realmFileCopy);
// write users
for (UserModel model : users.values()) {

+ 187
- 0
src/main/java/com/gitblit/StoredUserConfig.java View File

@@ -0,0 +1,187 @@
/*
* Copyright 2021 gitblit.com, Ingo Lafrenz
*
* 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.gitblit;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.SortedMap;
import java.util.TreeMap;

/**
* Simple class with the only purpose to save the realm file (users.conf) in
* a fast efficient manner. The JGit Config classes used previously caused
* a massive CPU hog if the users file got bigger than about 30000 lines.
*
* @author Ingo Lafrenz
*
*/
public class StoredUserConfig {

private final File realmFileCopy;
private SortedMap<String, Section> sections = new TreeMap<>();

public StoredUserConfig(File realmFileCopy) {
this.realmFileCopy = realmFileCopy;
}

public void setString(final String section, final String subsection, String name, String value) {
String key = generateKey(section, subsection);
Section s = sections.get(key);
if (s == null) {
s = new Section(section, subsection);
sections.put(key, s);
}
s.addEntry(name, value);
}

public void setBoolean(String section, String subsection, String name, boolean value) {
setString(section, subsection, name, String.valueOf(value));
}

public void setStringList(String section, String subsection, String name, List<String> list) {
for (String value : list) {
setString(section, subsection, name, value);
}
}

public void save() throws IOException {
try (FileWriter fileWriter = new FileWriter(realmFileCopy);
PrintWriter printWriter = new PrintWriter(fileWriter);) {
for (Map.Entry<String,Section> entry : sections.entrySet()) {
writeSection(printWriter, entry.getKey(), entry.getValue());
}
}
}

private static void writeSection(PrintWriter printWriter, String key, Section section) {
printWriter.printf("[%s \"%s\"]\n", section.getName(), section.getSubSection());
for (Entry entry : section.getEntries().values()) {
writeEntry(printWriter, entry.getKey(), entry.getValue());
}
}

private static void writeEntry(PrintWriter printWriter, String key, String value) {
printWriter.printf("\t%s = %s\n", key, escape(value));
}

private static String escape(String value) {
String fixedValue = '#' == value.charAt(0) ? "\"" + value + "\"" : value;
fixedValue = fixedValue.replace("\\", "\\\\");
return fixedValue;
}

private static String generateKey(String key, String subKey) {
return "k:" + key + "s:" + subKey;
}

private static class Section {
private final String name;
private final String subSection;
private final SortedMap<String, Entry> entries = new TreeMap<>();

public Section(String name, String subSection) {
this.name = name;
this.subSection = subSection;
}

public void addEntry(final String key, final String value) {
entries.put(generateKey(key, value), new Entry(key, value));
}

public String getName() {
return name;
}

public String getSubSection() {
return subSection;
}

public SortedMap<String, Entry> getEntries() {
return entries;
}

@Override
public int hashCode() {
return Objects.hash(name, subSection);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Section other = (Section) obj;
return Objects.equals(name, other.name) && Objects.equals(subSection, other.subSection);
}

@Override
public String toString() {
return String.format("Section [name=%s, subSection=%s]", name, subSection);
}

}

private static class Entry {
private final String key;
private final String value;

public Entry(String key, String value) {
this.key = key;
this.value = value;
}

public String getKey() {
return key;
}

public String getValue() {
return value;
}

@Override
public int hashCode() {
return Objects.hash(key, value);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entry other = (Entry) obj;
return Objects.equals(key, other.key) && Objects.equals(value, other.value);
}

@Override
public String toString() {
return String.format("Entry [key=%s, value=%s]", key, value);
}

}

}

Loading…
Cancel
Save