Imported Upstream version 0.16
Andrew Caudwell
14 years ago
56 | 56 | |
57 | 57 | --stop-on-idle |
58 | 58 | Stop on break in activity. May be combined with --stop-position. |
59 | ||
59 | ||
60 | 60 | -a, --auto-skip-seconds SECONDS |
61 | 61 | Automatically skip to next entry if nothing happens for a specified number of seconds. |
62 | 62 | |
63 | 63 | -s, --seconds-per-day SECONDS |
64 | 64 | Speed of simulation in seconds per day. |
65 | 65 | |
66 | --realtime | |
67 | Realtime playback speed. | |
68 | ||
66 | 69 | -i, --file-idle-time SECONDS |
67 | 70 | Time in seconds files remain idle before they are removed. |
68 | 71 | |
75 | 78 | --loop |
76 | 79 | Loop back to the start of the log when the end is reached. |
77 | 80 | |
81 | --date-format FORMAT | |
82 | Specify display date string (strftime format). | |
83 | ||
78 | 84 | --log-format FORMAT |
79 | 85 | Specify format of the log being read (git,cvs,custom). Required when reading STDIN. |
80 | 86 | |
129 | 135 | --user-friction SECONDS |
130 | 136 | Time users come to a complete hault. |
131 | 137 | |
138 | --user-scale SCALE | |
139 | Change scale of users. | |
140 | ||
132 | 141 | --hide-users |
133 | 142 | Hide users. |
134 | 143 | |
137 | 146 | |
138 | 147 | --hide-filenames |
139 | 148 | Hide filenames. |
149 | ||
150 | --hide-dirnames | |
151 | Hide directory names. | |
140 | 152 | |
141 | 153 | --hide-date |
142 | 154 | Hide the date. |
172 | 184 | |
173 | 185 | CVS Support: |
174 | 186 | |
175 | You can view CVS projects with gource using the tool cvs-exp (not provided) with the command line specified by the | |
176 | --cvs-exp-command option: | |
187 | You can view a CVS project with gource using the tool cvs-exp (http://www.cs.rice.edu/~ssiyer/code/cvs-exp/) with the | |
188 | command line specified by the --cvs-exp-command option: | |
177 | 189 | |
178 | 190 | cd my-cvs-project |
179 | 191 | `gource --cvs-exp-command` > my-cvs-project.log |
180 | 192 | gource my-cvs-project.log |
181 | 193 | |
182 | SVN Support via Git: | |
183 | ||
184 | SVN is not supported directly, however you could can import your project into a Git repository using the 'git svn' command. | |
185 | ||
186 | The below insturctions will work if your SVN repository has the standard three directories - trunk, tags and branches | |
187 | (Otherwise, see the 'git svn' documentation): | |
188 | ||
189 | git svn init --stdlayout https://myrepo.example.org/svn my-repo.git | |
190 | cd my-repo.git | |
191 | git svn fetch | |
192 | ||
193 | Note that the last command (git svn fetch) can take hours if your repository is large. | |
194 | ||
195 | You can pull new changes into the Git copy of your SVN repository at any time using the following command: | |
196 | ||
197 | git svn rebase | |
198 | ||
199 | Support for Other Systems: | |
200 | ||
201 | Please check the Gource homepage to see guides for other systems that can be used with Gource, or try using the custom log format. | |
194 | Other Version Control Systems: | |
195 | ||
196 | Visit the Gource homepage for guides and examples of using Gource with other version control systems: | |
197 | ||
198 | SVN - http://code.google.com/p/gource/wiki/SVN | |
199 | Mercurial - http://code.google.com/p/gource/wiki/Mercurial | |
202 | 200 | |
203 | 201 | Custom Log Format: |
204 | 202 | |
213 | 211 | Recording Videos: |
214 | 212 | |
215 | 213 | You can create a video of Gource using the --output-ppm-stream option. This creates an uncompressed sequence of |
216 | screenshots in PPM format which can then be processed by another program (such as ffmpeg) to produce a video file: | |
214 | screenshots in PPM format which can then be processed by another program (such as ffmpeg) to produce a video file. | |
217 | 215 | |
218 | 216 | The below command line will create a video at 60fps in h264 format (assumes you have ffmpeg with h264 support): |
219 | 217 | |
270 | 268 | |
271 | 269 | 6. Changes |
272 | 270 | ========== |
271 | ||
272 | 0.16: | |
273 | * Added --hide-dirnames option. | |
274 | * Added --user-scale option. | |
275 | * Added --date-format option (Pat Notz). | |
276 | * Fix bug when encountering long log lines. | |
277 | * Fixed incorrect parsing of trivial merges. | |
278 | * Fixed building issues on OSX. | |
273 | 279 | |
274 | 280 | 0.15: |
275 | 281 | * Added PPM output support for creating videos (Johannes Schindelin). |
653 | 653 | build_alias |
654 | 654 | host_alias |
655 | 655 | target_alias |
656 | build | |
657 | build_cpu | |
658 | build_vendor | |
659 | build_os | |
660 | host | |
661 | host_cpu | |
662 | host_vendor | |
663 | host_os | |
656 | 664 | CXX |
657 | 665 | CXXFLAGS |
658 | 666 | LDFLAGS |
667 | 675 | GREP |
668 | 676 | EGREP |
669 | 677 | LIBOBJS |
670 | build | |
671 | build_cpu | |
672 | build_vendor | |
673 | build_os | |
674 | host | |
675 | host_cpu | |
676 | host_vendor | |
677 | host_os | |
678 | 678 | XMKMF |
679 | 679 | SED |
680 | 680 | acx_pthread_config |
1759 | 1759 | |
1760 | 1760 | |
1761 | 1761 | |
1762 | ac_aux_dir= | |
1763 | for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do | |
1764 | if test -f "$ac_dir/install-sh"; then | |
1765 | ac_aux_dir=$ac_dir | |
1766 | ac_install_sh="$ac_aux_dir/install-sh -c" | |
1767 | break | |
1768 | elif test -f "$ac_dir/install.sh"; then | |
1769 | ac_aux_dir=$ac_dir | |
1770 | ac_install_sh="$ac_aux_dir/install.sh -c" | |
1771 | break | |
1772 | elif test -f "$ac_dir/shtool"; then | |
1773 | ac_aux_dir=$ac_dir | |
1774 | ac_install_sh="$ac_aux_dir/shtool install -c" | |
1775 | break | |
1776 | fi | |
1777 | done | |
1778 | if test -z "$ac_aux_dir"; then | |
1779 | { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 | |
1780 | echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} | |
1781 | { (exit 1); exit 1; }; } | |
1782 | fi | |
1783 | ||
1784 | # These three variables are undocumented and unsupported, | |
1785 | # and are intended to be withdrawn in a future Autoconf release. | |
1786 | # They can cause serious problems if a builder's source tree is in a directory | |
1787 | # whose full name contains unusual characters. | |
1788 | ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. | |
1789 | ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. | |
1790 | ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. | |
1791 | ||
1792 | ||
1793 | # Make sure we can run config.sub. | |
1794 | $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || | |
1795 | { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 | |
1796 | echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} | |
1797 | { (exit 1); exit 1; }; } | |
1798 | ||
1799 | { echo "$as_me:$LINENO: checking build system type" >&5 | |
1800 | echo $ECHO_N "checking build system type... $ECHO_C" >&6; } | |
1801 | if test "${ac_cv_build+set}" = set; then | |
1802 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
1803 | else | |
1804 | ac_build_alias=$build_alias | |
1805 | test "x$ac_build_alias" = x && | |
1806 | ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` | |
1807 | test "x$ac_build_alias" = x && | |
1808 | { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 | |
1809 | echo "$as_me: error: cannot guess build type; you must specify one" >&2;} | |
1810 | { (exit 1); exit 1; }; } | |
1811 | ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || | |
1812 | { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 | |
1813 | echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} | |
1814 | { (exit 1); exit 1; }; } | |
1815 | ||
1816 | fi | |
1817 | { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 | |
1818 | echo "${ECHO_T}$ac_cv_build" >&6; } | |
1819 | case $ac_cv_build in | |
1820 | *-*-*) ;; | |
1821 | *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 | |
1822 | echo "$as_me: error: invalid value of canonical build" >&2;} | |
1823 | { (exit 1); exit 1; }; };; | |
1824 | esac | |
1825 | build=$ac_cv_build | |
1826 | ac_save_IFS=$IFS; IFS='-' | |
1827 | set x $ac_cv_build | |
1828 | shift | |
1829 | build_cpu=$1 | |
1830 | build_vendor=$2 | |
1831 | shift; shift | |
1832 | # Remember, the first character of IFS is used to create $*, | |
1833 | # except with old shells: | |
1834 | build_os=$* | |
1835 | IFS=$ac_save_IFS | |
1836 | case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac | |
1837 | ||
1838 | ||
1839 | { echo "$as_me:$LINENO: checking host system type" >&5 | |
1840 | echo $ECHO_N "checking host system type... $ECHO_C" >&6; } | |
1841 | if test "${ac_cv_host+set}" = set; then | |
1842 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
1843 | else | |
1844 | if test "x$host_alias" = x; then | |
1845 | ac_cv_host=$ac_cv_build | |
1846 | else | |
1847 | ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || | |
1848 | { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 | |
1849 | echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} | |
1850 | { (exit 1); exit 1; }; } | |
1851 | fi | |
1852 | ||
1853 | fi | |
1854 | { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 | |
1855 | echo "${ECHO_T}$ac_cv_host" >&6; } | |
1856 | case $ac_cv_host in | |
1857 | *-*-*) ;; | |
1858 | *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 | |
1859 | echo "$as_me: error: invalid value of canonical host" >&2;} | |
1860 | { (exit 1); exit 1; }; };; | |
1861 | esac | |
1862 | host=$ac_cv_host | |
1863 | ac_save_IFS=$IFS; IFS='-' | |
1864 | set x $ac_cv_host | |
1865 | shift | |
1866 | host_cpu=$1 | |
1867 | host_vendor=$2 | |
1868 | shift; shift | |
1869 | # Remember, the first character of IFS is used to create $*, | |
1870 | # except with old shells: | |
1871 | host_os=$* | |
1872 | IFS=$ac_save_IFS | |
1873 | case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac | |
1874 | ||
1875 | ||
1876 | ||
1762 | 1877 | # Checks for programs. |
1763 | 1878 | ac_ext=cpp |
1764 | 1879 | ac_cpp='$CXXCPP $CPPFLAGS' |
5753 | 5868 | done |
5754 | 5869 | |
5755 | 5870 | |
5871 | #Disable X11 on Macs unless required | |
5872 | if test "$with_x" != yes; then | |
5873 | ||
5874 | case "$host_os" in | |
5875 | darwin*) | |
5876 | with_x="no" | |
5877 | ;; | |
5878 | esac | |
5879 | ||
5880 | fi | |
5881 | ||
5882 | ||
5756 | 5883 | #GL |
5757 | ac_aux_dir= | |
5758 | for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do | |
5759 | if test -f "$ac_dir/install-sh"; then | |
5760 | ac_aux_dir=$ac_dir | |
5761 | ac_install_sh="$ac_aux_dir/install-sh -c" | |
5762 | break | |
5763 | elif test -f "$ac_dir/install.sh"; then | |
5764 | ac_aux_dir=$ac_dir | |
5765 | ac_install_sh="$ac_aux_dir/install.sh -c" | |
5766 | break | |
5767 | elif test -f "$ac_dir/shtool"; then | |
5768 | ac_aux_dir=$ac_dir | |
5769 | ac_install_sh="$ac_aux_dir/shtool install -c" | |
5770 | break | |
5771 | fi | |
5772 | done | |
5773 | if test -z "$ac_aux_dir"; then | |
5774 | { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 | |
5775 | echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} | |
5776 | { (exit 1); exit 1; }; } | |
5777 | fi | |
5778 | ||
5779 | # These three variables are undocumented and unsupported, | |
5780 | # and are intended to be withdrawn in a future Autoconf release. | |
5781 | # They can cause serious problems if a builder's source tree is in a directory | |
5782 | # whose full name contains unusual characters. | |
5783 | ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. | |
5784 | ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. | |
5785 | ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. | |
5786 | ||
5787 | ||
5788 | # Make sure we can run config.sub. | |
5789 | $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || | |
5790 | { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 | |
5791 | echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} | |
5792 | { (exit 1); exit 1; }; } | |
5793 | ||
5794 | { echo "$as_me:$LINENO: checking build system type" >&5 | |
5795 | echo $ECHO_N "checking build system type... $ECHO_C" >&6; } | |
5796 | if test "${ac_cv_build+set}" = set; then | |
5797 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5798 | else | |
5799 | ac_build_alias=$build_alias | |
5800 | test "x$ac_build_alias" = x && | |
5801 | ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` | |
5802 | test "x$ac_build_alias" = x && | |
5803 | { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 | |
5804 | echo "$as_me: error: cannot guess build type; you must specify one" >&2;} | |
5805 | { (exit 1); exit 1; }; } | |
5806 | ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || | |
5807 | { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 | |
5808 | echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} | |
5809 | { (exit 1); exit 1; }; } | |
5810 | ||
5811 | fi | |
5812 | { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 | |
5813 | echo "${ECHO_T}$ac_cv_build" >&6; } | |
5814 | case $ac_cv_build in | |
5815 | *-*-*) ;; | |
5816 | *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 | |
5817 | echo "$as_me: error: invalid value of canonical build" >&2;} | |
5818 | { (exit 1); exit 1; }; };; | |
5819 | esac | |
5820 | build=$ac_cv_build | |
5821 | ac_save_IFS=$IFS; IFS='-' | |
5822 | set x $ac_cv_build | |
5823 | shift | |
5824 | build_cpu=$1 | |
5825 | build_vendor=$2 | |
5826 | shift; shift | |
5827 | # Remember, the first character of IFS is used to create $*, | |
5828 | # except with old shells: | |
5829 | build_os=$* | |
5830 | IFS=$ac_save_IFS | |
5831 | case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac | |
5832 | ||
5833 | ||
5834 | { echo "$as_me:$LINENO: checking host system type" >&5 | |
5835 | echo $ECHO_N "checking host system type... $ECHO_C" >&6; } | |
5836 | if test "${ac_cv_host+set}" = set; then | |
5837 | echo $ECHO_N "(cached) $ECHO_C" >&6 | |
5838 | else | |
5839 | if test "x$host_alias" = x; then | |
5840 | ac_cv_host=$ac_cv_build | |
5841 | else | |
5842 | ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || | |
5843 | { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 | |
5844 | echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} | |
5845 | { (exit 1); exit 1; }; } | |
5846 | fi | |
5847 | ||
5848 | fi | |
5849 | { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 | |
5850 | echo "${ECHO_T}$ac_cv_host" >&6; } | |
5851 | case $ac_cv_host in | |
5852 | *-*-*) ;; | |
5853 | *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 | |
5854 | echo "$as_me: error: invalid value of canonical host" >&2;} | |
5855 | { (exit 1); exit 1; }; };; | |
5856 | esac | |
5857 | host=$ac_cv_host | |
5858 | ac_save_IFS=$IFS; IFS='-' | |
5859 | set x $ac_cv_host | |
5860 | shift | |
5861 | host_cpu=$1 | |
5862 | host_vendor=$2 | |
5863 | shift; shift | |
5864 | # Remember, the first character of IFS is used to create $*, | |
5865 | # except with old shells: | |
5866 | host_os=$* | |
5867 | IFS=$ac_save_IFS | |
5868 | case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac | |
5869 | ||
5870 | ||
5871 | 5884 | { echo "$as_me:$LINENO: checking for X" >&5 |
5872 | 5885 | echo $ECHO_N "checking for X... $ECHO_C" >&6; } |
5873 | 5886 | |
8641 | 8654 | |
8642 | 8655 | |
8643 | 8656 | #SDL_image library with PNG support |
8644 | ||
8645 | 8657 | { echo "$as_me:$LINENO: checking for IMG_LoadPNG_RW in -lSDL_image" >&5 |
8646 | 8658 | echo $ECHO_N "checking for IMG_LoadPNG_RW in -lSDL_image... $ECHO_C" >&6; } |
8647 | 8659 | if test "${ac_cv_lib_SDL_image_IMG_LoadPNG_RW+set}" = set; then |
8704 | 8716 | { echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_image_IMG_LoadPNG_RW" >&5 |
8705 | 8717 | echo "${ECHO_T}$ac_cv_lib_SDL_image_IMG_LoadPNG_RW" >&6; } |
8706 | 8718 | if test $ac_cv_lib_SDL_image_IMG_LoadPNG_RW = yes; then |
8707 | cat >>confdefs.h <<_ACEOF | |
8708 | #define HAVE_LIBSDL_IMAGE 1 | |
8709 | _ACEOF | |
8710 | ||
8711 | LIBS="-lSDL_image $LIBS" | |
8712 | ||
8719 | LIBS="$LIBS -lSDL_image" | |
8713 | 8720 | else |
8714 | 8721 | { { echo "$as_me:$LINENO: error: SDL_image required. Please see README" >&5 |
8715 | 8722 | echo "$as_me: error: SDL_image required. Please see README" >&2;} |
10031 | 10038 | build_alias!$build_alias$ac_delim |
10032 | 10039 | host_alias!$host_alias$ac_delim |
10033 | 10040 | target_alias!$target_alias$ac_delim |
10041 | build!$build$ac_delim | |
10042 | build_cpu!$build_cpu$ac_delim | |
10043 | build_vendor!$build_vendor$ac_delim | |
10044 | build_os!$build_os$ac_delim | |
10045 | host!$host$ac_delim | |
10046 | host_cpu!$host_cpu$ac_delim | |
10047 | host_vendor!$host_vendor$ac_delim | |
10048 | host_os!$host_os$ac_delim | |
10034 | 10049 | CXX!$CXX$ac_delim |
10035 | 10050 | CXXFLAGS!$CXXFLAGS$ac_delim |
10036 | 10051 | LDFLAGS!$LDFLAGS$ac_delim |
10045 | 10060 | GREP!$GREP$ac_delim |
10046 | 10061 | EGREP!$EGREP$ac_delim |
10047 | 10062 | LIBOBJS!$LIBOBJS$ac_delim |
10048 | build!$build$ac_delim | |
10049 | build_cpu!$build_cpu$ac_delim | |
10050 | build_vendor!$build_vendor$ac_delim | |
10051 | build_os!$build_os$ac_delim | |
10052 | host!$host$ac_delim | |
10053 | host_cpu!$host_cpu$ac_delim | |
10054 | host_vendor!$host_vendor$ac_delim | |
10055 | host_os!$host_os$ac_delim | |
10056 | 10063 | XMKMF!$XMKMF$ac_delim |
10057 | 10064 | SED!$SED$ac_delim |
10058 | 10065 | acx_pthread_config!$acx_pthread_config$ac_delim |
4 | 4 | |
5 | 5 | AC_INIT(Gource, 0.1, [acaudwell@gmail.com]) |
6 | 6 | AC_CONFIG_SRCDIR([src/main.h]) |
7 | ||
8 | AC_CANONICAL_HOST | |
7 | 9 | |
8 | 10 | # Checks for programs. |
9 | 11 | AC_PROG_CXX |
27 | 29 | AC_FUNC_STRFTIME |
28 | 30 | AC_FUNC_VPRINTF |
29 | 31 | AC_CHECK_FUNCS([atexit getcwd memset sqrt strchr]) |
32 | ||
33 | #Disable X11 on Macs unless required | |
34 | AS_IF([test "$with_x" != yes], [ | |
35 | case "$host_os" in | |
36 | darwin*) | |
37 | with_x="no" | |
38 | ;; | |
39 | esac | |
40 | ], []) | |
30 | 41 | |
31 | 42 | #GL |
32 | 43 | AX_CHECK_GLU |
62 | 73 | AC_CHECK_LIB(jpeg, jpeg_read_header, , AC_MSG_ERROR([JPEG library required. Please see README])) |
63 | 74 | |
64 | 75 | #SDL_image library with PNG support |
65 | AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([SDL_image required. Please see README])) | |
76 | AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, LIBS="$LIBS -lSDL_image", AC_MSG_ERROR([SDL_image required. Please see README])) | |
66 | 77 | |
67 | 78 | #PCRE |
68 | 79 | AC_CHECK_LIB([pcre], [pcre_compile],, AC_MSG_ERROR(PCRE is required. Please see README)) |
33 | 33 | \fB\-s, \-\-seconds\-per\-day SECONDS\fR |
34 | 34 | Speed of simulation in seconds per day. |
35 | 35 | .TP |
36 | \fB\ \-\-realtime\fR | |
37 | Realtime playback speed. | |
38 | .TP | |
36 | 39 | \fB\-i, \-\-file\-idle\-time SECONDS\fR |
37 | 40 | Time in seconds files remain idle before they are removed. |
38 | 41 | .TP |
45 | 48 | \fB\-\-loop\fR |
46 | 49 | Loop back to the start of the log when the end is reached. |
47 | 50 | .TP |
51 | \fB\-\-date\-format FORMAT\fR | |
52 | Specify display date string (strftime format). | |
53 | .TP | |
48 | 54 | \fB\-\-log\-format FORMAT\fR |
49 | 55 | Specify format of the log being read (git,cvs,custom). Required when reading STDIN. |
50 | 56 | .TP |
99 | 105 | \fB\-\-user\-friction SECONDS\fR |
100 | 106 | Time users come to a complete hault. |
101 | 107 | .TP |
108 | \fB\-\-user\-scale SCALE\fR | |
109 | Change scale of users. | |
110 | .TP | |
102 | 111 | \fB\-\-hide\-users\fR |
103 | 112 | Hide users. |
104 | 113 | .TP |
107 | 116 | .TP |
108 | 117 | \fB\-\-hide\-filenames\fR |
109 | 118 | Hide filenames. |
119 | .TP | |
120 | \fB\-\-hide\-dirnames\fR | |
121 | Hide directory names. | |
110 | 122 | .TP |
111 | 123 | \fB\-\-hide\-date\fR |
112 | 124 | Hide the date. |
144 | 156 | |
145 | 157 | .SH CVS SUPPORT |
146 | 158 | |
147 | You can view CVS projects with gource using the tool cvs-exp (not provided) with the command line specified by the -\-cvs\-exp\-command option: | |
159 | You can view CVS projects with gource using the tool cvs-exp (http://www.cs.rice.edu/~ssiyer/code/cvs\-exp/) with the command line specified by the -\-cvs\-exp\-command option: | |
148 | 160 | |
149 | 161 | .ti 10 |
150 | 162 | cd my\-cvs\-project |
153 | 165 | .ti 10 |
154 | 166 | \fIgource\fR my\-cvs\-project.log |
155 | 167 | |
156 | .SH SVN SUPPORT VIA GIT | |
157 | ||
158 | SVN is not supported directly, however you could can import your project into a Git repository using the 'git svn' command. | |
159 | ||
160 | The below insturctions will work if your SVN repository has the standard three directories - trunk, tags and branches (Otherwise, see the 'git svn' documentation): | |
161 | ||
162 | .ti 10 | |
163 | git svn init \-\-stdlayout https://myrepo.example.org/svn my\-repo.git | |
164 | .ti 10 | |
165 | cd my\-repo.git | |
166 | .ti 10 | |
167 | git svn fetch | |
168 | ||
169 | Note that the last command (git svn fetch) can take hours if your repository is large. | |
170 | ||
171 | You can pull new changes into the Git copy of your SVN repository at any time using the following command: | |
172 | ||
173 | .ti 10 | |
174 | git svn rebase | |
175 | ||
176 | .SH SUPPORT FOR OTHER SYSTEMS | |
177 | ||
178 | Please check the Gource homepage to see guides for other systems that can be used with Gource, or try using the custom log format. | |
168 | .SH OTHER VERSION CONTROL SYSTEMS | |
169 | ||
170 | Visit the Gource homepage for guides and examples of using Gource with other version control systems: | |
171 | ||
172 | .ti 10 | |
173 | SVN - http://code.google.com/p/gource/wiki/SVN | |
174 | .ti 10 | |
175 | Mercurial - http://code.google.com/p/gource/wiki/Mercurial | |
179 | 176 | |
180 | 177 | .SH CUSTOM LOG FORMAT |
181 | 178 | |
194 | 191 | |
195 | 192 | .SH RECORDING VIDEOS |
196 | 193 | You can create a video of Gource using the \-\-output\-ppm\-stream option. This creates an uncompressed sequence of |
197 | screenshots in PPM format which can then be processed by another program (such as ffmpeg) to produce a video file: | |
194 | screenshots in PPM format which can then be processed by another program (such as ffmpeg) to produce a video file. | |
198 | 195 | |
199 | 196 | The below command line will create a video at 60fps in h264 format (assumes you have ffmpeg with h264 support): |
200 | 197 |
80 | 80 | |
81 | 81 | void seekTo(float percent); |
82 | 82 | |
83 | void reset(); | |
84 | ||
85 | 83 | bool checkFormat(); |
86 | 84 | |
87 | 85 | std::string getLogCommand(); |
29 | 29 | |
30 | 30 | #ifndef SDLAPP_SHADER_SUPPORT |
31 | 31 | |
32 | #include <SDL/SDL.h> | |
33 | #include <SDL/SDL_opengl.h> | |
32 | #include "SDL.h" | |
33 | #include "SDL_opengl.h" | |
34 | 34 | |
35 | 35 | #else |
36 | 36 | |
41 | 41 | #include <GL/glew.h> |
42 | 42 | |
43 | 43 | #define NO_SDL_GLEXT |
44 | #include <SDL.h> | |
45 | #include <SDL_opengl.h> | |
44 | #include "SDL.h" | |
45 | #include "SDL_opengl.h" | |
46 | 46 | |
47 | 47 | void setupARBExtensions(); |
48 | 48 |
30 | 30 | #include "display.h" |
31 | 31 | #include "logger.h" |
32 | 32 | |
33 | #include "SDL/SDL.h" | |
34 | 33 | #include <vector> |
35 | 34 | |
36 | 35 | class SDLApp { |
57 | 57 | line = std::string(buff); |
58 | 58 | |
59 | 59 | if(isFinished()) { |
60 | //clear the failbit if only failed because the line was too long | |
61 | if(!stream->bad() && stream->gcount() >= (1024-1)) { | |
62 | stream->clear(); | |
63 | } | |
64 | ||
60 | 65 | return false; |
61 | 66 | } |
62 | 67 | |
155 | 160 | line = std::string(buff); |
156 | 161 | |
157 | 162 | if(buffstream->fail()) { |
163 | //clear the failbit if only failed because the line was too long | |
164 | if(!buffstream->bad() && buffstream->gcount() >= (1024-1)) { | |
165 | buffstream->clear(); | |
166 | } | |
167 | ||
158 | 168 | return false; |
159 | 169 | } |
160 | 170 |
27 | 27 | #ifndef TEXTURE_H |
28 | 28 | #define TEXTURE_H |
29 | 29 | |
30 | #include "SDL_image.h" | |
31 | ||
30 | 32 | #include "resource.h" |
31 | 33 | #include "display.h" |
32 | #include "SDL/SDL_image.h" | |
33 | 34 | |
34 | 35 | class TextureResource : public Resource { |
35 | 36 | int colourFormat(SDL_Surface* surface); |
131 | 131 | |
132 | 132 | std::string line; |
133 | 133 | |
134 | //read author name | |
135 | if(!logf->getNextLine(line)) return false; | |
134 | commit.username = ""; | |
136 | 135 | |
137 | //ensure username prefixed with user: otherwise the log is not in | |
138 | //the expected format and we can try a different format | |
139 | if(line.size() < 6 || line.find("user:") != 0) { | |
140 | return false; | |
136 | while(logf->getNextLine(line) && line.size()) { | |
137 | ||
138 | if(line.find("user:") == 0) { | |
139 | ||
140 | //username follows user prefix | |
141 | commit.username = line.substr(5); | |
142 | ||
143 | if(!logf->getNextLine(line)) return false; | |
144 | ||
145 | commit.timestamp = atol(line.c_str()); | |
146 | ||
147 | //this isnt a commit we are parsing, abort | |
148 | if(commit.timestamp == 0) return false; | |
149 | ||
150 | continue; | |
151 | } | |
152 | ||
153 | //should see username before files | |
154 | if(commit.username.size() == 0) return false; | |
155 | ||
156 | size_t tab = line.find('\t'); | |
157 | ||
158 | //incorrect log format | |
159 | if(tab == std::string::npos || tab == 0 || tab == line.size()-1) continue; | |
160 | ||
161 | std::string status = line.substr(tab - 1, 1); | |
162 | std::string file = line.substr(tab + 1); | |
163 | ||
164 | commit.addFile(file, status); | |
141 | 165 | } |
142 | 166 | |
143 | //username follows user prefix | |
144 | commit.username = line.substr(5); | |
145 | ||
146 | if(!logf->getNextLine(line)) return false; | |
147 | ||
148 | //committer time - used instead of author time (most likely cronological) | |
149 | // NOTE: ignoring timezone ... | |
150 | commit.timestamp = atol(line.c_str()); | |
151 | ||
152 | //this isnt a commit we are parsing, abort | |
153 | if(commit.timestamp == 0) return false; | |
154 | ||
155 | //read files | |
156 | while(logf->getNextLine(line) && line.size()) { | |
157 | size_t tab = line.find('\t'); | |
158 | ||
159 | if(tab == std::string::npos) continue; | |
160 | ||
161 | //incorrect log format | |
162 | if(tab == 0 || tab == line.size()-1) return false; | |
163 | ||
164 | std::string status = line.substr(tab - 1, 1); | |
165 | line = line.substr(tab + 1); | |
166 | commit.addFile(line, status); | |
167 | } | |
168 | ||
169 | //commit.debug(); | |
167 | //check we at least got a username | |
168 | if(commit.username.size()==0) return false; | |
170 | 169 | |
171 | 170 | return true; |
172 | 171 | } |
24 | 24 | bool gGourceQuadTreeDebug = false; |
25 | 25 | |
26 | 26 | std::string gGourceLogFormat; |
27 | std::string gGourceDateFormat("%A, %d %B, %Y %X"); | |
27 | 28 | |
28 | 29 | bool gGourceHighlightAllUsers = false; |
29 | 30 | |
137 | 138 | printf(" -a, --auto-skip-seconds SECONDS Auto skip to next entry if nothing happens\n"); |
138 | 139 | printf(" for a number of seconds (default: 3)\n"); |
139 | 140 | printf(" -s, --seconds-per-day SECONDS Speed in seconds per day (default: 4)\n"); |
141 | printf(" --realtime Realtime playback speed\n"); | |
140 | 142 | printf(" -i, --file-idle-time SECONDS Time files remain idle (default: 60)\n"); |
141 | 143 | printf(" -e, --elasticity FLOAT Elasticity of nodes\n"); |
142 | 144 | printf(" -b, --background FFFFFF Background colour in hex\n\n"); |
145 | 147 | printf(" --default-user-image IMAGE Default user image file\n"); |
146 | 148 | printf(" --colour-images Colourize user images\n\n"); |
147 | 149 | |
148 | printf(" --realtime Realtime playback speed\n\n"); | |
149 | ||
150 | printf(" --loop Loop when the end of the log is reached.\n\n"); | |
150 | printf(" --loop Loop when the end of the log is reached\n\n"); | |
151 | ||
152 | printf(" --date-format FORMAT Specify display date string (strftime format)\n\n"); | |
151 | 153 | |
152 | 154 | printf(" --log-format FORMAT Specify format of log (git,cvs,custom)\n"); |
153 | 155 | printf(" --git-branch Get the git log of a particular branch\n"); |
163 | 165 | printf(" --hide-users Hide users\n"); |
164 | 166 | printf(" --hide-usernames Hide usernames\n"); |
165 | 167 | printf(" --hide-filenames Hide filenames\n"); |
168 | printf(" --hide-dirnames Hide directory names\n"); | |
166 | 169 | printf(" --hide-date Hide the date\n\n"); |
167 | 170 | |
168 | 171 | printf(" --max-files NUMBER Max number of active files (default: 1000)\n"); |
169 | 172 | printf(" --max-file-lag SECONDS Max time files of a commit can take to appear\n\n"); |
170 | 173 | |
171 | 174 | printf(" --max-user-speed UNITS Speed users can travel per second (default: 500)\n\n"); |
172 | printf(" --user-friction SECONDS Time users come to a complete hault (default: 0.67)\n\n"); | |
175 | printf(" --user-friction SECONDS Time users come to a complete hault (default: 0.67)\n"); | |
176 | printf(" --user-scale SCALE Change scale of users (default: 1.0)\n\n"); | |
173 | 177 | |
174 | 178 | printf(" --follow-user USER Camera will automatically follow this user\n"); |
175 | 179 | printf(" --highlight-user USER Highlight the names of a particular user\n"); |
879 | 883 | |
880 | 884 | RCommit commit; |
881 | 885 | |
882 | if(commitlog->nextCommit(commit)) { | |
886 | //ignore blank commits | |
887 | if(commitlog->nextCommit(commit) && commit.files.size() > 0) { | |
883 | 888 | commitqueue.push_back(commit); |
884 | 889 | } |
885 | 890 | } |
1195 | 1200 | char datestr[256]; |
1196 | 1201 | char timestr[256]; |
1197 | 1202 | struct tm* timeinfo = localtime ( &currtime ); |
1198 | strftime(datestr, 256, "%A, %d %B, %Y %X", timeinfo); | |
1203 | ||
1204 | strftime(datestr, 256, gGourceDateFormat.c_str(), timeinfo); | |
1199 | 1205 | displaydate = datestr; |
1200 | 1206 | |
1201 | 1207 | //avoid wobbling by only moving font if change is sufficient |
17 | 17 | #ifndef GOURCE_H |
18 | 18 | #define GOURCE_H |
19 | 19 | |
20 | #define GOURCE_VERSION "0.15" | |
20 | #define GOURCE_VERSION "0.16" | |
21 | 21 | |
22 | 22 | #ifdef _WIN32 |
23 | 23 | #include "windows.h" |
204 | 204 | extern int gGourceMaxFiles; |
205 | 205 | |
206 | 206 | extern std::string gGourceLogFormat; |
207 | extern std::string gGourceDateFormat; | |
207 | 208 | |
208 | 209 | extern bool gGourceHighlightAllUsers; |
209 | 210 |
74 | 74 | } |
75 | 75 | } |
76 | 76 | |
77 | if(args == "--date-format") { | |
78 | ||
79 | if((i+1)>=arguments.size() || arguments[i+1].size() == 0) { | |
80 | gource_help("specify a date format string"); | |
81 | } | |
82 | ||
83 | gGourceDateFormat = arguments[++i]; | |
84 | ||
85 | continue; | |
86 | } | |
87 | ||
77 | 88 | if(args == "--hide-date") { |
78 | 89 | gGourceHideDate = true; |
79 | 90 | continue; |
101 | 112 | |
102 | 113 | if(args == "--hide-filenames") { |
103 | 114 | gGourceHideFilenames = true; |
115 | continue; | |
116 | } | |
117 | ||
118 | if(args == "--hide-dirnames") { | |
119 | gGourceDrawDirName = false; | |
104 | 120 | continue; |
105 | 121 | } |
106 | 122 | |
348 | 364 | continue; |
349 | 365 | } |
350 | 366 | |
367 | if(args == "--user-scale") { | |
368 | ||
369 | if((i+1)>=arguments.size()) { | |
370 | gource_help("specify user-scale (scale)"); | |
371 | } | |
372 | ||
373 | gGourceUserScale = atof(arguments[++i].c_str()); | |
374 | ||
375 | if(gGourceUserScale<=0.0 || gGourceUserScale>100.0) { | |
376 | gource_help("invalid user-scale value"); | |
377 | } | |
378 | ||
379 | continue; | |
380 | } | |
381 | ||
382 | ||
351 | 383 | if(args == "--max-user-speed") { |
352 | 384 | |
353 | 385 | if((i+1)>=arguments.size()) { |
29 | 29 | mouseover = false; |
30 | 30 | |
31 | 31 | shadow = false; |
32 | ||
33 | this->shadowOffset = vec2f(2.0, 2.0); | |
32 | 34 | |
33 | 35 | this->elapsed = 0.0; |
34 | 36 | this->fadetime = 1.0; |
176 | 178 | |
177 | 179 | float ratio = icon->h / (float) icon->w; |
178 | 180 | float halfsize = size * 0.5f; |
179 | vec2f offsetpos = pos - vec2f(halfsize, halfsize) + vec2f(2.0, 2.0); | |
181 | vec2f offsetpos = pos - vec2f(halfsize, halfsize) + shadowOffset; | |
180 | 182 | |
181 | 183 | float alpha = getAlpha(); |
182 | 184 |
27 | 27 | class Pawn : public QuadItem { |
28 | 28 | protected: |
29 | 29 | vec2f pos; |
30 | vec2f shadowOffset; | |
30 | 31 | |
31 | 32 | std::string name; |
32 | 33 | float namewidth; |
23 | 23 | float gGourceMaxFileLagSeconds = 5.0; |
24 | 24 | float gGourceMaxUserSpeed = 500.0; |
25 | 25 | float gGourceUserFriction = 1.0; |
26 | float gGourceUserScale = 1.0; | |
26 | 27 | |
27 | 28 | bool gGourceColourUserImages = false; |
28 | 29 | |
40 | 41 | this->name = name; |
41 | 42 | |
42 | 43 | speed = gGourceMaxUserSpeed; |
43 | size = 20.0; | |
44 | size = 20.0 * gGourceUserScale; | |
45 | ||
46 | shadowOffset = vec2f(2.0, 2.0) * gGourceUserScale; | |
44 | 47 | |
45 | 48 | shadow = true; |
46 | 49 |