From 5450d08e4cd11176bcc50a5b3d001d291bd8982c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 18 Jun 2011 08:28:47 -0400 Subject: [PATCH] Mostly stable war build. --- src/com/gitblit/ILoginService.java | 2 resources/folder_16x16.png | 0 src/com/gitblit/Build.java | 12 resources/commit_merge_16x16.png | 0 resources/arrow_up.png | 0 resources/file_vs_16x16.png | 0 resources/file_cpp_16x16.png | 0 docs/00_setup.mkd | 4 resources/gitblt-favicon.png | 0 src/com/gitblit/wicket/pages/RepositoryPage.java | 102 +++--- docs/01_faq.mkd | 19 resources/file_h_16x16.png | 0 src/com/gitblit/GitBlit.java | 59 ++- src/com/gitblit/wicket/GitBlitWebApp.properties | 4 src/com/gitblit/wicket/WicketUtils.java | 4 src/com/gitblit/GitBlitServer.java | 78 ---- resources/arrow_down.png | 0 resources/file_excel_16x16.png | 0 src/com/gitblit/wicket/pages/LoginPage.html | 10 resources/lock_pull_16x16.png | 0 resources/commit_divide_16x16.png | 0 src/com/gitblit/wicket/panels/UsersPanel.html | 8 src/com/gitblit/wicket/pages/RepositoryPage.html | 2 src/com/gitblit/wicket/panels/RepositoriesPanel.html | 14 resources/file_php_16x16.png | 0 resources/user_16x16.png | 0 src/com/gitblit/wicket/panels/SearchPanel.html | 4 resources/markdown.css | 0 src/com/gitblit/DownloadZipServlet.java | 2 src/com/gitblit/wicket/pages/MarkdownPage.html | 6 resources/cold_16x16.png | 0 resources/file_cs_16x16.png | 0 src/com/gitblit/wicket/pages/MarkdownPage.java | 3 resources/gitweb-favicon.png | 0 resources/file_code_16x16.png | 0 resources/commit_branch_16x16.png | 0 resources/file_doc_16x16.png | 0 resources/search-icon.png | 0 src/com/gitblit/wicket/pages/BasePage.java | 6 src/com/gitblit/wicket/panels/SearchPanel.java | 8 src/WEB-INF/web.xml | 125 ++++++++ resources/blank.png | 0 resources/commit_up_16x16.png | 0 src/com/gitblit/wicket/pages/BasePage.html | 14 resources/bullet_error.png | 0 resources/gitblit.css | 2 resources/shield_16x16.png | 0 src/com/gitblit/utils/StringUtils.java | 17 src/com/gitblit/wicket/pages/RepositoriesPage.java | 2 .gitignore | 2 resources/file_ruby_16x16.png | 0 resources/file_java_16x16.png | 0 resources/gitblt-logo.png | 0 resources/lock_go_16x16.png | 0 src/com/gitblit/IStoredSettings.java | 18 resources/file_16x16.png | 0 resources/pixel.png | 0 src/com/gitblit/AccessRestrictionFilter.java | 17 resources/gitblt_25.png | 0 src/com/gitblit/GitFilter.java | 4 resources/background.png | 0 src/log4j.properties | 66 ++++ src/com/gitblit/wicket/pages/RepositoriesPage.html | 4 src/com/gitblit/BuildWebXml.java | 80 +++++ resources/gitblt2.png | 0 src/com/gitblit/FileLoginService.java | 3 docs/00_index.mkd | 19 resources/file_settings_16x16.png | 0 src/com/gitblit/Constants.java | 8 src/com/gitblit/utils/JGitUtils.java | 27 - src/com/gitblit/wicket/pages/SummaryPage.html | 4 resources/file_zip_16x16.png | 0 resources/file_c_16x16.png | 0 resources/file_ppt_16x16.png | 0 resources/add_16x16.png | 0 resources/book_16x16.png | 0 resources/file_world_16x16.png | 0 distrib/gitblit.properties | 31 - src/com/gitblit/SyndicationServlet.java | 2 /dev/null | 0 resources/welcome.mkd | 0 src/com/gitblit/utils/SyndicationUtils.java | 2 resources/lock_16x16.png | 0 resources/commit_join_16x16.png | 0 resources/arrow_off.png | 0 resources/feed_16x16.png | 0 resources/bug_16x16.png | 0 build.xml | 100 +++++- src/com/gitblit/wicket/pages/DocsPage.java | 3 resources/file_acrobat_16x16.png | 0 src/com/gitblit/wicket/pages/SummaryPage.java | 2 resources/tag_16x16.png | 0 92 files changed, 578 insertions(+), 321 deletions(-) diff --git a/.gitignore b/.gitignore index 1819e8e..7cc5c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ /git /target /build.properties +/war +/*.war diff --git a/build.xml b/build.xml index ddb0dfb..ee01de7 100644 --- a/build.xml +++ b/build.xml @@ -5,17 +5,16 @@ <property name="project.jar" value="gitblit.jar" /> <property name="project.mainclass" value="com.gitblit.Launcher" /> <property name="project.build.dir" value="${basedir}/build" /> + <property name="project.resources.dir" value="${basedir}/resources" /> <loadproperties srcfile="${basedir}/build.properties" /> - - <!-- Build Gitblit --> - <target name="main" description="Compiles Gitblit from source to website"> - + + <target name="buildinfo"> <!-- build date --> <tstamp> <format property="gb.buildDate" pattern="yyyy-MM-dd" /> </tstamp> - + <!-- extract Gitblit version number from source code --> <loadfile property="gb.version" srcfile="${basedir}/src/com/gitblit/Constants.java"> <filterchain> @@ -30,7 +29,7 @@ </tokenfilter> </filterchain> </loadfile> - + <!-- extract JGit version number from source code --> <loadfile property="jgit.version" srcfile="${basedir}/src/com/gitblit/Constants.java"> <filterchain> @@ -46,6 +45,13 @@ </filterchain> </loadfile> <echo>Building Gitblit ${gb.version}</echo> + + <property name="distribution.zipfile" value="gitblit-${gb.version}.zip" /> + <property name="distribution.warfile" value="gitblit-${gb.version}.war" /> + </target> + + <!-- Build Gitblit GO --> + <target name="main" description="Compiles Gitblit from source to website" depends="buildinfo"> <!-- copy required distribution files to project folder --> <copy todir="${basedir}" overwrite="false"> @@ -62,8 +68,9 @@ <mkdir dir="${project.build.dir}" /> <javac srcdir="${basedir}/src" destdir="${project.build.dir}"> <include name="com/gitblit/Build.java" /> + <include name="com/gitblit/BuildWebXml.java" /> <include name="com/gitblit/Constants.java" /> - <include name="com/gitblit/utils/StringUtils.java" /> + <include name="com/gitblit/utils/StringUtils.java" /> </javac> <java classpath="${project.build.dir}" classname="com.gitblit.Build" /> @@ -87,6 +94,9 @@ <fileset dir="${project.build.dir}"> <include name="**/*" /> </fileset> + <fileset dir="${project.resources.dir}"> + <exclude name="thumbs.db" /> + </fileset> <manifest> <attribute name="Main-Class" value="${project.mainclass}" /> </manifest> @@ -97,7 +107,7 @@ <mkdir dir="${basedir}/site" /> <copy todir="${basedir}/site"> <!-- Copy selected Gitblit resources --> - <fileset dir="${basedir}/src/com/gitblit/wicket/resources"> + <fileset dir="${project.resources.dir}"> <include name="background.png" /> <include name="gitblit.css" /> <include name="markdown.css" /> @@ -211,7 +221,7 @@ <mkdir dir="${basedir}/deploy/docs" /> <copy todir="${basedir}/deploy/docs"> <!-- Copy selected Gitblit resources --> - <fileset dir="${basedir}/src/com/gitblit/wicket/resources"> + <fileset dir="${project.resources.dir}"> <include name="background.png" /> <include name="gitblit.css" /> <include name="markdown.css" /> @@ -284,8 +294,7 @@ </java> - <!-- Create Zip deployment --> - <property name="distribution.zipfile" value="gitblit-${gb.version}.zip" /> + <!-- Create Zip deployment --> <zip destfile="${distribution.zipfile}"> <fileset dir="${basedir}/deploy"> <include name="**/*" /> @@ -306,6 +315,67 @@ </target> + <!-- Build Gitblit WAR --> + <target name="buildWAR" description="Build the Gitblit WAR" depends="buildinfo"> + <path id="master-classpath"> + <fileset dir="${basedir}/ext"> + <include name="*.jar" /> + </fileset> + </path> + + <delete dir="${basedir}/war" /> + <mkdir dir="${basedir}/war/WEB-INF/lib"/> + + <!-- Gitblit web.xml --> + <java classpath="${project.build.dir}" classname="com.gitblit.BuildWebXml"> + <classpath refid="master-classpath" /> + </java> + + <!-- Gitblit resources --> + <copy todir="${basedir}/war"> + <fileset dir="${project.resources.dir}"> + <exclude name="thumbs.db" /> + </fileset> + </copy> + + <!-- Gitblit library dependencies --> + <copy todir="${basedir}/war/WEB-INF/lib"> + <fileset dir="${basedir}/ext"> + <exclude name="*-sources.jar" /> + <exclude name="*-javadoc.jar" /> + <exclude name="jcommander*.jar" /> + <exclude name="jetty*.jar" /> + <exclude name="junit*.jar" /> + <exclude name="servlet*.jar" /> + </fileset> + </copy> + + <!-- Gitblit classes --> + <mkdir dir="${basedir}/war/WEB-INF/classes"/> + <copy todir="${basedir}/war/WEB-INF/classes"> + <fileset dir="${basedir}/bin"> + <exclude name="WEB-INF/web.xml" /> + <exclude name="com/gitblit/tests/" /> + <exclude name="com/gitblit/Build*.class" /> + <exclude name="com/gitblit/GitBlitServer*.class" /> + <exclude name="com/gitblit/Launcher*.class" /> + <exclude name="com/gitblit/MakeCertificate*.class" /> + <exclude name="com/gitblit/Thumbnailer*.class" /> + </fileset> + </copy> + + <!-- Build the WAR file --> + <jar basedir="${basedir}/war" destfile="${distribution.warfile}" compress="true" /> + </target> + + + <!-- Publish binaries to github --> + <target name="publishBinaries" description="Publish the Gitblit distribution to Github"> + <!-- TODO --> + <!-- https://github.com/oyvindkinsey/GitHubUploadTask --> + </target> + + <!-- Publish site to hosting service --> <!-- You must add ext/commons-net-1.4.0.jar to your ANT classpath. --> <target name="publishSite" description="Publish the Gitblit site to a webserver (requires ext/commons-net-1.4.0.jar)"> @@ -318,11 +388,5 @@ <fileset dir="${basedir}/site" /> </ftp> </target> - - <!-- Publish distribution to github --> - <target name="publishDistribution" description="Publish the Gitblit distribution to Github"> - <!-- TODO --> - <!-- https://github.com/oyvindkinsey/GitHubUploadTask --> - </target> -</project> +</project> \ No newline at end of file diff --git a/distrib/gitblit.properties b/distrib/gitblit.properties index 2d55a58..6adf11e 100644 --- a/distrib/gitblit.properties +++ b/distrib/gitblit.properties @@ -2,8 +2,7 @@ # Git Servlet Settings # -# Allow push/pull over http/https with JGit servlet -# Changing this value requires a server restart. +# Allow push/pull over http/https with JGit servlet. git.enableGitServlet = true # Base folder for repositories @@ -11,11 +10,6 @@ # Use forward slashes even on Windows!! # e.g. c:/gitrepos git.repositoriesFolder = git - -# Export all repositories -# Changing this value requires a server restart. -# if false, each exported repository must have a .git/git-daemon-export-ok file -git.exportAll = true # Search the repositories folder subfolders for other repositories. # Repositories MAY NOT be nested (i.e. one repository within another) @@ -36,7 +30,9 @@ # Changing this value requires a server restart. web.authenticateAdminPages = true -# Simple user realm file to authenticate users +# Either a simple user realm file to authenticate users +# OR a fully qualified class name that implements the ILoginService interface. +# Any custom implementation must have a public default constructor. # Changing this value requires a server restart. realm.realmFile = users.properties @@ -154,11 +150,11 @@ # Example global regex substitutions # Use !!! to separate the search pattern and the replace pattern # searchpattern!!!replacepattern -#regex.global.bug = \\b(Bug:)(\\s*[#]?|-){0,1}(\\d+)\\b!!!<a href="http://somehost/bug/$3">Bug-Id: $3</a> -#regex.global.changeid = \\b(Change-Id:\\s*)([A-Za-z0-9]*)\\b!!!<a href="http://somehost/changeid/$2">Change-Id: $2</a> +regex.global.bug = \\b(Bug:)(\\s*[#]?|-){0,1}(\\d+)\\b!!!<a href="http://somehost/bug/$3">Bug-Id: $3</a> +regex.global.changeid = \\b(Change-Id:\\s*)([A-Za-z0-9]*)\\b!!!<a href="http://somehost/changeid/$2">Change-Id: $2</a> # Example per-repository regex substitutions overrides global -#regex.myrepository.bug = \\b(Bug:)(\\s*[#]?|-){0,1}(\\d+)\\b!!!<a href="http://elsewhere/bug/$3">Bug-Id: $3</a> +regex.myrepository.bug = \\b(Bug:)(\\s*[#]?|-){0,1}(\\d+)\\b!!!<a href="http://elsewhere/bug/$3">Bug-Id: $3</a> # # Server Settings @@ -167,19 +163,6 @@ # The temporary folder to decompress the gitblit webapp. server.tempFolder = temp - -# The common log4j logging pattern -# http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html -server.log4jPattern = %-5p %d{MM-dd HH:mm:ss.SSS} %-20.20c{1} %m%n - -# Alternatively, you may specify a logging pattern for your OS. -# If the os pattern is blank, the common pattern is used. - -# This windows pattern fits (mostly) within the fixed bounds of a command prompt. -server.log4jPattern.windows = %-5p %m%n - -server.log4jPattern.linux = - # # Jetty Settings diff --git a/docs/00_index.mkd b/docs/00_index.mkd index bcf41e1..7a2bc56 100644 --- a/docs/00_index.mkd +++ b/docs/00_index.mkd @@ -4,7 +4,7 @@ ### Current Release -[%VERSION%](http://gitblit.com/%DISTRIBUTION%) based on [%JGIT%][jgit] (*%BUILDDATE%*) +%VERSION% ([go](http://gitblit.com/%GO%)|[war](http://gitblit.com/%WAR%)) based on [%JGIT%][jgit] (*%BUILDDATE%*) sources @ [Github][gitbltsrc] @@ -13,8 +13,7 @@ 2. Offer useful features for serving Git repositories. If feature is complex, refer to #1. 3. All dependencies must be retrievable from a publicly accessible [Maven](http://maven.apache.org) repository.<br/>This is to ensure authenticity of dependencies and to keep the Gitblit distribution svelte. -### Features -- Out-of-the-box integrated stack requiring minimal configuration +### Gitblit Features - JGit SmartHTTP servlet - Browser and git client authentication - Four repository access control configurations and a Read-Only flag @@ -29,7 +28,6 @@ - Administrators may create, edit, rename, or delete repositories through the web UI - Administrators may create, edit, rename, or delete users through the web UI - Repository Owners may edit repositories through the web UI -- Automatically generates a self-signed certificate for https communications - Git-notes support - Branch metrics (uses Google Charts) - HEAD and branch RSS feeds @@ -41,7 +39,6 @@ - Markdown file view support - Syntax highlighting for popular source code types - Customizable regular expression substitution for commit messages (i.e. bug or code review link integration) -- Single text file for server configuration - Single text file for users configuration - Optional utility pages <ul class='noBullets'> @@ -49,12 +46,15 @@ <li> Ticgit ticket pages *(based on last MIT release bf57b032 2009-01-27)*</li> </ul> +### Gitblit-Go Features +- Out-of-the-box integrated stack requiring minimal configuration +- Automatically generates a self-signed certificate for https communications +- Single text file for server configuration + ### Limitations -- [%JGIT%][jgit] does not currently [garbage collect or repack](http://www.kernel.org/pub/software/scm/git/docs/git-gc.html) - HTTP/HTTPS are the only supported protocols - Access controls are not path-based, they are repository-based - Only Administrators can create, rename or delete repositories -- Gitblit is an integrated, full-stack solution. There is no WAR build at this time. ### Caveats - Gitblit may eat your data. Use at your own risk. @@ -64,7 +64,6 @@ - Code documentation - Unit testing - Update Build.java to JGit 1.0.0, when its released -- WAR solution ### Idea List - Consider clone remote repository feature @@ -90,7 +89,7 @@  ### Bundled Dependencies -The following dependencies are bundled with the Gitblit zip distribution file. +The following dependencies are bundled with Gitblit. - [google-code-prettify](http://code.google.com/p/google-code-prettify) (Apache 2.0) - [JavaService](http://forge.ow2.org/projects/javaservice) (BSD and LGPL) @@ -99,7 +98,7 @@ - other icons courtesy of [FatCow Hosting](http://www.fatcow.com/free-icons) (Creative Commons CC-BY) ### Downloaded Dependencies -The following dependencies are automatically downloaded from the Apache Maven repository and from the Eclipse Maven repository when Gitblit is launched for the first time. +The following dependencies are automatically downloaded by Gitblit-Go (or already bundled with the WAR) from the Apache Maven repository and from the Eclipse Maven repository when Gitblit is launched for the first time. - [JGit][jgit] (EDL 1.0) - [Wicket](http://wicket.apache.org) (Apache 2.0) diff --git a/docs/00_setup.mkd b/docs/00_setup.mkd index ccf38b8..02816e7 100644 --- a/docs/00_setup.mkd +++ b/docs/00_setup.mkd @@ -1,6 +1,6 @@ -## Server Setup and Configuration +## Gitblit-Go Setup and Configuration -1. Download and unzip [Gitblit %VERSION%](http://gitblit.com/%DISTRIBUTION%).<br/> +1. Download and unzip [Gitblit-Go %VERSION%](http://gitblit.com/%GO%).<br/> *Its best to eliminate spaces in the path name as that can cause troubleshooting headaches.* 2. The server itself is configured through a simple text file.<br/> Open `gitblit.properties` in your favorite text editor and make sure to review and set: diff --git a/docs/01_faq.mkd b/docs/01_faq.mkd index 3605387..552c89d 100644 --- a/docs/01_faq.mkd +++ b/docs/01_faq.mkd @@ -12,10 +12,10 @@ 3. The repository is clone-restricted and your password changed. 4. A regression in Gitblit. :( -### Why can't I access Gitblit from another machine? +### Why can't I access Gitblit-Go from another machine? Please check *server.httpBindInterface* and *server.httpsBindInterface* in `gitblit.properties`. -### How do I run Gitblit on port 80 or 443 in Linux? +### How do I run Gitblit-Go on port 80 or 443 in Linux? Linux requires root permissions to serve on ports < 1024.<br/> Run the server as *root* (security concern) or change the ports you are serving to 8080 (http) and/or 8443 (https). @@ -47,21 +47,11 @@ No. Gitblit is based on [JGit][jgit] which is a pure Java implementation of the [Git version control system][git].<br/> Everything you need for Gitblit is either in the zip distribution file or automatically downloaded on execution. -### What about periodic Git garbage collection (git-gc)? -Good question. I'm not sure. - -Git repositories grow and grow and periodically need to be repacked every once in a while. Git calls this process [garbage collection](http://www.kernel.org/pub/software/scm/git/docs/git-gc.html) (which is not to be confused with [garbage collection](http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)).) - -[JGit's][jgit] documentation is sparse and its unclear whether or not JGit performs this function. - ### Can I run Gitblit in conjunction with my existing Git tooling? -Yes. You can configure Gitblit to only be a repository viewer. +Yes. ### Do I need a JDK or can I use a JRE? Gitblit will run just fine with a JRE. Gitblit can optionally use `keytool` from the JDK to generate self-signed certificates, but normally Gitblit uses [BouncyCastle][bouncycastle] for that need. - -### I want to deploy Gitblit into my own servlet container. Where is the WAR? -At this time there is no WAR build available. ### Does Gitblit use a database to store its data? No. Gitblit stores its repository configuration information within the `.git/config` file and its user information in `users.properties` or whatever filename is configured in `gitblit.properties`. @@ -76,6 +66,9 @@ Gitblit's simple authentication and authorization mechanism can be used to facilitate one or more of the [workflows outlined here](http://progit.org/book/ch5-1.html). Should you require more fine-grained access controls you might consider using [gitolite](https://github.com/sitaramc/gitolite). +### Can I authenticate users against XYZ? +Yes. The login service is pluggable. You may write your own authentication module by implementing the *ILoginService* interface. Set the fully qualified classname as the *realm.realmFile* property. + ### Why doesn't Gitblit support SSH? Gitblit could integrate [Apache Mina][mina] to provide SSH access. However, doing so violates Gitblit's first design principle: [KISS](http://en.wikipedia.org/wiki/KISS_principle).<br/> SSH support requires creating, exchanging, and managing SSH keys (arguably not more complicated than managing users). While this is possible, JGit's SmartHTTP implementation is a simpler and universal transport mechanism. diff --git a/src/com/gitblit/wicket/resources/add_16x16.png b/resources/add_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/add_16x16.png rename to resources/add_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/arrow_down.png b/resources/arrow_down.png similarity index 100% rename from src/com/gitblit/wicket/resources/arrow_down.png rename to resources/arrow_down.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/arrow_off.png b/resources/arrow_off.png similarity index 100% rename from src/com/gitblit/wicket/resources/arrow_off.png rename to resources/arrow_off.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/arrow_up.png b/resources/arrow_up.png similarity index 100% rename from src/com/gitblit/wicket/resources/arrow_up.png rename to resources/arrow_up.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/background.png b/resources/background.png similarity index 100% rename from src/com/gitblit/wicket/resources/background.png rename to resources/background.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/blank.png b/resources/blank.png similarity index 100% rename from src/com/gitblit/wicket/resources/blank.png rename to resources/blank.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/book_16x16.png b/resources/book_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/book_16x16.png rename to resources/book_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/bug_16x16.png b/resources/bug_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/bug_16x16.png rename to resources/bug_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/bullet_error.png b/resources/bullet_error.png similarity index 100% rename from src/com/gitblit/wicket/resources/bullet_error.png rename to resources/bullet_error.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/cold_16x16.png b/resources/cold_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/cold_16x16.png rename to resources/cold_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/commit_branch_16x16.png b/resources/commit_branch_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/commit_branch_16x16.png rename to resources/commit_branch_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/commit_divide_16x16.png b/resources/commit_divide_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/commit_divide_16x16.png rename to resources/commit_divide_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/commit_join_16x16.png b/resources/commit_join_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/commit_join_16x16.png rename to resources/commit_join_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/commit_merge_16x16.png b/resources/commit_merge_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/commit_merge_16x16.png rename to resources/commit_merge_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/commit_up_16x16.png b/resources/commit_up_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/commit_up_16x16.png rename to resources/commit_up_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/feed_16x16.png b/resources/feed_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/feed_16x16.png rename to resources/feed_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_16x16.png b/resources/file_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_16x16.png rename to resources/file_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_acrobat_16x16.png b/resources/file_acrobat_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_acrobat_16x16.png rename to resources/file_acrobat_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_c_16x16.png b/resources/file_c_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_c_16x16.png rename to resources/file_c_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_code_16x16.png b/resources/file_code_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_code_16x16.png rename to resources/file_code_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_cpp_16x16.png b/resources/file_cpp_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_cpp_16x16.png rename to resources/file_cpp_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_cs_16x16.png b/resources/file_cs_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_cs_16x16.png rename to resources/file_cs_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_doc_16x16.png b/resources/file_doc_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_doc_16x16.png rename to resources/file_doc_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_excel_16x16.png b/resources/file_excel_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_excel_16x16.png rename to resources/file_excel_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_h_16x16.png b/resources/file_h_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_h_16x16.png rename to resources/file_h_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_java_16x16.png b/resources/file_java_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_java_16x16.png rename to resources/file_java_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_php_16x16.png b/resources/file_php_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_php_16x16.png rename to resources/file_php_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_ppt_16x16.png b/resources/file_ppt_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_ppt_16x16.png rename to resources/file_ppt_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_ruby_16x16.png b/resources/file_ruby_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_ruby_16x16.png rename to resources/file_ruby_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_settings_16x16.png b/resources/file_settings_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_settings_16x16.png rename to resources/file_settings_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_vs_16x16.png b/resources/file_vs_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_vs_16x16.png rename to resources/file_vs_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_world_16x16.png b/resources/file_world_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_world_16x16.png rename to resources/file_world_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/file_zip_16x16.png b/resources/file_zip_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/file_zip_16x16.png rename to resources/file_zip_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/folder_16x16.png b/resources/folder_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/folder_16x16.png rename to resources/folder_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/gitblit.css b/resources/gitblit.css similarity index 98% rename from src/com/gitblit/wicket/resources/gitblit.css rename to resources/gitblit.css index 498c1a7..2947418 100644 --- a/src/com/gitblit/wicket/resources/gitblit.css +++ b/resources/gitblit.css @@ -221,7 +221,7 @@ div.search input { vertical-align: top; - background: url(/com/gitblit/wicket/resources/search-icon.png) no-repeat 4px center; + background: url(search-icon.png) no-repeat 4px center; color: #ddd; background-color: #000070; border: 1px solid transparent; diff --git a/resources/gitblt-favicon.png b/resources/gitblt-favicon.png new file mode 100644 index 0000000..c3c6dc1 --- /dev/null +++ b/resources/gitblt-favicon.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/gitblt-logo.png b/resources/gitblt-logo.png similarity index 100% rename from src/com/gitblit/wicket/resources/gitblt-logo.png rename to resources/gitblt-logo.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/gitblt2.png b/resources/gitblt2.png similarity index 100% rename from src/com/gitblit/wicket/resources/gitblt2.png rename to resources/gitblt2.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/gitblt_25.png b/resources/gitblt_25.png similarity index 100% rename from src/com/gitblit/wicket/resources/gitblt_25.png rename to resources/gitblt_25.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/gitweb-favicon.png b/resources/gitweb-favicon.png similarity index 100% rename from src/com/gitblit/wicket/resources/gitweb-favicon.png rename to resources/gitweb-favicon.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/lock_16x16.png b/resources/lock_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/lock_16x16.png rename to resources/lock_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/lock_go_16x16.png b/resources/lock_go_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/lock_go_16x16.png rename to resources/lock_go_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/lock_pull_16x16.png b/resources/lock_pull_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/lock_pull_16x16.png rename to resources/lock_pull_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/markdown.css b/resources/markdown.css similarity index 100% rename from src/com/gitblit/wicket/resources/markdown.css rename to resources/markdown.css diff --git a/src/com/gitblit/wicket/resources/pixel.png b/resources/pixel.png similarity index 100% rename from src/com/gitblit/wicket/resources/pixel.png rename to resources/pixel.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/search-icon.png b/resources/search-icon.png similarity index 100% rename from src/com/gitblit/wicket/resources/search-icon.png rename to resources/search-icon.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/shield_16x16.png b/resources/shield_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/shield_16x16.png rename to resources/shield_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/tag_16x16.png b/resources/tag_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/tag_16x16.png rename to resources/tag_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/user_16x16.png b/resources/user_16x16.png similarity index 100% rename from src/com/gitblit/wicket/resources/user_16x16.png rename to resources/user_16x16.png Binary files differ diff --git a/src/com/gitblit/wicket/resources/welcome.mkd b/resources/welcome.mkd similarity index 100% rename from src/com/gitblit/wicket/resources/welcome.mkd rename to resources/welcome.mkd diff --git a/src/WEB-INF/web.xml b/src/WEB-INF/web.xml new file mode 100644 index 0000000..d5d3288 --- /dev/null +++ b/src/WEB-INF/web.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app version="2.4" + xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + + <!-- PARAMS --> + + <!-- Gitblit Context Listener --><!-- STRIP + <listener> + <listener-class>com.gitblit.GitBlit</listener-class> + </listener>STRIP --> + + + <!-- Git Servlet + <url-pattern> MUST match: + * GitFilter + * com.gitblit.Constants.GIT_PATH + * Wicket Filter ignorePaths parameter --><!-- STRIP + <servlet> + <servlet-name>GitServlet</servlet-name> + <servlet-class>org.jgit.http.transport.GitServlet</servlet-class> + <init-param> + <param-name>base-path</param-name> + <param-value>c:/git</param-value> + </init-param> + <init-param> + <param-name>export-all</param-name> + <param-value>1</param-value> + </init-param> + </servlet> + <servlet-mapping> + <servlet-name>GitServlet</servlet-name> + <url-pattern>/git/*</url-pattern> + </servlet-mapping>STRIP --> + + + <!-- Syndication Servlet + <url-pattern> MUST match: + * SyndicationFilter + * com.gitblit.Constants.SYNDICATION_PATH + * Wicket Filter ignorePaths parameter --> + <servlet> + <servlet-name>SyndicationServlet</servlet-name> + <servlet-class>com.gitblit.SyndicationServlet</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>SyndicationServlet</servlet-name> + <url-pattern>/feed/*</url-pattern> + </servlet-mapping> + + + <!-- Zip Servlet + <url-pattern> MUST match: + * ZipServlet + * com.gitblit.Constants.ZIP_PATH + * Wicket Filter ignorePaths parameter --> + <servlet> + <servlet-name>ZipServlet</servlet-name> + <servlet-class>com.gitblit.DownloadZipServlet</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>ZipServlet</servlet-name> + <url-pattern>/zip/*</url-pattern> + </servlet-mapping> + + + <!-- Git Access Restriction Filter + <url-pattern> MUST match: + * GitServlet + * com.gitblit.Constants.GIT_PATH + * Wicket Filter ignorePaths parameter --> + <filter> + <filter-name>GitFilter</filter-name> + <filter-class>com.gitblit.GitFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>GitFilter</filter-name> + <url-pattern>/git/*</url-pattern> + </filter-mapping> + + + <!-- Syndication Restriction Filter + <url-pattern> MUST match: + * SyndicationServlet + * com.gitblit.Constants.SYNDICATION_PATH + * Wicket Filter ignorePaths parameter --> + <filter> + <filter-name>SyndicationFilter</filter-name> + <filter-class>com.gitblit.SyndicationFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>SyndicationFilter</filter-name> + <url-pattern>/feed/*</url-pattern> + </filter-mapping> + + + <!-- Wicket Filter --> + <filter> + <filter-name>wicketFilter</filter-name> + <filter-class> + org.apache.wicket.protocol.http.WicketFilter + </filter-class> + <init-param> + <param-name>applicationClassName</param-name> + <param-value>com.gitblit.wicket.GitBlitWebApp</param-value> + </init-param> + <init-param> + <param-name>ignorePaths</param-name> + <!-- Paths should match + * SyndicationFilter <url-pattern> + * SyndicationServlet <url-pattern> + * com.gitblit.Constants.SYNDICATION_PATH + * GitFilter <url-pattern> + * GitServlet <url-pattern> + * com.gitblit.Constants.GIT_PATH + * ZipServlet <url-pattern> + * com.gitblit.Constants.ZIP_PATH --> + <param-value>git/,feed/,zip/</param-value> + </init-param> + </filter> + <filter-mapping> + <filter-name>wicketFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> +</web-app> \ No newline at end of file diff --git a/src/com/gitblit/AccessRestrictionFilter.java b/src/com/gitblit/AccessRestrictionFilter.java index 3aca103..625eaa9 100644 --- a/src/com/gitblit/AccessRestrictionFilter.java +++ b/src/com/gitblit/AccessRestrictionFilter.java @@ -16,6 +16,7 @@ package com.gitblit; import java.io.IOException; +import java.nio.charset.Charset; import java.security.Principal; import java.text.MessageFormat; import java.util.Enumeration; @@ -32,6 +33,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.eclipse.jgit.util.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -114,7 +116,8 @@ if (authorization != null && authorization.startsWith(BASIC)) { // Authorization: Basic base64credentials String base64Credentials = authorization.substring(BASIC.length()).trim(); - String credentials = StringUtils.decodeBase64(base64Credentials); + String credentials = new String(Base64.decode(base64Credentials), + Charset.forName("UTF-8")); if (GitBlit.isDebugMode()) { logger.info(MessageFormat.format("AUTH: {0} ({1})", authorization, credentials)); } @@ -131,7 +134,8 @@ // authenticated request permitted. // pass processing to the restricted servlet. newSession(accessRequest, httpResponse); - logger.info("ARF: " + fullUrl + " (" + HttpServletResponse.SC_CONTINUE + ") authenticated"); + logger.info("ARF: " + fullUrl + " (" + HttpServletResponse.SC_CONTINUE + + ") authenticated"); chain.doFilter(accessRequest, httpResponse); return; } @@ -163,7 +167,8 @@ } if (GitBlit.isDebugMode()) { - logger.info("ARF: " + fullUrl + " (" + HttpServletResponse.SC_CONTINUE + ") unauthenticated"); + logger.info("ARF: " + fullUrl + " (" + HttpServletResponse.SC_CONTINUE + + ") unauthenticated"); } // unauthenticated request permitted. // pass processing to the restricted servlet. @@ -202,19 +207,19 @@ @Override public void destroy() { } - + /** * Wraps a standard HttpServletRequest and overrides user principal methods. */ public static class AccessRestrictionRequest extends ServletRequestWrapper { private UserModel user; - + public AccessRestrictionRequest(HttpServletRequest req) { super(req); user = new UserModel("anonymous"); } - + void setUser(UserModel user) { this.user = user; } diff --git a/src/com/gitblit/Build.java b/src/com/gitblit/Build.java index 30c4aa0..90224f0 100644 --- a/src/com/gitblit/Build.java +++ b/src/com/gitblit/Build.java @@ -312,10 +312,10 @@ "c7adc475ca40c288c93054e0f4fe58f3a98c0cb5"); public static final MavenObject JETTY = new MavenObject("Jetty", - "org/eclipse/jetty/aggregate", "jetty-all", "7.4.1.v20110513", 1500000, 1000000, - 4100000, "1e2de9ed25a7c6ae38717d5ffdc7cfcd6be4bd46", - "7b6279d16ce8f663537d9faf55ea353e748dbbaa", - "fa06212e751296f1a7abc15c843b135bf49a112b"); + "org/eclipse/jetty/aggregate", "jetty-webapp", "7.4.2.v20110526", 1000000, 680000, + 2720000, "56331143afa22d24d9faba96e86e6371b0686c7c", + "9f38230fd589e29c8be0fc3c80fb51c5093c2e1e", + "0d48212889c25252c5c14bef62703e28215d80cc"); public static final MavenObject SERVLET = new MavenObject("Servlet 2.5", "javax/servlet", "servlet-api", "2.5", 105000, 158000, 0, @@ -363,8 +363,8 @@ "3d32d958b2f7aa58388af5701ea3aafc433e573f", "c37518b67ea85af485dd61fe854137eeacc50318"); - public static final MavenObject JUNIT = new MavenObject("JUnit", "junit", "junit", "3.8.2", - 120000, 0, 0, "07e4cde26b53a9a0e3fe5b00d1dbbc7cc1d46060", "", ""); + public static final MavenObject JUNIT = new MavenObject("JUnit", "junit", "junit", "4.8.2", + 237000, 0, 0, "c94f54227b08100974c36170dcb53329435fe5ad", "", ""); public static final MavenObject MARKDOWNPAPERS = new MavenObject("MarkdownPapers", "org/tautua/markdownpapers", "markdownpapers-core", "1.0.0", 87000, 58000, 278000, diff --git a/src/com/gitblit/BuildWebXml.java b/src/com/gitblit/BuildWebXml.java new file mode 100644 index 0000000..3b687f6 --- /dev/null +++ b/src/com/gitblit/BuildWebXml.java @@ -0,0 +1,80 @@ +/* + * Copyright 2011 gitblit.com. + * + * 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.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; + +public class BuildWebXml { + private static final String PARAMS = "<!-- PARAMS -->"; + + private static final String [] STRIP_TOKENS = { "<!-- STRIP", "STRIP -->" }; + + private static final String PARAM_PATTERN = "\n\t<context-param>\n\t\t<param-name>{0}</param-name>\n\t\t<param-value>{1}</param-value>\n\t</context-param>\n"; + + public static void main(String[] args) throws Exception { + // Read the current Gitblit properties + // TODO extract the comments and inject them into web.xml too + FileInputStream fis = new FileInputStream(new File("distrib/gitblit.properties")); + Properties fileSettings = new Properties(); + fileSettings.load(fis); + fis.close(); + List<String> keys = new ArrayList<String>(fileSettings.stringPropertyNames()); + Collections.sort(keys); + + StringBuilder parameters = new StringBuilder(); + for (String key : keys) { + if (!skipKey(key)) { + String value = fileSettings.getProperty(key); + parameters.append(MessageFormat.format(PARAM_PATTERN, key, value)); + } + } + + // Read the prototype web.xml file + File webxml = new File("src/WEB-INF/web.xml"); + char [] buffer = new char[(int) webxml.length()]; + FileReader reader = new FileReader(webxml); + reader.read(buffer); + reader.close(); + String webXmlContent = new String(buffer); + + // Insert the Gitblit properties into the prototype web.xml + for (String stripToken:STRIP_TOKENS) { + webXmlContent = webXmlContent.replace(stripToken, ""); + } + int idx = webXmlContent.indexOf(PARAMS); + StringBuilder sb = new StringBuilder(); + sb.append(webXmlContent.substring(0, idx)); + sb.append(parameters.toString()); + sb.append(webXmlContent.substring(idx + PARAMS.length())); + + // Save the merged web.xml to the war build folder + FileOutputStream os = new FileOutputStream(new File("war/WEB-INF/web.xml"), false); + os.write(sb.toString().getBytes()); + os.close(); + } + + private static boolean skipKey(String key) { + return key.startsWith(Keys.server._ROOT); + } +} diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java index 68e7b67..b874a7b 100644 --- a/src/com/gitblit/Constants.java +++ b/src/com/gitblit/Constants.java @@ -33,14 +33,12 @@ public static final String PROPERTIES_FILE = "gitblit.properties"; - public static final String GIT_SERVLET_PATH = "/git/"; + public static final String GIT_PATH = "/git/"; - public static final String ZIP_SERVLET_PATH = "/zip/"; + public static final String ZIP_PATH = "/zip/"; - public static final String SYNDICATION_SERVLET_PATH = "/feed/"; + public static final String SYNDICATION_PATH = "/feed/"; - public static final String RESOURCE_PATH = "/com/gitblit/wicket/resources/"; - public static final String BORDER = "***********************************************************"; public static enum AccessRestrictionType { diff --git a/src/com/gitblit/DownloadZipServlet.java b/src/com/gitblit/DownloadZipServlet.java index 3b02cba..d36b94d 100644 --- a/src/com/gitblit/DownloadZipServlet.java +++ b/src/com/gitblit/DownloadZipServlet.java @@ -44,7 +44,7 @@ if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') { baseURL = baseURL.substring(0, baseURL.length() - 1); } - return baseURL + Constants.ZIP_SERVLET_PATH + "?r=" + repository + return baseURL + Constants.ZIP_PATH + "?r=" + repository + (path == null ? "" : ("&p=" + path)) + (objectId == null ? "" : ("&h=" + objectId)); } diff --git a/src/com/gitblit/FileLoginService.java b/src/com/gitblit/FileLoginService.java index b59a776..e239efc 100644 --- a/src/com/gitblit/FileLoginService.java +++ b/src/com/gitblit/FileLoginService.java @@ -53,8 +53,7 @@ if (user.password.equalsIgnoreCase(md5)) { returnedUser = user; } - } - if (user.password.equals(new String(password))) { + } else if (user.password.equals(new String(password))) { returnedUser = user; } return returnedUser; diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index fa593f9..1fa8b60 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -45,7 +45,7 @@ public class GitBlit implements ServletContextListener { - private static final GitBlit GITBLIT; + private static GitBlit gitblit; private final Logger logger = LoggerFactory.getLogger(GitBlit.class); @@ -53,45 +53,48 @@ private File repositoriesFolder; - private boolean exportAll; + private boolean exportAll = true; private ILoginService loginService; private IStoredSettings storedSettings; - static { - GITBLIT = new GitBlit(); - } - - private GitBlit() { + public GitBlit() { + if (gitblit == null) { + // Singleton reference when running in standard servlet container + gitblit = this; + } } public static GitBlit self() { - return GITBLIT; + if (gitblit == null) { + gitblit = new GitBlit(); + } + return gitblit; } public static boolean getBoolean(String key, boolean defaultValue) { - return GITBLIT.storedSettings.getBoolean(key, defaultValue); + return self().storedSettings.getBoolean(key, defaultValue); } public static int getInteger(String key, int defaultValue) { - return GITBLIT.storedSettings.getInteger(key, defaultValue); + return self().storedSettings.getInteger(key, defaultValue); } public static String getString(String key, String defaultValue) { - return GITBLIT.storedSettings.getString(key, defaultValue); + return self().storedSettings.getString(key, defaultValue); } public static List<String> getStrings(String key) { - return GITBLIT.storedSettings.getStrings(key); + return self().storedSettings.getStrings(key); } public static List<String> getAllKeys(String startingWith) { - return GITBLIT.storedSettings.getAllKeys(startingWith); + return self().storedSettings.getAllKeys(startingWith); } public static boolean isDebugMode() { - return GITBLIT.storedSettings.getBoolean(Keys.web.debugMode, false); + return self().storedSettings.getBoolean(Keys.web.debugMode, false); } public List<String> getOtherCloneUrls(String repositoryName) { @@ -103,6 +106,7 @@ } public void setLoginService(ILoginService loginService) { + logger.info("Setting up login service " + loginService.toString()); this.loginService = loginService; } @@ -353,9 +357,32 @@ public void configureContext(IStoredSettings settings) { logger.info("Reading configuration from " + settings.toString()); this.storedSettings = settings; - repositoriesFolder = new File(settings.getString(Keys.git.repositoriesFolder, "repos")); - exportAll = settings.getBoolean(Keys.git.exportAll, true); + repositoriesFolder = new File(settings.getString(Keys.git.repositoriesFolder, "git")); + logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath()); repositoryResolver = new FileResolver<Void>(repositoriesFolder, exportAll); + String realm = settings.getString(Keys.realm.realmFile, "users.properties"); + ILoginService loginService = null; + try { + // Check to see if this "file" is a login service class + Class<?> realmClass = Class.forName(realm); + if (ILoginService.class.isAssignableFrom(realmClass)) { + loginService = (ILoginService) realmClass.newInstance(); + } + } catch (Throwable t) { + // Not a login service class OR other issue + // Use default file login service + File realmFile = new File(realm); + if (!realmFile.exists()) { + try { + realmFile.createNewFile(); + } catch (IOException x) { + logger.error( + MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmFile), x); + } + } + loginService = new FileLoginService(realmFile); + } + setLoginService(loginService); } @Override diff --git a/src/com/gitblit/GitBlitServer.java b/src/com/gitblit/GitBlitServer.java index 4b6df70..3687e4d 100644 --- a/src/com/gitblit/GitBlitServer.java +++ b/src/com/gitblit/GitBlitServer.java @@ -30,10 +30,6 @@ import java.util.ArrayList; import java.util.List; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.PatternLayout; -import org.apache.wicket.protocol.http.ContextParamWebApplicationFactory; -import org.apache.wicket.protocol.http.WicketFilter; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.bio.SocketConnector; @@ -42,7 +38,6 @@ import org.eclipse.jetty.server.ssl.SslConnector; import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; import org.eclipse.jetty.server.ssl.SslSocketConnector; -import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.thread.QueuedThreadPool; @@ -56,7 +51,6 @@ import com.beust.jcommander.ParameterException; import com.beust.jcommander.Parameters; import com.gitblit.utils.StringUtils; -import com.gitblit.wicket.GitBlitWebApp; public class GitBlitServer { @@ -121,26 +115,6 @@ */ private static void start(Params params) { FileSettings settings = params.FILESETTINGS; - String pattern = settings.getString(Keys.server.log4jPattern, - "%-5p %d{MM-dd HH:mm:ss.SSS} %-20.20c{1} %m%n"); - - // allow os override of logging pattern - String os = System.getProperty("os.name").toLowerCase(); - if (os.indexOf("windows") > -1) { - String winPattern = settings.getString(Keys.server.log4jPattern_windows, pattern); - if (!StringUtils.isEmpty(winPattern)) { - pattern = winPattern; - } - } else if (os.indexOf("linux") > -1) { - String linuxPattern = settings.getString(Keys.server.log4jPattern_linux, pattern); - if (!StringUtils.isEmpty(linuxPattern)) { - pattern = linuxPattern; - } - } - - PatternLayout layout = new PatternLayout(pattern); - org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger(); - rootLogger.addAppender(new ConsoleAppender(layout)); logger = LoggerFactory.getLogger(GitBlitServer.class); logger.info(Constants.BORDER); @@ -223,55 +197,23 @@ sessionManager.setSecureCookies(params.port <= 0 && params.securePort > 0); rootContext.getSessionHandler().setSessionManager(sessionManager); - // Wicket Filter - String wicketPathSpec = "/*"; - FilterHolder wicketFilter = new FilterHolder(WicketFilter.class); - wicketFilter.setInitParameter(ContextParamWebApplicationFactory.APP_CLASS_PARAM, - GitBlitWebApp.class.getName()); - wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, wicketPathSpec); - wicketFilter.setInitParameter(WicketFilter.IGNORE_PATHS_PARAM, "git/,feed/,zip/"); - rootContext.addFilter(wicketFilter, wicketPathSpec, FilterMapping.DEFAULT); - // JGit Filter and Servlet - if (settings.getBoolean(Keys.git.enableGitServlet, true)) { - String jgitPathSpec = Constants.GIT_SERVLET_PATH + "*"; - rootContext.addFilter(GitFilter.class, jgitPathSpec, FilterMapping.DEFAULT); - ServletHolder jGitServlet = rootContext.addServlet(GitServlet.class, jgitPathSpec); - jGitServlet.setInitParameter("base-path", params.repositoriesFolder); - jGitServlet.setInitParameter("export-all", - settings.getBoolean(Keys.git.exportAll, true) ? "1" : "0"); - } + String jgitPathSpec = Constants.GIT_PATH + "*"; + rootContext.addFilter(GitFilter.class, jgitPathSpec, FilterMapping.DEFAULT); + ServletHolder jGitServlet = rootContext.addServlet(GitServlet.class, jgitPathSpec); + jGitServlet.setInitParameter("base-path", params.repositoriesFolder); + jGitServlet.setInitParameter("export-all", "1"); - // Syndication Filter and Servlet - String feedPathSpec = Constants.SYNDICATION_SERVLET_PATH + "*"; - rootContext.addFilter(SyndicationFilter.class, feedPathSpec, FilterMapping.DEFAULT); - rootContext.addServlet(SyndicationServlet.class, feedPathSpec); - - // Zip Servlet - rootContext.addServlet(DownloadZipServlet.class, Constants.ZIP_SERVLET_PATH + "*"); - - // Login Service + // Ensure there is a defined Login Service String realmUsers = params.realmFile; if (StringUtils.isEmpty(realmUsers)) { logger.error(MessageFormat.format("PLEASE SPECIFY {0}!!", Keys.realm.realmFile)); return; } - File realmFile = new File(realmUsers); - if (!realmFile.exists()) { - try { - realmFile.createNewFile(); - } catch (IOException x) { - logger.error(MessageFormat.format("COULD NOT CREATE REALM FILE {0}!", realmUsers), - x); - return; - } - } - logger.info("Setting up login service from " + realmUsers); - FileLoginService loginService = new FileLoginService(realmFile); - GitBlit.self().setLoginService(loginService); - - logger.info("Git repositories folder " - + new File(params.repositoriesFolder).getAbsolutePath()); + + // Update settings +// settings.put(Keys.realm.realmFile, params.realmFile); +// settings.put(Keys.git.repositoriesFolder, params.repositoriesFolder); // Set the server's contexts server.setHandler(rootContext); diff --git a/src/com/gitblit/GitFilter.java b/src/com/gitblit/GitFilter.java index 5bd7b33..b310442 100644 --- a/src/com/gitblit/GitFilter.java +++ b/src/com/gitblit/GitFilter.java @@ -65,6 +65,10 @@ @Override protected boolean canAccess(RepositoryModel repository, UserModel user, String urlRequestType) { + if (!GitBlit.getBoolean(Keys.git.enableGitServlet, true)) { + // Git Servlet disabled + return false; + } if (repository.isFrozen || repository.accessRestriction.atLeast(AccessRestrictionType.PUSH)) { boolean authorizedUser = user.canAccessRepository(repository.name); if (urlRequestType.equals(gitReceivePack)) { diff --git a/src/com/gitblit/ILoginService.java b/src/com/gitblit/ILoginService.java index d7bfd01..0e706cf 100644 --- a/src/com/gitblit/ILoginService.java +++ b/src/com/gitblit/ILoginService.java @@ -42,4 +42,6 @@ boolean renameRole(String oldRole, String newRole); boolean deleteRole(String role); + + String toString(); } diff --git a/src/com/gitblit/IStoredSettings.java b/src/com/gitblit/IStoredSettings.java index 7108c06..403a067 100644 --- a/src/com/gitblit/IStoredSettings.java +++ b/src/com/gitblit/IStoredSettings.java @@ -27,21 +27,25 @@ public abstract class IStoredSettings { protected final Logger logger; - + public IStoredSettings(Class<? extends IStoredSettings> clazz) { logger = LoggerFactory.getLogger(clazz); } - + protected abstract Properties read(); public List<String> getAllKeys(String startingWith) { - startingWith = startingWith.toLowerCase(); List<String> keys = new ArrayList<String>(); Properties props = read(); - for (Object o : props.keySet()) { - String key = o.toString(); - if (key.toLowerCase().startsWith(startingWith)) { - keys.add(key); + if (StringUtils.isEmpty(startingWith)) { + keys.addAll(props.stringPropertyNames()); + } else { + startingWith = startingWith.toLowerCase(); + for (Object o : props.keySet()) { + String key = o.toString(); + if (key.toLowerCase().startsWith(startingWith)) { + keys.add(key); + } } } return keys; diff --git a/src/com/gitblit/SyndicationServlet.java b/src/com/gitblit/SyndicationServlet.java index 19865fe..66dc467 100644 --- a/src/com/gitblit/SyndicationServlet.java +++ b/src/com/gitblit/SyndicationServlet.java @@ -43,7 +43,7 @@ } StringBuilder url = new StringBuilder(); url.append(baseURL); - url.append(Constants.SYNDICATION_SERVLET_PATH); + url.append(Constants.SYNDICATION_PATH); url.append(repository); if (!StringUtils.isEmpty(objectId) || length > 0) { StringBuilder parameters = new StringBuilder("?"); diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index e8bb3bf..5656efb 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -402,36 +402,30 @@ public static List<PathChangeModel> getFilesInCommit(Repository r, RevCommit commit) { List<PathChangeModel> list = new ArrayList<PathChangeModel>(); - RevWalk rw = new RevWalk(r); - TreeWalk tw = new TreeWalk(r); + RevWalk rw = new RevWalk(r); try { if (commit == null) { ObjectId object = r.resolve(Constants.HEAD); commit = rw.parseCommit(object); - } - RevTree commitTree = commit.getTree(); + } - tw.reset(); - tw.setRecursive(true); if (commit.getParentCount() == 0) { - tw.addTree(commitTree); + TreeWalk tw = new TreeWalk(r); + tw.reset(); + tw.setRecursive(true); + tw.addTree(commit.getTree()); while (tw.next()) { list.add(new PathChangeModel(tw.getPathString(), tw.getPathString(), 0, tw .getRawMode(0), commit.getId().getName(), ChangeType.ADD)); } + tw.release(); } else { RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); - RevTree parentTree = parent.getTree(); - tw.addTree(parentTree); - tw.addTree(commitTree); - tw.setFilter(TreeFilter.ANY_DIFF); - - RawTextComparator cmp = RawTextComparator.DEFAULT; DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE); df.setRepository(r); - df.setDiffComparator(cmp); + df.setDiffComparator(RawTextComparator.DEFAULT); df.setDetectRenames(true); - List<DiffEntry> diffs = df.scan(parentTree, commitTree); + List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree()); for (DiffEntry diff : diffs) { if (diff.getChangeType().equals(ChangeType.DELETE)) { list.add(new PathChangeModel(diff.getOldPath(), diff.getOldPath(), 0, diff @@ -447,8 +441,7 @@ } catch (Throwable t) { LOGGER.error("failed to determine files in commit!", t); } finally { - rw.dispose(); - tw.release(); + rw.dispose(); } return list; } diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java index 363efc9..b53b5e1 100644 --- a/src/com/gitblit/utils/StringUtils.java +++ b/src/com/gitblit/utils/StringUtils.java @@ -16,15 +16,11 @@ package com.gitblit.utils; import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.regex.PatternSyntaxException; - -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jgit.util.Base64; public class StringUtils { @@ -152,9 +148,10 @@ md.update(string.getBytes("iso-8859-1")); byte[] digest = md.digest(); return toHex(digest); - } catch (Exception e) { - Log.warn(e); - return null; + } catch (UnsupportedEncodingException u) { + throw new RuntimeException(u); + } catch (NoSuchAlgorithmException t) { + throw new RuntimeException(t); } } @@ -168,11 +165,7 @@ } return sb.toString(); } - - public static String decodeBase64(String base64) { - return new String(Base64.decode(base64), Charset.forName("UTF-8")); - } - + public static String getRootPath(String path) { if (path.indexOf('/') > -1) { return path.substring(0, path.lastIndexOf('/')); diff --git a/src/com/gitblit/utils/SyndicationUtils.java b/src/com/gitblit/utils/SyndicationUtils.java index 5763af3..80a1b28 100644 --- a/src/com/gitblit/utils/SyndicationUtils.java +++ b/src/com/gitblit/utils/SyndicationUtils.java @@ -48,7 +48,7 @@ feed.setDescription(description); SyndImageImpl image = new SyndImageImpl(); image.setTitle(Constants.NAME); - image.setUrl(hostUrl + Constants.RESOURCE_PATH + "gitblt_25.png"); + image.setUrl(hostUrl + "/gitblt_25.png"); image.setLink(hostUrl); feed.setImage(image); diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties index 50a4ef4..2ed61fa 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/com/gitblit/wicket/GitBlitWebApp.properties @@ -66,7 +66,7 @@ gb.missingUsername = Missing Username gb.edit = edit gb.searchTypeTooltip = Select Search Type -gb.searchTooltip = Search Git:Blit +gb.searchTooltip = Search Gitblit gb.delete = delete gb.docs = docs gb.accessRestriction = access restriction @@ -86,7 +86,7 @@ gb.useTicketsDescription = distributed Ticgit issues gb.useDocsDescription = enumerates Markdown documentation in repository gb.showRemoteBranchesDescription = show remote branches -gb.canAdminDescription = can administer Git:Blit server +gb.canAdminDescription = can administer Gitblit server gb.permittedUsers = permitted users gb.isFrozen = is frozen gb.isFrozenDescription = deny push operations diff --git a/src/com/gitblit/wicket/WicketUtils.java b/src/com/gitblit/wicket/WicketUtils.java index 54f9648..1897aca 100644 --- a/src/com/gitblit/wicket/WicketUtils.java +++ b/src/com/gitblit/wicket/WicketUtils.java @@ -169,7 +169,7 @@ } public static ContextImage newImage(String wicketId, String file, String tooltip) { - ContextImage img = new ContextImage(wicketId, com.gitblit.Constants.RESOURCE_PATH + file); + ContextImage img = new ContextImage(wicketId, file); if (!StringUtils.isEmpty(tooltip)) { setHtmlTooltip(img, tooltip); } @@ -177,7 +177,7 @@ } public static ContextRelativeResource getResource(String file) { - return new ContextRelativeResource(com.gitblit.Constants.RESOURCE_PATH + file); + return new ContextRelativeResource(file); } public static String getHostURL(Request request) { diff --git a/src/com/gitblit/wicket/pages/BasePage.html b/src/com/gitblit/wicket/pages/BasePage.html index 0da37d4..cc19fbc 100644 --- a/src/com/gitblit/wicket/pages/BasePage.html +++ b/src/com/gitblit/wicket/pages/BasePage.html @@ -4,25 +4,21 @@ xml:lang="en" lang="en"> - <!-- Head with Wicket-controlled resources in this package --> + <!-- Head --> <wicket:head> <title wicket:id="title">[page title]</title> - <wicket:link> - <link rel="stylesheet" type="text/css" href="/com/gitblit/wicket/resources/gitblit.css"/> - <link rel="shortcut icon" href="/com/gitblit/wicket/resources/gitblt-favicon.png" type="image/png" /> - </wicket:link> + <link rel="stylesheet" type="text/css" href="gitblit.css"/> + <link rel="icon" href="gitblt-favicon.png" type="image/png" /> </wicket:head> <body> <!-- page header --> <div class="page_header"> <a title="gitblit homepage" href="http://gitblit.com/"> - <wicket:link> - <img src="/com/gitblit/wicket/resources/gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/> - </wicket:link> + <img src="gitblt_25.png" width="79" height="25" alt="gitblit" class="logo"/> </a> <span> - <a href="/"><span wicket:id="siteName">[site name]</span></a> / <span wicket:id="repositoryName">[repository name]</span> <span wicket:id="pageName">[page name]</span> + <span wicket:id="siteName">[site name]</span> / <span wicket:id="repositoryName">[repository name]</span> <span wicket:id="pageName">[page name]</span> </span> </div> diff --git a/src/com/gitblit/wicket/pages/BasePage.java b/src/com/gitblit/wicket/pages/BasePage.java index 9031bef..5a0eb90 100644 --- a/src/com/gitblit/wicket/pages/BasePage.java +++ b/src/com/gitblit/wicket/pages/BasePage.java @@ -63,7 +63,7 @@ if (siteName == null || siteName.trim().length() == 0) { siteName = Constants.NAME; } - add(new Label("siteName", siteName)); + add(new LinkPanel("siteName", null, siteName, RepositoriesPage.class, null)); add(new LinkPanel("repositoryName", null, repositoryName, SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName))); add(new Label("pageName", pageName)); @@ -122,6 +122,10 @@ HttpServletRequest req = servletWebRequest.getHttpServletRequest(); return req.getServerName(); } + + public void warn(String message, Throwable t) { + logger.warn(message, t); + } public void error(String message, boolean redirect) { logger.error(message); diff --git a/src/com/gitblit/wicket/pages/DocsPage.java b/src/com/gitblit/wicket/pages/DocsPage.java index 7f41b71..2f899bb 100644 --- a/src/com/gitblit/wicket/pages/DocsPage.java +++ b/src/com/gitblit/wicket/pages/DocsPage.java @@ -64,7 +64,8 @@ .newPathParameter(repositoryName, entry.commitId, entry.path))); item.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils .newPathParameter(repositoryName, entry.commitId, entry.path))); - item.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false)); + item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, + WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils .newPathParameter(repositoryName, entry.commitId, entry.path))); WicketUtils.setAlternatingBackground(item, counter); diff --git a/src/com/gitblit/wicket/pages/LoginPage.html b/src/com/gitblit/wicket/pages/LoginPage.html index 280453d..5f9b779 100644 --- a/src/com/gitblit/wicket/pages/LoginPage.html +++ b/src/com/gitblit/wicket/pages/LoginPage.html @@ -7,18 +7,14 @@ <!-- Head with Wicket-controlled resources in this package --> <wicket:head> <title wicket:id="title">[page title]</title> - <wicket:link> - <link rel="stylesheet" type="text/css" href="/com/gitblit/wicket/resources/gitblit.css"/> - <link rel="shortcut icon" href="/com/gitblit/wicket/resources/gitblt-favicon.png" type="image/png" /> - </wicket:link> + <link rel="stylesheet" type="text/css" href="gitblit.css"/> + <link rel="shortcut icon" href="gitblt-favicon.png" type="image/png" /> </wicket:head> <body onload="document.getElementById('username').focus();"> <div> <div style="padding-top: 10px;text-align:center;"> - <wicket:link> - <img src="/com/gitblit/wicket/resources/gitblt_25.png" alt="Git:Blit"/><br/> - </wicket:link> + <img src="gitblt_25.png" alt="Gitblit"/><br/> <div style="padding-top:30px;font-weight:bold;" wicket:id="name">[name]</div> </div> diff --git a/src/com/gitblit/wicket/pages/MarkdownPage.html b/src/com/gitblit/wicket/pages/MarkdownPage.html index a0f6090..1293f78 100644 --- a/src/com/gitblit/wicket/pages/MarkdownPage.html +++ b/src/com/gitblit/wicket/pages/MarkdownPage.html @@ -6,16 +6,14 @@ <!-- contribute markdown css to the page header --> <wicket:head> - <wicket:link> - <link href="/com/gitblit/wicket/resources/markdown.css" type="text/css" rel="stylesheet" /> - </wicket:link> + <link href="markdown.css" type="text/css" rel="stylesheet" /> </wicket:head> <body> <wicket:extend> <!-- markdown nav links --> <div class="page_nav2"> - <span wicket:id="blameLink">[blame link]</span> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> + <a wicket:id="blameLink"><wicket:message key="gb.blame"></wicket:message></a> | <a wicket:id="historyLink"><wicket:message key="gb.history"></wicket:message></a> | <a wicket:id="rawLink"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="headLink"><wicket:message key="gb.head"></wicket:message></a> </div> <!-- markdown content --> diff --git a/src/com/gitblit/wicket/pages/MarkdownPage.java b/src/com/gitblit/wicket/pages/MarkdownPage.java index 9202fb8..aaf12ba 100644 --- a/src/com/gitblit/wicket/pages/MarkdownPage.java +++ b/src/com/gitblit/wicket/pages/MarkdownPage.java @@ -39,7 +39,8 @@ RevCommit commit = JGitUtils.getCommit(r, objectId); // markdown page links - add(new Label("blameLink", getString("gb.blame"))); + add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class, + WicketUtils.newPathParameter(repositoryName, objectId, markdownPath))); add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, markdownPath))); add(new BookmarkablePageLink<Void>("rawLink", RawPage.class, WicketUtils.newPathParameter( diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.html b/src/com/gitblit/wicket/pages/RepositoriesPage.html index da91cb2..c8ab597 100644 --- a/src/com/gitblit/wicket/pages/RepositoriesPage.html +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.html @@ -4,9 +4,7 @@ xml:lang="en" lang="en"> <wicket:head> - <wicket:link> - <link href="/com/gitblit/wicket/resources/markdown.css" type="text/css" rel="stylesheet" /> - </wicket:link> + <link href="markdown.css" type="text/css" rel="stylesheet" /> </wicket:head> <body> diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java index b0e5e57..f97adff 100644 --- a/src/com/gitblit/wicket/pages/RepositoriesPage.java +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java @@ -86,7 +86,7 @@ message = MarkdownUtils.transformMarkdown(reader); } catch (Throwable t) { message = "Failed to read " + file; - error(message, t, false); + warn(message, t); } } else { message = messageSource + " is not a valid file."; diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.html b/src/com/gitblit/wicket/pages/RepositoryPage.html index cff7d06..e793a1e 100644 --- a/src/com/gitblit/wicket/pages/RepositoryPage.html +++ b/src/com/gitblit/wicket/pages/RepositoryPage.html @@ -19,7 +19,7 @@ <!-- page nav links --> <div class="page_nav"> <a style="text-decoration: none;" wicket:id="syndication"> - <img style="border:0px;vertical-align:middle;" src="/com/gitblit/wicket/resources/feed_16x16.png"></img> + <img style="border:0px;vertical-align:middle;" src="feed_16x16.png"></img> </a> <a wicket:id="summary"><wicket:message key="gb.summary"></wicket:message></a> | <a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="branches"><wicket:message key="gb.branches"></wicket:message></a> | <a wicket:id="tags"><wicket:message key="gb.tags"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span> </div> diff --git a/src/com/gitblit/wicket/pages/RepositoryPage.java b/src/com/gitblit/wicket/pages/RepositoryPage.java index cf14ee1..00ed755 100644 --- a/src/com/gitblit/wicket/pages/RepositoryPage.java +++ b/src/com/gitblit/wicket/pages/RepositoryPage.java @@ -40,8 +40,6 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.gitblit.GitBlit; import com.gitblit.Keys; @@ -65,20 +63,19 @@ private RepositoryModel m; - private final Logger logger = LoggerFactory.getLogger(RepositoryPage.class); - - private final Map<String, String> knownPages = new HashMap<String, String>() { + private final Map<String, PageRegistration> registeredPages = new HashMap<String, PageRegistration>() { private static final long serialVersionUID = 1L; { - put("summary", "gb.summary"); - put("log", "gb.log"); - put("branches", "gb.branches"); - put("tags", "gb.tags"); - put("tree", "gb.tree"); - put("tickets", "gb.tickets"); - put("edit", "gb.edit"); + put("summary", new PageRegistration("gb.summary", SummaryPage.class)); + put("log", new PageRegistration("gb.log", LogPage.class)); + put("branches", new PageRegistration("gb.branches", BranchesPage.class)); + put("tags", new PageRegistration("gb.tags", TagsPage.class)); + put("tree", new PageRegistration("gb.tree", TreePage.class)); + put("tickets", new PageRegistration("gb.tickets", TicketsPage.class)); + put("edit", new PageRegistration("gb.edit", EditRepositoryPage.class)); + put("docs", new PageRegistration("gb.docs", DocsPage.class)); } }; @@ -95,26 +92,17 @@ RepositoryModel model = getRepositoryModel(); // standard page links - add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, - WicketUtils.newRepositoryParameter(repositoryName))); - add(new BookmarkablePageLink<Void>("log", LogPage.class, - WicketUtils.newRepositoryParameter(repositoryName))); - add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, - WicketUtils.newRepositoryParameter(repositoryName))); - add(new BookmarkablePageLink<Void>("tags", TagsPage.class, - WicketUtils.newRepositoryParameter(repositoryName))); - add(new BookmarkablePageLink<Void>("tree", TreePage.class, - WicketUtils.newRepositoryParameter(repositoryName))); + addRegisteredPageLink("summary"); + addRegisteredPageLink("log"); + addRegisteredPageLink("branches"); + addRegisteredPageLink("tags"); + addRegisteredPageLink("tree"); // per-repository extra page links List<String> extraPageLinks = new ArrayList<String>(); - - // Conditionally add tickets link if (model.useTickets && TicgitUtils.getTicketsBranch(r) != null) { extraPageLinks.add("tickets"); } - - // Conditionally add docs link if (model.useDocs) { extraPageLinks.add("docs"); } @@ -135,26 +123,19 @@ extraPageLinks.add("edit"); } + final String pageName = getPageName(); + final String pageWicketId = getLinkWicketId(pageName); ListDataProvider<String> extrasDp = new ListDataProvider<String>(extraPageLinks); DataView<String> extrasView = new DataView<String>("extra", extrasDp) { private static final long serialVersionUID = 1L; public void populateItem(final Item<String> item) { String extra = item.getModelObject(); - if (extra.equals("tickets")) { - item.add(new Label("extraSeparator", " | ")); - item.add(new LinkPanel("extraLink", null, getString("gb.tickets"), - TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName))); - } else if (extra.equals("docs")) { - item.add(new Label("extraSeparator", " | ")); - item.add(new LinkPanel("extraLink", null, getString("gb.docs"), DocsPage.class, - WicketUtils.newRepositoryParameter(repositoryName))); - } else if (extra.equals("edit")) { - item.add(new Label("extraSeparator", " | ")); - item.add(new LinkPanel("extraLink", null, getString("gb.edit"), - EditRepositoryPage.class, WicketUtils - .newRepositoryParameter(repositoryName))); - } + PageRegistration pageReg = registeredPages.get(extra); + item.add(new Label("extraSeparator", " | ")); + item.add(new LinkPanel("extraLink", null, getString(pageReg.translationKey), + pageReg.pageClass, WicketUtils.newRepositoryParameter(repositoryName)) + .setEnabled(!extra.equals(pageWicketId))); } }; add(extrasView); @@ -163,7 +144,7 @@ .getRelativePathPrefixToContextRoot(), repositoryName, null, 0))); // disable current page - disablePageLink(getPageName()); + disableRegisteredPageLink(pageName); // add floating search form SearchForm searchForm = new SearchForm("searchForm", repositoryName); @@ -174,18 +155,31 @@ setStatelessHint(true); } - public void disablePageLink(String pageName) { - for (String wicketId : knownPages.keySet()) { - String key = knownPages.get(wicketId); + public String getLinkWicketId(String pageName) { + for (String wicketId : registeredPages.keySet()) { + String key = registeredPages.get(wicketId).translationKey; String linkName = getString(key); if (linkName.equals(pageName)) { - Component c = get(wicketId); - if (c != null) { - c.setEnabled(false); - } - break; + return wicketId; } } + return null; + } + + public void disableRegisteredPageLink(String pageName) { + String wicketId = getLinkWicketId(pageName); + if (!StringUtils.isEmpty(wicketId)) { + Component c = get(wicketId); + if (c != null) { + c.setEnabled(false); + } + } + } + + private void addRegisteredPageLink(String key) { + PageRegistration pageReg = registeredPages.get(key); + add(new BookmarkablePageLink<Void>(key, pageReg.pageClass, + WicketUtils.newRepositoryParameter(repositoryName))); } protected void addSyndicationDiscoveryLink() { @@ -339,6 +333,16 @@ return WicketUtils.newPathParameter(repositoryName, objectId, path); } + private static class PageRegistration { + final String translationKey; + final Class<? extends BasePage> pageClass; + + PageRegistration(String translationKey, Class<? extends BasePage> pageClass) { + this.translationKey = translationKey; + this.pageClass = pageClass; + } + } + private static class SearchForm extends StatelessForm<Void> { private static final long serialVersionUID = 1L; diff --git a/src/com/gitblit/wicket/pages/SummaryPage.html b/src/com/gitblit/wicket/pages/SummaryPage.html index 7784a47..bbf8979 100644 --- a/src/com/gitblit/wicket/pages/SummaryPage.html +++ b/src/com/gitblit/wicket/pages/SummaryPage.html @@ -5,9 +5,7 @@ lang="en"> <wicket:head> - <wicket:link> - <link href="/com/gitblit/wicket/resources/markdown.css" type="text/css" rel="stylesheet" /> - </wicket:link> + <link href="markdown.css" type="text/css" rel="stylesheet" /> </wicket:head> <body> diff --git a/src/com/gitblit/wicket/pages/SummaryPage.java b/src/com/gitblit/wicket/pages/SummaryPage.java index 0d0db86..e31375c 100644 --- a/src/com/gitblit/wicket/pages/SummaryPage.java +++ b/src/com/gitblit/wicket/pages/SummaryPage.java @@ -122,7 +122,7 @@ } StringBuilder sb = new StringBuilder(); sb.append(WicketUtils.getHostURL(getRequestCycle().getRequest())); - sb.append(Constants.GIT_SERVLET_PATH); + sb.append(Constants.GIT_PATH); sb.append(repositoryName); repositoryUrls.add(sb.toString()); } else { diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.html b/src/com/gitblit/wicket/panels/RepositoriesPanel.html index 1e609e1..7e090e8 100644 --- a/src/com/gitblit/wicket/panels/RepositoriesPanel.html +++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.html @@ -21,9 +21,7 @@ <wicket:fragment wicket:id="adminLinks"> <!-- page nav links --> <div class="admin_nav"> - <wicket:link> - <img style="vertical-align: top;" src="/com/gitblit/wicket/resources/add_16x16.png"/> - </wicket:link> + <img style="vertical-align: top;" src="add_16x16.png"/> <a wicket:id="newRepository"> <wicket:message key="gb.newRepository"></wicket:message> </a> @@ -41,9 +39,7 @@ <wicket:fragment wicket:id="flatRepositoryHeader"> <tr> <th class="left" wicket:id="orderByRepository"> - <wicket:link> - <img style="vertical-align: top; border: 1px solid #888;" src="/com/gitblit/wicket/resources/gitweb-favicon.png"/> - </wicket:link> + <img style="vertical-align: top; border: 1px solid #888;" src="gitweb-favicon.png"/> <wicket:message key="gb.repository">Repository</wicket:message> </th> <th wicket:id="orderByDescription"><wicket:message key="gb.description">Description</wicket:message></th> @@ -57,9 +53,7 @@ <wicket:fragment wicket:id="groupRepositoryHeader"> <tr> <th class="left"> - <wicket:link> - <img style="vertical-align: top; border: 1px solid #888;" src="/com/gitblit/wicket/resources/gitweb-favicon.png"/> - </wicket:link> + <img style="vertical-align: top; border: 1px solid #888;" src="gitweb-favicon.png"/> <wicket:message key="gb.repository">Repository</wicket:message> </th> <th><wicket:message key="gb.description">Description</wicket:message></th> @@ -83,7 +77,7 @@ <td class="rightAlign"> <span wicket:id="repositoryLinks"></span> <a style="text-decoration: none;" wicket:id="syndication"> - <img style="border:0px;vertical-align:middle;" src="/com/gitblit/wicket/resources/feed_16x16.png"></img> + <img style="border:0px;vertical-align:middle;" src="feed_16x16.png"></img> </a> </td> </wicket:fragment> diff --git a/src/com/gitblit/wicket/panels/SearchPanel.html b/src/com/gitblit/wicket/panels/SearchPanel.html index 7c8f96f..bfbcb6b 100644 --- a/src/com/gitblit/wicket/panels/SearchPanel.html +++ b/src/com/gitblit/wicket/panels/SearchPanel.html @@ -8,8 +8,10 @@ <wicket:panel> <!-- header --> - <div class="header" wicket:id="header">[search header]</div> + <div wicket:id="commitHeader">[search header]</div> + <!-- header --> + <div style="margin-top:10px;font-weight:bold;" class="header"><wicket:message key="gb.search"></wicket:message>: <span wicket:id="searchString">[search string]</span> (<span wicket:id="searchType">[search type]</span>)</div> <table class="pretty"> <tbody> <tr wicket:id="commit"> diff --git a/src/com/gitblit/wicket/panels/SearchPanel.java b/src/com/gitblit/wicket/panels/SearchPanel.java index 5f82a42..759040e 100644 --- a/src/com/gitblit/wicket/panels/SearchPanel.java +++ b/src/com/gitblit/wicket/panels/SearchPanel.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; @@ -72,9 +73,10 @@ hasMore = commits.size() >= itemsPerPage; // header - add(new LinkPanel("header", "title", commit == null ? "" : commit.getShortMessage(), - CommitPage.class, WicketUtils.newObjectParameter(repositoryName, - commit == null ? "" : commit.getName()))); + add(new CommitHeaderPanel("commitHeader", repositoryName, commit)); + + add(new Label("searchString", value)); + add(new Label("searchType", searchType.toString())); ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits); DataView<RevCommit> searchView = new DataView<RevCommit>("commit", dp) { diff --git a/src/com/gitblit/wicket/panels/UsersPanel.html b/src/com/gitblit/wicket/panels/UsersPanel.html index 39074b2..eed2a88 100644 --- a/src/com/gitblit/wicket/panels/UsersPanel.html +++ b/src/com/gitblit/wicket/panels/UsersPanel.html @@ -12,9 +12,7 @@ <table class="repositories"> <tr> <th class="left"> - <wicket:link> - <img style="vertical-align: top; border: 1px solid #888; background-color: white;" src="/com/gitblit/wicket/resources/user_16x16.png"/> - </wicket:link> + <img style="vertical-align: top; border: 1px solid #888; background-color: white;" src="user_16x16.png"/> <wicket:message key="gb.username">[username]</wicket:message> </th> <th class="right"></th> @@ -30,9 +28,7 @@ <wicket:fragment wicket:id="adminLinks"> <!-- page nav links --> <div class="admin_nav"> - <wicket:link> - <img style="vertical-align: top;" src="/com/gitblit/wicket/resources/add_16x16.png"/> - </wicket:link> + <img style="vertical-align: top;" src="add_16x16.png"/> <a wicket:id="newUser"> <wicket:message key="gb.newUser"></wicket:message> </a> diff --git a/src/com/gitblit/wicket/resources/gitblt-favicon.png b/src/com/gitblit/wicket/resources/gitblt-favicon.png deleted file mode 100644 index f6ac154..0000000 --- a/src/com/gitblit/wicket/resources/gitblt-favicon.png +++ /dev/null Binary files differ diff --git a/src/log4j.properties b/src/log4j.properties index 16f1236..dc6dd2b 100644 --- a/src/log4j.properties +++ b/src/log4j.properties @@ -1,12 +1,66 @@ -log4j.debug=false +#------------------------------------------------------------------------------ +# +# The following properties set the logging levels and log appender. The +# log4j.rootCategory variable defines the default log level and one or more +# appenders. For the console, use 'S'. For the daily rolling file, use 'R'. +# For an HTML formatted log, use 'H'. +# +# To override the default (rootCategory) log level, define a property of the +# form (see below for available values): +# +# log4j.logger. = +# +# Available logger names: +# TODO +# +# Possible Log Levels: +# FATAL, ERROR, WARN, INFO, DEBUG +# +#------------------------------------------------------------------------------ +log4j.rootCategory=INFO, S -log4j.rootLogger=INFO -log4j.logger.org=INFO -log4j.logger.com=INFO -log4j.logger.net=INFO +#log4j.rootLogger=INFO +#log4j.logger.org=INFO +#log4j.logger.com=INFO +#log4j.logger.net=INFO -log4j.logger.com.gitblit=DEBUG +#log4j.logger.com.gitblit=DEBUG log4j.logger.org.apache.wicket=INFO log4j.logger.org.apache.wicket.RequestListenerInterface=WARN log4j.logger.org.apache.wicket.protocol.http.HttpSessionStore=WARN + +#------------------------------------------------------------------------------ +# +# The following properties configure the console (stdout) appender. +# See http://logging.apache.org/log4j/docs/api/index.html for details. +# +#------------------------------------------------------------------------------ +log4j.appender.S = org.apache.log4j.ConsoleAppender +log4j.appender.S.layout = org.apache.log4j.PatternLayout +log4j.appender.S.layout.ConversionPattern = %-5p %m%n + +#------------------------------------------------------------------------------ +# +# The following properties configure the Daily Rolling File appender. +# See http://logging.apache.org/log4j/docs/api/index.html for details. +# +#------------------------------------------------------------------------------ +log4j.appender.R = org.apache.log4j.DailyRollingFileAppender +log4j.appender.R.File = logs/gitblit.log +log4j.appender.R.Append = true +log4j.appender.R.DatePattern = '.'yyy-MM-dd +log4j.appender.R.layout = org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n + +#------------------------------------------------------------------------------ +# +# The following properties configure the Rolling File appender in HTML. +# See http://logging.apache.org/log4j/docs/api/index.html for details. +# +#------------------------------------------------------------------------------ +log4j.appender.H = org.apache.log4j.RollingFileAppender +log4j.appender.H.File = logs/gitblit.html +log4j.appender.H.MaxFileSize = 100KB +log4j.appender.H.Append = false +log4j.appender.H.layout = org.apache.log4j.HTMLLayout -- Gitblit v1.9.1