* Re: What's cooking in git.git (Nov 2009, #04; Tue, 17)
From: Junio C Hamano @ 2009-11-19 18:11 UTC (permalink / raw)
To: Johannes Sixt; +Cc: Junio C Hamano, git
In-Reply-To: <4B03B315.2080407@viscovery.net>
Johannes Sixt <j.sixt@viscovery.net> writes:
> Ramsay suggested to drop the one at the tip, and I agree. The other two
> patches are good.
Thanks; will drop one and queue the rest to 'next'.
^ permalink raw reply
* Re: [PATCH v4] Expand ~ and ~user in core.excludesfile, commit.template
From: Junio C Hamano @ 2009-11-19 18:12 UTC (permalink / raw)
To: Matthieu Moy; +Cc: git, gitster, Karl Chen
In-Reply-To: <1258534693-7220-1-git-send-email-Matthieu.Moy@imag.fr>
Oops; last night I wrote
Thanks; v3 was already in next so I'll make an interdiff into a separate
"fix-up" commit.
but didn't send it out. Thanks for rerolling the patch.
^ permalink raw reply
* Re: Using `git tag -l` to get non-matching tags
From: Junio C Hamano @ 2009-11-19 18:18 UTC (permalink / raw)
To: Tim Visher; +Cc: Git Mailing List
In-Reply-To: <c115fd3c0911190949x2f32d1cbw26f3260f12d43a6e@mail.gmail.com>
Tim Visher <tim.visher@gmail.com> writes:
> I'm trying to use `git tag -l` to get non-matching tags. I can't find
> anywhere in the documentation describing what is allowed in the tag
> pattern.
As a general guideline, refs are matched using glob not regexp and given
to fnmatch(3).
Who are you in your first sentence?
If you are an end user typing from the terminal trying to list tags
excluding some, the answer would be "piping to 'grep -v'".
If you are writing a tool that uses git, the tool uses a part of tag
namespace for its own use, and the tool is trying to enumerate end-user
tags by excluding the ones it uses for its own use, then the answer would
be "do not use 'git tag' in Porcelain---use 'git for-each-ref' and filter
its output yourself".
^ permalink raw reply
* Re: [PATCH v4] git remote: Separate usage strings for subcommands
From: Tim Henigan @ 2009-11-19 18:58 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Nanako Shiraishi, jrnieder, git
In-Reply-To: <7vlji2bd23.fsf@alter.siamese.dyndns.org>
On Thu, Nov 19, 2009 at 1:10 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Tim Henigan <tim.henigan@gmail.com> writes:
>
>> The original version of this patch [1] left the contents of the usage
>> strings intact. However, Junio expressed a preference to change
>> them to use the generic <options>. See this thread for the
>> discussion [2].
>>
>> [1] http://article.gmane.org/gmane.comp.version-control.git/133048/
>> [2] http://thread.gmane.org/gmane.comp.version-control.git/132968/focus=133050
>
> Sorry, but I think you misunderstood what I meant, then. in [2], I said...
... snip ...
> ... the options list is used to reproduce the information in a major part
> of that string already. So I would prefer builtin_remote_add_usage[] to
> be something like:
>
> "git remote add [<options>...] <name> <url>"
>
> I meant that we want to change "remote add -h" to show this here; and the
> reason why I doubted "the value of reusing option string" was because I
> wanted to do so without touching the concise list of the subcommands and
> their options given by "remote -h". Otherwise, it would have made perfect
> sense to use preprocessor macros to share the two identical strings.
Okay, I believe I understand now, but let's test that theory ;)
Using the 'add' subcommand as an example, the desired output is:
Output of 'git remote -h':
"git remote [-v | --verbose]"
"git remote add [-t <branch>] [-m <master>] [-f] [--mirror] <name> <url>"
etc.
Output of 'git remote add -h':
"git remote add [<options>...] <name> <url>"
followed by the detailed description given by 'parse_options()'.
Text in 'man git-remote':
"git remote add [-t <branch>] [-m <master>] [-f] [--mirror] <name> <url>"
with the options explained in detail later in the file.
Thanks for your patience,
Tim
^ permalink raw reply
* [PATCH] t9700-perl-git.sh: Fix a test failure on Cygwin
From: Ramsay Jones @ 2009-11-19 18:41 UTC (permalink / raw)
To: Junio C Hamano; +Cc: GIT Mailing-list
The t/t9700/test.pl script uses method invocation syntax when
using the Cwd module to determine the current working directory.
This fails on cygwin, since cygwin perl specifically checks for
any arguments to the cwd() function and croak()'s with the message
"Usage: Cwd::cwd()". (In perl v5.8.8 distribution, see the file
perl-5.8.8/cygwin/cygwin.c lines 139-157)
In order to avoid the problem, we replace the method invocation
syntax with a simple function call.
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
t/t9700/test.pl | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/t/t9700/test.pl b/t/t9700/test.pl
index 6c70aec..666722d 100755
--- a/t/t9700/test.pl
+++ b/t/t9700/test.pl
@@ -13,7 +13,7 @@ use File::Basename;
BEGIN { use_ok('Git') }
# set up
-our $abs_repo_dir = Cwd->cwd;
+our $abs_repo_dir = cwd();
ok(our $r = Git->repository(Directory => "."), "open repository");
# config
--
1.6.5
^ permalink raw reply related
* [PATCH] git-count-objects: Fix a disk-space under-estimate on Cygwin
From: Ramsay Jones @ 2009-11-19 18:46 UTC (permalink / raw)
To: Junio C Hamano; +Cc: GIT Mailing-list
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
Whilst testing an msvc-built git on cygwin, I noticed that
git-count-objects was producing different results to the
cygwin version, viz:
$ ./git --version
git version 1.6.5.4.gf034d.MSVC
$ git --version
git version 1.6.5
$ ./git-count-objects
60 objects, 283 kilobytes
$ git count-objects
60 objects, 210 kilobytes
$ git config core.filemode false
$ git count-objects
60 objects, 297 kilobytes
$
Note also that the cygwin version of git gives two different
answers, in the *same* repository, depending on the setting
of core.filemode. (since the "win32 stat() functions" in
compat/cygwin.c are used when core.filemode is false)
Having looked at the msvc code-path, I also noticed something
else a bit odd; the value printed by the msvc version should
be a *lower bound* for the amount of disk-space used (since
it simply totals the actual file sizes). However, as you can
see from the above, when core.filemode is true, the cygwin
version of git is *underestimating* even this (210Kb vs 283kb).
A quick trip to the debugger confirmed that (st.st_blocks * 512)
is less than st.st_size for several files. So, it looked like
the block-size was not in units of 512 bytes; so if we look at
/usr/include/sys/param.h we find:
#define DEV_BSIZE 1024
and in /usr/include/sys/stat.h we find:
#define S_BLKSIZE 1024
which seems to indicate a 1K block-size instead. Also, different
filesystem types may use different block-sizes, which is why an
st.st_blksize was added to struct stat; it seems that the Cygwin
struct stat contains the st_blksize field, so lets try a quick
test program:
$ cat junk.c
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
int i, bytes = 0, tot_5 = 0, tot_b = 0;
for (i=1; i< argc; i++) {
struct stat st;
if (lstat(argv[i], &st))
printf("can't lstat '%s'\n", argv[i]);
else {
int s = (int)st.st_size;
int b = (int)st.st_blocks;
int f = (int)st.st_blksize;
int d = (b * 512);
int e = (b * f);
printf("%8d, ", s);
printf("%2d*512=%-6d (%6d), ", b, d, d-s);
printf("%2d*%d=%-6d (%6d)\n", b, f, e, e-s);
bytes += s;
tot_5 += d;
tot_b += e;
}
}
printf("total bytes: %6d\n", bytes);
printf("b * 512: %6d (%d)\n", tot_5, tot_5 - bytes);
printf("b * blksize: %6d (%d)\n", tot_b, tot_b - bytes);
exit(0);
}
$ ls .git/objects/??/* | xargs ./junk.exe
148, 1*512=512 ( 364), 1*1024=1024 ( 876)
10058, 12*512=6144 ( -3914), 12*1024=12288 ( 2230)
3701, 4*512=2048 ( -1653), 4*1024=4096 ( 395)
463, 4*512=2048 ( 1585), 4*1024=4096 ( 3633)
148, 1*512=512 ( 364), 1*1024=1024 ( 876)
10056, 12*512=6144 ( -3912), 12*1024=12288 ( 2232)
198, 1*512=512 ( 314), 1*1024=1024 ( 826)
1782, 4*512=2048 ( 266), 4*1024=4096 ( 2314)
192, 1*512=512 ( 320), 1*1024=1024 ( 832)
3801, 4*512=2048 ( -1753), 4*1024=4096 ( 295)
14851, 16*512=8192 ( -6659), 16*1024=16384 ( 1533)
3761, 4*512=2048 ( -1713), 4*1024=4096 ( 335)
52, 1*512=512 ( 460), 1*1024=1024 ( 972)
956, 4*512=2048 ( 1092), 4*1024=4096 ( 3140)
956, 4*512=2048 ( 1092), 4*1024=4096 ( 3140)
3703, 4*512=2048 ( -1655), 4*1024=4096 ( 393)
10055, 12*512=6144 ( -3911), 12*1024=12288 ( 2233)
total bytes: 64881
b * 512: 45568 (-19313)
b * blksize: 91136 (26255)
$
Note that, in addition to confirming the 1K block-size, it appears
that (on NTFS) files less than 1K are allocated a single block
whereas larger files use a multiple of 4 blocks. Well, that is only
a guess but it at least sounds plausible! ;-)
This patch implements a simple solution which has the useful property
of returning a single answer, irrespective of the core.filemode setting.
ATB,
Ramsay Jones
Makefile | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index 5d5976f..5624563 100644
--- a/Makefile
+++ b/Makefile
@@ -783,6 +783,10 @@ ifeq ($(uname_O),Cygwin)
NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes
NO_TRUSTABLE_FILEMODE = UnfortunatelyYes
OLD_ICONV = UnfortunatelyYes
+ # The st_blocks field is not in units of 512 bytes, as the code
+ # expects, which leads to an under-estimate of the disk space used.
+ # In order to use an alternate algorithm, we claim to lack st_blocks.
+ NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
# There are conflicting reports about this.
# On some boxes NO_MMAP is needed, and not so elsewhere.
# Try commenting this out if you suspect MMAP is more efficient
--
1.6.5
^ permalink raw reply related
* [RFC/PATCH] Add an implementation of uname(1) for Windows
From: Ramsay Jones @ 2009-11-19 19:00 UTC (permalink / raw)
To: GIT Mailing-list
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
While changing the Makefile recently, to fix-up the msvc build on
cygwin, I thought it may be useful to have a uname(1) command on
Windows. Well, it isn't actually needed, but it got me thinking
about how I would implement it...
I started off with some assembler to access the cpuid instruction
on x86 machines... but I soon discarded that, since all the information
I needed was already available via an WIN32 API or from the registry.
So, this is not a serious patch and is not meant for application.
However, some Windows users may find it useful... ;-)
ATB,
Ramsay Jones
compat/vcbuild/uname.c | 475 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 475 insertions(+), 0 deletions(-)
create mode 100644 compat/vcbuild/uname.c
diff --git a/compat/vcbuild/uname.c b/compat/vcbuild/uname.c
new file mode 100644
index 0000000..7ca6cdd
--- /dev/null
+++ b/compat/vcbuild/uname.c
@@ -0,0 +1,475 @@
+
+/*
+ * uname(1) for Windows
+ *
+ * This program is licensed under the GPL v2.
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+/*
+ * MSVC: cl uname.c advapi32.lib
+ *
+ * Open Watcom: wcl386 uname.c
+ *
+ * Cygwin gcc: gcc -mno-cygwin -o uname uname.c
+ *
+ */
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#define VERSION_STR "0.1"
+
+static char *prog;
+
+static int all = 0;
+static int kernel = 0;
+static int host = 0;
+static int release = 0;
+static int version = 0;
+static int machine = 0;
+static int processor = 0;
+static int hardware = 0;
+static int os = 0;
+
+static void set_program_name(char *argv0, char *def)
+{
+ static char name[256];
+ char *slash;
+ int len;
+
+ if (!argv0 || !*argv0) {
+ prog = def;
+ return;
+ }
+
+ /* get last path component */
+ if ((slash = strrchr(argv0, '/')) == NULL)
+ prog = argv0;
+ else
+ prog = slash+1;
+
+ /* check for win32 separator */
+ if ((slash = strrchr(prog, '\\')) != NULL)
+ prog = slash+1;
+
+ /* strip '.exe' suffix, if any */
+ len = strlen(prog);
+ if (len > 4 && strcmp(&prog[len-4], ".exe") == 0) {
+ if (len < sizeof(name)) {
+ strcpy(name, prog);
+ name[len-4] = '\0';
+ prog = name;
+ }
+ }
+}
+
+static void die(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (prog)
+ fprintf(stderr, "%s: ", prog);
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+ exit(1);
+}
+
+static void usage(void)
+{
+ printf("usage: %s [OPTION]...\n\n", prog);
+ printf(" -a, --all "
+ "print all information, except -p and -i\n");
+ printf(" -s, --kernel-name "
+ "print the kernel name\n");
+ printf(" -n, --nodename "
+ "print the network node hostname\n");
+ printf(" -r, --kernel-release "
+ "print the kernel release\n");
+ printf(" -v, --kernel-version "
+ "print the kernel version\n");
+ printf(" -m, --machine "
+ "print the machine hardware name\n");
+ printf(" -p, --processor "
+ "print the processor type\n");
+ printf(" -i, --hardware-platform "
+ "print the hardware platform\n");
+ printf(" -o, --operating-system "
+ "print the operating system\n");
+ printf(" --help "
+ "print this help and exit\n");
+ printf(" --version "
+ "print version information and exit\n");
+ printf("\n");
+ exit(0);
+}
+
+static void print_version(void)
+{
+ printf("%s version %s\n", prog, VERSION_STR);
+ exit(0);
+}
+
+static void do_long_option(char *opt)
+{
+ static struct { char *name; int *option; } tab[] = {
+ { "--all", &all },
+ { "--kernel-name", &kernel },
+ { "--nodename", &host },
+ { "--kernel-release", &release },
+ { "--kernel-version", &version },
+ { "--machine", &machine },
+ { "--processor", &processor },
+ { "--hardware-platform", &hardware },
+ { "--operating-system", &os },
+ { NULL, NULL }
+ };
+ int i;
+
+ if (!opt || !*opt)
+ die("internal error: !opt || !*opt");
+
+ for (i = 0; tab[i].name; i++) {
+ if (strcmp(opt, tab[i].name) == 0) {
+ *tab[i].option = 1;
+ return;
+ }
+ }
+
+ if (strcmp(opt, "--help") == 0)
+ usage(); /* does not return */
+
+ if (strcmp(opt, "--version") == 0)
+ print_version(); /* does not return */
+
+ die("unknown option: '%s', try --help", opt);
+}
+
+static void do_short_options(char *opts)
+{
+ char *a = &opts[1];
+
+ while (*a) {
+ switch (*a) {
+ case 'a': all = 1; break;
+ case 's': kernel = 1; break;
+ case 'n': host = 1; break;
+ case 'r': release = 1; break;
+ case 'v': version = 1; break;
+ case 'm': machine = 1; break;
+ case 'p': processor = 1; break;
+ case 'i': hardware = 1; break;
+ case 'o': os = 1; break;
+ default:
+ die("unknown option: '%c', try --help", *a);
+ break;
+ }
+ ++a;
+ }
+}
+
+static void process_args(int argc, char *argv[])
+{
+ int argpos = 1;
+
+ if (argc == 1) /* no options... */
+ kernel = 1; /* same as -s */
+
+ /* check for [OPTIONS]... */
+ while (argpos < argc) {
+ if (argv[argpos][0] != '-') /* no option */
+ break;
+ if (argv[argpos][1] == '-') /* --long option */
+ do_long_option(argv[argpos]);
+ else /* -short option(s) */
+ do_short_options(argv[argpos]);
+ argpos++;
+ }
+
+ /* no other args allowed */
+ if (argpos != argc)
+ die("unexpected argument: '%s', try --help", argv[argpos]);
+
+ if (all)
+ kernel = host = release = version = machine = os = 1;
+}
+
+static char *get_kernel(void)
+{
+ return "Windows";
+}
+
+static char *get_hostname(void)
+{
+ static char name[256];
+ unsigned long len = sizeof(name)-1;
+
+ if (GetComputerNameExA(ComputerNameDnsHostname, name, &len))
+ return name;
+ return "unknown";
+}
+
+static OSVERSIONINFO *get_version_info(void)
+{
+ static OSVERSIONINFO ver;
+ static int called;
+
+ if (!called) {
+ ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&ver);
+ ++called;
+ }
+ return &ver;
+}
+static char *get_release(void)
+{
+ static char str[256];
+ OSVERSIONINFO *v = get_version_info();
+ _snprintf(str, sizeof(str)-1, "%d.%d",
+ v->dwMajorVersion, v->dwMinorVersion);
+ return str;
+}
+
+static char *get_version(void)
+{
+ static char str[256];
+ OSVERSIONINFO *v = get_version_info();
+ _snprintf(str, sizeof(str)-1, "%d(%s)",
+ v->dwBuildNumber, v->szCSDVersion);
+ return str;
+}
+
+static SYSTEM_INFO *get_system_info(void)
+{
+ static SYSTEM_INFO sys;
+ static int called;
+
+ if (!called) {
+ GetSystemInfo(&sys);
+ ++called;
+ }
+ return &sys;
+}
+
+static char *get_arch(int arch)
+{
+ static struct { int arch_enum; char *name; } tab[] = {
+ { PROCESSOR_ARCHITECTURE_INTEL, "INTEL" },
+ { PROCESSOR_ARCHITECTURE_MIPS, "MIPS" },
+ { PROCESSOR_ARCHITECTURE_ALPHA, "ALPHA" },
+ { PROCESSOR_ARCHITECTURE_PPC, "PPC" },
+ { PROCESSOR_ARCHITECTURE_SHX, "SHX" },
+ { PROCESSOR_ARCHITECTURE_ARM, "ARM" },
+ { PROCESSOR_ARCHITECTURE_IA64, "IA-64" },
+ { PROCESSOR_ARCHITECTURE_ALPHA64, "ALPHA-64" },
+ { PROCESSOR_ARCHITECTURE_AMD64, "AMD-64" },
+ { PROCESSOR_ARCHITECTURE_UNKNOWN, NULL }
+ };
+ int i;
+
+ for (i = 0; tab[i].name; i++)
+ if (tab[i].arch_enum == arch)
+ return tab[i].name;
+ return NULL;
+}
+
+static char *get_x86_machine(int family)
+{
+ static char m[256];
+
+ switch (family) {
+ case 3: case 4: case 5: case 6:
+ _snprintf(m, sizeof(m)-1, "i%c86", family+'0');
+ break;
+ case 15: /* pentium 4 */
+ strcpy(m, "i686");
+ break;
+ default:
+ _snprintf(m, sizeof(m)-1, "x86 Family %d", family);
+ break;
+ }
+ return m;
+}
+
+static char *get_machine(void)
+{
+ SYSTEM_INFO *s = get_system_info();
+ char *arch = get_arch(s->wProcessorArchitecture);
+
+ if (arch) {
+ if (strcmp(arch, "INTEL") == 0)
+ return get_x86_machine(s->wProcessorLevel);
+ return arch;
+ }
+ return "unknown";
+}
+
+static char cpuinfo_key[] =
+ "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
+
+static char *get_processor_name(void)
+{
+ static char cpu[256];
+ DWORD t, len = sizeof(cpu)-1;
+ LONG l;
+ HKEY key;
+
+ l = RegOpenKeyA(HKEY_LOCAL_MACHINE, cpuinfo_key, &key);
+ if (l != ERROR_SUCCESS)
+ return NULL;
+
+ l = RegQueryValueExA(key, "ProcessorNameString", NULL, &t, cpu, &len);
+ if (l != ERROR_SUCCESS)
+ l = RegQueryValueExA(key, "Identifier", NULL, &t, cpu, &len);
+
+ RegCloseKey(key);
+
+ if (l != ERROR_SUCCESS)
+ return NULL;
+
+ return cpu;
+}
+
+static char *map_sysinfo_to_cpu(void)
+{
+ static char cpu[256];
+ size_t n = sizeof(cpu)-1;
+ SYSTEM_INFO *s = get_system_info();
+ char *arch = get_arch(s->wProcessorArchitecture);
+
+ if (arch && (strcmp(arch, "INTEL") == 0)) {
+ int family = s->wProcessorLevel;
+ int model = (((s->wProcessorRevision) >> 8) & 0xff);
+ int stepping = ((s->wProcessorRevision) & 0xff);
+
+ _snprintf(cpu, n, "x86 Family %d Model %d Stepping %d",
+ family, model, stepping);
+ return cpu;
+ }
+ return NULL;
+}
+
+static char *get_processor(void)
+{
+ char *cpu = get_processor_name();
+
+ if (cpu || (cpu = map_sysinfo_to_cpu()))
+ return cpu;
+
+ return "unknown";
+}
+
+static char *get_hardware(void)
+{
+ return "unknown";
+}
+
+static char osinfo_key[] =
+ "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
+
+static char *get_product_name(void)
+{
+ static char product[256];
+ DWORD type, len = sizeof(product)-1;
+ LONG l;
+ HKEY key;
+
+ l = RegOpenKeyA(HKEY_LOCAL_MACHINE, osinfo_key, &key);
+ if (l != ERROR_SUCCESS)
+ return NULL;
+
+ l = RegQueryValueExA(key, "ProductName", NULL, &type, product, &len);
+
+ RegCloseKey(key);
+
+ if (l != ERROR_SUCCESS)
+ return NULL;
+
+ return product;
+}
+
+/*
+ * The OS version does not provide a unique mapping to OS product name.
+ * So, use this function only as a last resort.
+ */
+static char *map_version_to_os(void)
+{
+ static struct { int version; char *os_name; } tab[] = {
+ { 0x500, "Windows 2000" },
+ { 0x501, "Windows XP" },
+ { 0x502, "Windows Server 2003" }, /* also Server 2003 R2 */
+ { 0x600, "Windows Vista" }, /* also Server 2008 */
+ { 0x601, "Windows 7" }, /* also Server 2008 R2 */
+ { 0, NULL }
+ };
+ OSVERSIONINFO *v = get_version_info();
+ int i, version = (v->dwMajorVersion << 8) + v->dwMinorVersion;
+
+ for (i = 0; tab[i].version != 0; i++) {
+ if (version == tab[i].version)
+ return tab[i].os_name;
+ }
+
+ return NULL;
+}
+
+static char *get_os(void)
+{
+ char *os_name = get_product_name();
+
+ if (os_name || (os_name = map_version_to_os()))
+ return os_name;
+
+ return "Windows";
+}
+
+static void print_info(void)
+{
+ static struct { int *opt; char *(*get)(void); } info[] = {
+ { &kernel, get_kernel },
+ { &host, get_hostname },
+ { &release, get_release },
+ { &version, get_version },
+ { &machine, get_machine },
+ { &processor, get_processor },
+ { &hardware, get_hardware },
+ { &os, get_os },
+ { NULL, 0 }
+ };
+ char *pad = "";
+ int i;
+
+ for (i = 0; info[i].opt; i++) {
+ if (*(info[i].opt)) {
+ printf("%s%s", pad, (info[i].get)());
+ pad = " ";
+ }
+ }
+ printf("\n");
+}
+
+int main(int argc, char *argv[])
+{
+ set_program_name(argv[0], "uname");
+ process_args(argc,argv);
+ print_info();
+ return 0;
+}
--
1.6.5
^ permalink raw reply related
* Re: [PATCH] gitk: Use git-difftool for external diffs
From: David Aguilar @ 2009-11-19 19:39 UTC (permalink / raw)
To: Paul Mackerras; +Cc: peff, sam, git
In-Reply-To: <19205.2531.205062.980468@cargo.ozlabs.ibm.com>
On Thu, Nov 19, 2009 at 08:03:31PM +1100, Paul Mackerras wrote:
> David Aguilar writes:
>
> > This teaches gitk about git-difftool. A benefit of this change is
> > that gitk's external diff now works with read-only repositories.
>
> What version of git does git difftool first appear in? I prefer not
> to introduce hard requirements on very recent versions of git into
> gitk.
>
> Paul.
git-difftool appeared in git 1.6.3.
If this patch is not going in then how do you suggest we fix the
read-only repository bug?
My immediate thought is to harden the $TMPDIR patch so that the
filenames used by gitk are much less predictable (I bailed on it
once Peff noted the $TMPDIR vulnerabilities and used
git-difftool instead since it is known to be safe).
Does hardening the $TMPDIR patch have a better chance of
being accepted?
In defense of difftool: there are more benefits to using
git-difftool than just read-only repositories.
The current external diff code does not work if 'meld'
is not installed whereas using git-difftool works by default
in more environments. It also makes things match users'
expectations when they have already gone through the trouble
of configuring a diff or merge tool.
Is there a particular time frame in which such a patch could go
in?
My primary concern is getting gitk to work with read-only
repositories. git-difftool was just one way of getting there.
If keeping backwards compatibility is a must-have then I can
hold onto the git-difftool patch until some time in the future
when it is more appropriate. Hopefully something along the
lines of a hardened $TMPDIR patch can stand in for the final
fix in the meantime.
What do you think?
--
David
^ permalink raw reply
* [PATCH 0/2] jn/gitweb-blame fixes
From: Stephen Boyd @ 2009-11-19 19:44 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
This series is based on next's jn/gitweb-blame branch.
I was trying out the incremental blame and noticed it didn't work each
time. The first patch fixes the crashing I experience when blaming
gitweb.perl (ironic ;-)
The second patch fixes a visible bug I see in Firefox. Although I assume
on other browsers it's not a problem? I haven't tested it on others so I
can't be sure.
Stephen Boyd (2):
gitweb.js: fix null object exception in initials calculation
gitweb.js: use unicode encoding for nbsp instead of html entity
gitweb/gitweb.js | 15 +++++++++------
1 files changed, 9 insertions(+), 6 deletions(-)
^ permalink raw reply
* [PATCH 1/2] gitweb.js: fix null object exception in initials calculation
From: Stephen Boyd @ 2009-11-19 19:44 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
In-Reply-To: <1258659887-5244-1-git-send-email-bebarino@gmail.com>
Currently handleLine() assumes that a commit author name will always
start with a capital letter. It's possible that the author name is
user@example.com and therefore calling a match() on the name will fail
to return any matches. Subsequently joining these matches will cause an
exception. Fix by checking that we have a match before trying to join
the results into a set of initials for the author.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
---
gitweb/gitweb.js | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/gitweb/gitweb.js b/gitweb/gitweb.js
index 22570f5..02454d8 100644
--- a/gitweb/gitweb.js
+++ b/gitweb/gitweb.js
@@ -532,8 +532,11 @@ function handleLine(commit, group) {
if (group.numlines >= 2) {
var fragment = document.createDocumentFragment();
var br = document.createElement("br");
- var text = document.createTextNode(
- commit.author.match(/\b([A-Z])\B/g).join(''));
+ var match = commit.author.match(/\b([A-Z])\B/g);
+ if (match) {
+ var text = document.createTextNode(
+ match.join(''));
+ }
if (br && text) {
var elem = fragment || td_sha1;
elem.appendChild(br);
--
1.6.5.3.433.g11067
^ permalink raw reply related
* [PATCH 2/2] gitweb.js: use unicode encoding for nbsp instead of html entity
From: Stephen Boyd @ 2009-11-19 19:44 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
In-Reply-To: <1258659887-5244-1-git-send-email-bebarino@gmail.com>
It seems that in Firefox-3.5 inserting nbsp with javascript inserts the
literal nbsp; instead of a space. Fix this by inserting the unicode
representation for nbsp instead.
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
---
gitweb/gitweb.js | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/gitweb/gitweb.js b/gitweb/gitweb.js
index 02454d8..30597dd 100644
--- a/gitweb/gitweb.js
+++ b/gitweb/gitweb.js
@@ -31,12 +31,12 @@
/**
* pad number N with nonbreakable spaces on the left, to WIDTH characters
- * example: padLeftStr(12, 3, ' ') == ' 12'
- * (' ' is nonbreakable space)
+ * example: padLeftStr(12, 3, '\u00A0') == '\u00A012'
+ * ('\u00A0' is nonbreakable space)
*
* @param {Number|String} input: number to pad
* @param {Number} width: visible width of output
- * @param {String} str: string to prefix to string, e.g. ' '
+ * @param {String} str: string to prefix to string, e.g. '\u00A0'
* @returns {String} INPUT prefixed with (WIDTH - INPUT.length) x STR
*/
function padLeftStr(input, width, str) {
@@ -158,7 +158,7 @@ function updateProgressInfo() {
if (div_progress_info) {
div_progress_info.firstChild.data = blamedLines + ' / ' + totalLines +
- ' (' + padLeftStr(percentage, 3, ' ') + '%)';
+ ' (' + padLeftStr(percentage, 3, '\u00A0') + '%)';
}
if (div_progress_bar) {
--
1.6.5.3.433.g11067
^ permalink raw reply related
* Re: gitk : french translation
From: Emmanuel Trillaud @ 2009-11-19 19:47 UTC (permalink / raw)
To: Nicolas Sebrecht
Cc: Maximilien Noal, Matthieu Moy, Nicolas Pitre, Thomas Moulard,
Guy Brand, Git Mailing List
In-Reply-To: <20091111001050.GC27518@vidovic>
I finally took some time to improve the gitk french translation V2. The
V3 address most of the comments of Nicolas. I respond to this message
with the actual V3.
>
> Line wraping error; configure your mail user agent to not wrap lines,
> please.
>
> > +#FIXME : améliorer la traduction de 'file limite'
>
> If you add some FIXME (which is good), you also should mark the
> translation as "fuzzy" like this:
In those cases, I either improve the translations or mark them fuzzy
>
>
> > +#: gitk:1793 gitk:1817 gitk:3916 gitk:8786 gitk:10322 gitk:10498
> > +msgid "OK"
> > +msgstr "OK"
>
> This one should not be required.
Those strings are already "translated", so I see no reason to
remove the translation (if the strings change !? we'll have translate
them anyway)
> > +#: gitk:2713
> > +msgid "/\t\tFocus the search box"
> > +msgstr "/"
...
> > +# FIXME : traduction de "skip"
>
> "éviter"?
>
> > +#: gitk:3697
> > +msgid "Limit and/or skip a number of revisions (positive integer):"
> > +msgstr "Limiter et/ou sauter un certain nombre (entier positif) de révision :"
...
> > +#FIXME : traduction de "branch sides"
> > +#: gitk:3702
>
> #, fuzzy
>
> > +msgid "Mark branch sides"
> > +msgstr "Marquer le flanc des branches"
>
> What about "côté"?
I choose "extrémités" but I let the string fuzzy
> > +#FIXME : plutôt traduire par "pas un descendant"
> > +#: gitk:4606
>
> #, fuzzy
>
> > +msgid "Not descendant"
> > +msgstr "Non descendant"
I use "Pas un descendant"
> > +#FIXME : plutôt traduire par "pas un ancêtre"
> > +#: gitk:4614
>
> #, fuzzy
>
> > +msgid "Not ancestor"
> > +msgstr "Non ancêtre"
I use "Pas un ancêtre"
> > +#: gitk:9257
> > +msgid ""
> > +"Error reading commit topology information; branch and preceding/following "
> > +"tag information will be incomplete."
> > +msgstr ""
> > +"Erreur à la lecture des informations sur la topology des commits. "
>
> s/topology/topologie/
> s/./ ;/
I use "," instead. We don't use the ";" often in french.
> > +#: gitk:10441
> > +msgid "Support per-file encodings"
> > +msgstr "Support pour un encodage de caractère par fichier"
>
> s/de caractère/ des caractères/
>
> --
> Nicolas Sebrecht
--
Emmanuel Trillaud <etrillaud@gmail.com>
^ permalink raw reply
* Re: gitk : french translation
From: Emmanuel Trillaud @ 2009-11-19 20:01 UTC (permalink / raw)
To: Emmanuel Trillaud
Cc: Nicolas Sebrecht, Maximilien Noal, Matthieu Moy, Nicolas Pitre,
Thomas Moulard, Guy Brand, Git Mailing List
In-Reply-To: <20091119204753.85765c5d.etrillaud@gmail.com>
This new version of the gitk french translation address the comment
from Nicolas. There is still some fuzzy translation but I think this
version is good enough to be submitted to the gitk Maintainer. If you
think it's not ready, please send me your suggestion.
Best regards
Emmanuel Trillaud
---8<---
Subject : [PATCHv3] French translation of gitk
Signed-off-by: Emmanuel Trillaud <etrillaud@gmail.com>
Signed-off-by: Thomas Moulard <thomas.moulard@gmail.com>
Signed-off-by: Guy Brand <gb@unistra.fr>
diff --git a/gitk-git/po/fr.po b/gitk-git/po/fr.po
new file mode 100644
index 0000000..e33733b
--- /dev/null
+++ b/gitk-git/po/fr.po
@@ -0,0 +1,1242 @@
+
+# French translation of the gitk package
+# Copyright (C) 2005-2008 Paul Mackerras. All rights reserved.
+# This file is distributed under the same license as the gitk package.
+# Translators:
+# Emmanuel Trillaud <etrillaud@gmail.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gitk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-05 15:16+0200\n"
+"PO-Revision-Date: 2009-11-19 20:38+0100\n"
+"Last-Translator: YOUR NAME <E-MAIL@ADDRESS>\n"
+"Language-Team: FRENCH\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+
+#: gitk:113
+msgid "Couldn't get list of unmerged files:"
+msgstr "Impossible de récupérer la liste des fichiers non fusionnés :"
+
+#: gitk:269
+msgid "Error parsing revisions:"
+msgstr "Erreur lors du parcours des révisions :"
+
+#: gitk:324
+msgid "Error executing --argscmd command:"
+msgstr "Erreur à l'exécution de la commande --argscmd :"
+
+#: gitk:337
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr "Aucun fichier sélectionné : --merge précisé, mais tous les"
+"fichiers sont fusionnés."
+
+#FIXME : améliorer la traduction de 'file limite'
+#: gitk:340
+#, fuzzy
+msgid ""
+"No files selected: --merge specified but no unmerged files are within
file " +"limit."
+msgstr "Aucun fichier sélectionné : --merge précisé mais aucun fichier
non " +"fusionné n'est dans la limite des fichiers."
+
+#: gitk:362 gitk:509
+msgid "Error executing git log:"
+msgstr "Erreur à l'exécution de git log :"
+
+#: gitk:380 gitk:525
+msgid "Reading"
+msgstr "Lecture en cours"
+
+#: gitk:440 gitk:4123
+msgid "Reading commits..."
+msgstr "Lecture des commits..."
+
+#: gitk:443 gitk:1561 gitk:4126
+msgid "No commits selected"
+msgstr "Aucun commit sélectionné"
+
+#: gitk:1437
+msgid "Can't parse git log output:"
+msgstr "Impossible de lire la sortie de git log :"
+
+#: gitk:1657
+msgid "No commit information available"
+msgstr "Aucune information disponible sur le commit"
+
+#: gitk:1793 gitk:1817 gitk:3916 gitk:8786 gitk:10322 gitk:10498
+msgid "OK"
+msgstr "OK"
+
+#: gitk:1819 gitk:3918 gitk:8383 gitk:8457 gitk:8567 gitk:8616
gitk:8788 +#: gitk:10323 gitk:10499
+msgid "Cancel"
+msgstr "Annuler"
+
+#: gitk:1919
+msgid "Update"
+msgstr "Mise à jour"
+
+#: gitk:1920
+msgid "Reload"
+msgstr "Recharger"
+
+#: gitk:1921
+msgid "Reread references"
+msgstr "Relire les références"
+
+#: gitk:1922
+msgid "List references"
+msgstr "Lister les références"
+
+#: gitk:1924
+msgid "Start git gui"
+msgstr "Démarrer git gui"
+
+#: gitk:1926
+msgid "Quit"
+msgstr "Quitter"
+
+#: gitk:1918
+msgid "File"
+msgstr "Fichier"
+
+#: gitk:1930
+msgid "Preferences"
+msgstr "Préférences"
+
+#: gitk:1929
+msgid "Edit"
+msgstr "Éditer"
+
+#: gitk:1934
+msgid "New view..."
+msgstr "Nouvelle vue..."
+
+#: gitk:1935
+msgid "Edit view..."
+msgstr "Éditer la vue..."
+
+#: gitk:1936
+msgid "Delete view"
+msgstr "Supprimer la vue"
+
+#: gitk:1938
+msgid "All files"
+msgstr "Tous les fichiers"
+
+#: gitk:1933 gitk:3670
+msgid "View"
+msgstr "Vue"
+
+#: gitk:1943 gitk:1953 gitk:2654
+msgid "About gitk"
+msgstr "À propos de gitk"
+
+#: gitk:1944 gitk:1958
+msgid "Key bindings"
+msgstr "Raccourcis clavier"
+
+#: gitk:1942 gitk:1957
+msgid "Help"
+msgstr "Aide"
+
+#: gitk:2018
+msgid "SHA1 ID: "
+msgstr "ID SHA1 :"
+
+#: gitk:2049
+msgid "Row"
+msgstr "Colonne"
+
+#: gitk:2080
+msgid "Find"
+msgstr "Recherche"
+
+#: gitk:2081
+msgid "next"
+msgstr "suivant"
+
+#: gitk:2082
+msgid "prev"
+msgstr "précédent"
+
+#: gitk:2083
+msgid "commit"
+msgstr "commit"
+
+#: gitk:2086 gitk:2088 gitk:4284 gitk:4307 gitk:4331 gitk:6272
gitk:6344 +#: gitk:6428
+msgid "containing:"
+msgstr "contient :"
+
+#: gitk:2089 gitk:3162 gitk:3167 gitk:4359
+msgid "touching paths:"
+msgstr "chemins modifiés :"
+
+#: gitk:2090 gitk:4364
+msgid "adding/removing string:"
+msgstr "ajoute/supprime la chaîne :"
+
+#: gitk:2099 gitk:2101
+msgid "Exact"
+msgstr "Exact"
+
+#: gitk:2101 gitk:4439 gitk:6240
+msgid "IgnCase"
+msgstr "Ignorer la casse"
+
+#: gitk:2101 gitk:4333 gitk:4437 gitk:6236
+msgid "Regexp"
+msgstr "Expression régulière"
+
+#: gitk:2103 gitk:2104 gitk:4458 gitk:4488 gitk:4495 gitk:6364
gitk:6432 +msgid "All fields"
+msgstr "Tous les champs"
+
+#: gitk:2104 gitk:4456 gitk:4488 gitk:6303
+msgid "Headline"
+msgstr "Surligner"
+
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6432 gitk:6866
+msgid "Comments"
+msgstr "Commentaires"
+
+#: gitk:2105 gitk:4456 gitk:4460 gitk:4495 gitk:6303 gitk:6801
gitk:8063 +#: gitk:8078
+msgid "Author"
+msgstr "Auteur"
+
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6803
+msgid "Committer"
+msgstr "Auteur du commit"
+
+#: gitk:2134
+msgid "Search"
+msgstr "Rechercher"
+
+#: gitk:2141
+msgid "Diff"
+msgstr "Différences"
+
+#: gitk:2143
+msgid "Old version"
+msgstr "Ancienne version"
+
+#: gitk:2145
+msgid "New version"
+msgstr "Nouvelle version"
+
+#: gitk:2147
+msgid "Lines of context"
+msgstr "Lignes de contexte"
+
+#: gitk:2157
+msgid "Ignore space change"
+msgstr "Ignorer les modifications d'espace"
+
+#: gitk:2215
+msgid "Patch"
+msgstr "Patch"
+
+#: gitk:2217
+msgid "Tree"
+msgstr "Arbre"
+
+#: gitk:2361 gitk:2378
+msgid "Diff this -> selected"
+msgstr "Différences entre ceci et la séléction"
+
+#: gitk:2362 gitk:2379
+msgid "Diff selected -> this"
+msgstr "Différence entre séléction et ceci"
+
+#: gitk:2363 gitk:2380
+msgid "Make patch"
+msgstr "Créer patch"
+
+#: gitk:2364 gitk:8441
+msgid "Create tag"
+msgstr "Créer tag"
+
+#: gitk:2365 gitk:8547
+msgid "Write commit to file"
+msgstr "Écrire le commit dans un fichier"
+
+#: gitk:2366 gitk:8604
+msgid "Create new branch"
+msgstr "Créer une nouvelle branche"
+
+#: gitk:2367
+msgid "Cherry-pick this commit"
+msgstr "Cueillir (cherry-pick) ce commit"
+
+#: gitk:2368
+msgid "Reset HEAD branch to here"
+msgstr "Réinitialiser la branche HEAD vers cet état"
+
+#: gitk:2369
+msgid "Mark this commit"
+msgstr "Marquer ce commit"
+
+#: gitk:2370
+msgid "Return to mark"
+msgstr "Retourner à la marque"
+
+#: gitk:2371
+msgid "Find descendant of this and mark"
+msgstr "Chercher le descendant de ceci et le marquer"
+
+#: gitk:2372
+msgid "Compare with marked commit"
+msgstr "Comparer avec le commit marqué"
+
+#: gitk:2386
+msgid "Check out this branch"
+msgstr "Récupérer cette branche"
+
+#: gitk:2387
+msgid "Remove this branch"
+msgstr "Supprimer cette branche"
+
+#: gitk:2394
+msgid "Highlight this too"
+msgstr "Surligner également ceci"
+
+#: gitk:2395
+msgid "Highlight this only"
+msgstr "Surligner seulement ceci"
+
+# FIXME: changed for consistency but a better translation is required.
+#: gitk:2396
+msgid "External diff"
+msgstr "Différences externe"
+
+#: gitk:2397
+msgid "Blame parent commit"
+msgstr "Blâmer le commit parent"
+
+#: gitk:2404
+msgid "Show origin of this line"
+msgstr "Montrer l'origine de cette ligne"
+
+#: gitk:2405
+msgid "Run git gui blame on this line"
+msgstr "Exécuter git gui blame sur cette ligne"
+
+#: gitk:2656
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public
License" +msgstr ""
+"\n"
+"Gitk - visualisateur de commit pour git\n"
+"\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
+"\n"
+"Utilisation et redistribution soumises aux termes de la GNU General
Public License" +
+#: gitk:2664 gitk:2726 gitk:8969
+msgid "Close"
+msgstr "Fermer"
+
+#: gitk:2683
+msgid "Gitk key bindings"
+msgstr "Raccourcis clavier de Gitk"
+
+#: gitk:2686
+msgid "Gitk key bindings:"
+msgstr "Raccourcis clavier de Gitk :"
+
+#: gitk:2688
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\tQuitter"
+
+#: gitk:2689
+msgid "<Home>\t\tMove to first commit"
+msgstr "<Début>\t\tAller au premier commit"
+
+#: gitk:2690
+msgid "<End>\t\tMove to last commit"
+msgstr "<Fin>\t\tAller au dernier commit"
+
+#: gitk:2691
+msgid "<Up>, p, i\tMove up one commit"
+msgstr "<Haut>, p, i\t Aller au commit suivant"
+
+#: gitk:2692
+msgid "<Down>, n, k\tMove down one commit"
+msgstr "<Bas>, n, k\t Aller au commit précédent"
+
+#: gitk:2693
+msgid "<Left>, z, j\tGo back in history list"
+msgstr "<Gauche>, z, j\tReculer dans l'historique"
+
+#: gitk:2694
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<Droite>, x, l\tAvancer dans l'historique"
+
+#: gitk:2695
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<PageUp>\tMonter d'une page dans la liste des commits"
+
+#: gitk:2696
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<PageDown>\tDescendre d'une page dans la liste des commits"
+
+#: gitk:2697
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-Début>\tAller en haut de la liste des commits"
+
+#: gitk:2698
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-End>\tAller en bas de la liste des commits"
+
+#: gitk:2699
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-Up>\tMonter d'une ligne dans la liste des commits"
+
+#: gitk:2700
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-Down>\tDescendre d'une ligne dans la liste des commits"
+
+#: gitk:2701
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-PageUp>\tMonter d'une page dans la liste des commits"
+
+#: gitk:2702
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-PageDown>\tDescendre d'une page dans la liste des commits"
+
+#: gitk:2703
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<Shift-Up>\tRecherche en arrière (vers l'avant, commits les
plus anciens)" +
+#: gitk:2704
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr "<Shift-Down>\tRecherche en avant (vers l'arrière, commit les
plus récents)" +
+#: gitk:2705
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<Supprimer>, b\tMonter d'une page dans la vue des différences"
+
+#: gitk:2706
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<Backspace>\tMonter d'une page dans la vue des différences"
+
+#: gitk:2707
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Espace>\t\tDescendre d'une page dans la vue des différences"
+
+#: gitk:2708
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\tMonter de 18 lignes dans la vue des différences"
+
+#: gitk:2709
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\tDescendre de 18 lignes dans la vue des différences"
+
+#: gitk:2710
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\tRechercher"
+
+#: gitk:2711
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\tAller au résultat de recherche suivant"
+
+#: gitk:2712
+msgid "<Return>\tMove to next find hit"
+msgstr "<Return>\t\tAller au résultat de recherche suivant"
+
+#: gitk:2713
+msgid "/\t\tFocus the search box"
+msgstr "/"
+
+#: gitk:2714
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\tAller au résultat de recherche précédent"
+
+#: gitk:2715
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\tAller au prochain fichier dans la vue des différences"
+
+#: gitk:2716
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\tAller au résultat suivant dans la vue des
différences" +
+#: gitk:2717
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-R>\t\tAller au résultat précédent dans la vue des
différences" +
+#: gitk:2718
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\tAugmenter la taille de la police"
+
+#: gitk:2719
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-plus>\tAugmenter la taille de la police"
+
+#: gitk:2720
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\tDiminuer la taille de la police"
+
+#: gitk:2721
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-minus>\tDiminuer la taille de la police"
+
+#: gitk:2722
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\tMise à jour"
+
+#: gitk:3177
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "Erreur en obtenant \"%s\" de %s:"
+
+#: gitk:3234 gitk:3243
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "Erreur lors de la création du répertoire temporaire %s :"
+
+#: gitk:3255
+msgid "command failed:"
+msgstr "échec de la commande :"
+
+#: gitk:3401
+msgid "No such commit"
+msgstr "Commit inexistant"
+
+#: gitk:3415
+msgid "git gui blame: command failed:"
+msgstr "git gui blame : échec de la commande :"
+
+#: gitk:3446
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "Impossible de lire le head de la fusion : %s"
+
+#: gitk:3454
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "Erreur à la lecture de l'index : %s"
+
+#: gitk:3479
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "Impossible de démarrer git blame : %s"
+
+#: gitk:3482 gitk:6271
+msgid "Searching"
+msgstr "Recherche en cours"
+
+#: gitk:3514
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "Erreur à l'exécution de git blame : %s"
+
+#: gitk:3542
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr "Cette ligne est issue du commit %s, qui n'est pas dans cette
vue" +
+#: gitk:3556
+msgid "External diff viewer failed:"
+msgstr "Échec de l'outil externe de visualisation des différences"
+
+#: gitk:3674
+msgid "Gitk view definition"
+msgstr "Définition des vues de Gitk"
+
+#: gitk:3678
+msgid "Remember this view"
+msgstr "Se souvenir de cette vue"
+
+#: gitk:3679
+msgid "References (space separated list):"
+msgstr "Références (liste d'éléments séparés par des espaces) :"
+
+#: gitk:3680
+msgid "Branches & tags:"
+msgstr "Branches & tags :"
+
+#: gitk:3681
+msgid "All refs"
+msgstr "Toutes les références"
+
+#: gitk:3682
+msgid "All (local) branches"
+msgstr "Toutes les branches (locales)"
+
+#: gitk:3683
+msgid "All tags"
+msgstr "Tous les tags"
+
+#: gitk:3684
+msgid "All remote-tracking branches"
+msgstr "Toutes les branches de suivi distante"
+
+#: gitk:3685
+msgid "Commit Info (regular expressions):"
+msgstr "Info sur les commits (expressions régulières) :"
+
+#: gitk:3686
+msgid "Author:"
+msgstr "Auteur :"
+
+#: gitk:3687
+msgid "Committer:"
+msgstr "Commiteur :"
+
+#: gitk:3688
+msgid "Commit Message:"
+msgstr "Message de commit :"
+
+#: gitk:3689
+msgid "Matches all Commit Info criteria"
+msgstr "Correspond à tous les critères d'Info sur les commits"
+
+#: gitk:3690
+msgid "Changes to Files:"
+msgstr "Changements des fichiers :"
+
+#: gitk:3691
+msgid "Fixed String"
+msgstr "Chaîne Figée"
+
+#: gitk:3692
+msgid "Regular Expression"
+msgstr "Expression Régulière"
+
+#: gitk:3693
+msgid "Search string:"
+msgstr "Recherche de la chaîne :"
+
+#: gitk:3694
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17,
2009 " +"15:27:38\"):"
+msgstr ""
+"Dates des commits (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March
17, " +"2009 15:27:38\") :"
+
+#: gitk:3695
+msgid "Since:"
+msgstr "De :"
+
+#: gitk:3696
+msgid "Until:"
+msgstr "Jusqu'au :"
+
+#: gitk:3697
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "Limiter et/ou sauter un certain nombre (entier positif) de
révision :" +
+#: gitk:3698
+msgid "Number to show:"
+msgstr "Nombre à afficher :"
+
+#: gitk:3699
+msgid "Number to skip:"
+msgstr "Nombre à sauter :"
+
+#: gitk:3700
+msgid "Miscellaneous options:"
+msgstr "Options diverses"
+
+#: gitk:3701
+msgid "Strictly sort by date"
+msgstr "Trier par date"
+
+#FIXME : traduction de "branch sides"
+#: gitk:3702
+#, fuzzy
+msgid "Mark branch sides"
+msgstr "Marquer les extrémités des branches"
+
+#: gitk:3703
+msgid "Limit to first parent"
+msgstr "Limiter au premier ancêtre"
+
+#: gitk:3704
+msgid "Simple history"
+msgstr "Historique simple"
+
+#: gitk:3705
+msgid "Additional arguments to git log:"
+msgstr "Arguments supplémentaires de git log :"
+
+#: gitk:3706
+msgid "Enter files and directories to include, one per line:"
+msgstr "Saisir les fichiers et répertoires à inclure, un par ligne :"
+
+#: gitk:3707
+msgid "Command to generate more commits to include:"
+msgstr "Commande pour générer plus de commits à inclure :"
+
+#: gitk:3829
+msgid "Gitk: edit view"
+msgstr "Gitk : éditer la vue"
+
+#: gitk:3837
+msgid "-- criteria for selecting revisions"
+msgstr "-- critère pour la sélection des révisions"
+
+#: gitk:3842
+msgid "View Name:"
+msgstr "Nom de la vue :"
+
+#: gitk:3917
+msgid "Apply (F5)"
+msgstr "Appliquer (F5)"
+
+#: gitk:3955
+msgid "Error in commit selection arguments:"
+msgstr "Erreur dans les arguments de sélection des commits :"
+
+#: gitk:4008 gitk:4060 gitk:4508 gitk:4522 gitk:5783 gitk:11196
gitk:11197 +msgid "None"
+msgstr "Aucun"
+
+#: gitk:4456 gitk:6303 gitk:8065 gitk:8080
+msgid "Date"
+msgstr "Date"
+
+#: gitk:4456 gitk:6303
+msgid "CDate"
+msgstr "CDate"
+
+#: gitk:4605 gitk:4610
+msgid "Descendant"
+msgstr "Descendant"
+
+#: gitk:4606
+msgid "Not descendant"
+msgstr "Pas un descendant"
+
+#: gitk:4613 gitk:4618
+msgid "Ancestor"
+msgstr "Ancêtre"
+
+#: gitk:4614
+msgid "Not ancestor"
+msgstr "Pas un ancêtre"
+
+#: gitk:4904
+msgid "Local changes checked in to index but not committed"
+msgstr "Modifications locales enregistrées dans l'index mais non
commitées" +
+#: gitk:4940
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "Modifications locales non enregistrées dans l'index et non
commitées" +
+#: gitk:6621
+msgid "many"
+msgstr "nombreux"
+
+#: gitk:6805
+msgid "Tags:"
+msgstr "Tags :"
+
+#: gitk:6822 gitk:6828 gitk:8058
+msgid "Parent"
+msgstr "Parent"
+
+#: gitk:6833
+msgid "Child"
+msgstr "Enfant"
+
+#: gitk:6842
+msgid "Branch"
+msgstr "Branche"
+
+#: gitk:6845
+msgid "Follows"
+msgstr "Suit"
+
+#: gitk:6848
+msgid "Precedes"
+msgstr "Précède"
+
+#: gitk:7346
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "Erreur lors de la récupération des différences : %s"
+
+#: gitk:7886
+msgid "Goto:"
+msgstr "Aller à :"
+
+#: gitk:7888
+msgid "SHA1 ID:"
+msgstr "Id SHA1 :"
+
+#: gitk:7907
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr "Id SHA1 court %s est ambigu"
+
+#: gitk:7914
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "Id SHA1 %s est inconnu"
+
+#: gitk:7924
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr "Id SHA1 %s est inconnu"
+
+#: gitk:7926
+#, tcl-format
+msgid "Revision %s is not in the current view"
+msgstr "La révision %s n'est pas dans la vue courante"
+
+#: gitk:8068
+msgid "Children"
+msgstr "Enfants"
+
+#: gitk:8125
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "Réinitialiser la branche %s vers cet état"
+
+#: gitk:8127
+msgid "Detached head: can't reset"
+msgstr "Head détaché : impossible de réinitialiser"
+
+#: gitk:8236 gitk:8242
+msgid "Skipping merge commit "
+msgstr "Eviter le commit de la fusion "
+
+#: gitk:8251 gitk:8256
+msgid "Error getting patch ID for "
+msgstr "Erreur à l'obtention de l'ID du patch pour "
+
+#: gitk:8252 gitk:8257
+msgid " - stopping\n"
+msgstr " - arrêt en cours\n"
+
+#: gitk:8262 gitk:8265 gitk:8273 gitk:8283 gitk:8292
+msgid "Commit "
+msgstr "Commit "
+
+#: gitk:8266
+msgid ""
+" is the same patch as\n"
+" "
+msgstr ""
+"est le même patch que \n"
+" "
+
+#: gitk:8274
+msgid ""
+" differs from\n"
+" "
+msgstr ""
+" diffère de\n"
+" "
+
+#: gitk:8276
+msgid "- stopping\n"
+msgstr "- arrêt en cours\n"
+
+#: gitk:8284 gitk:8293
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr "a %s enfants - arrêt en cours\n"
+
+#: gitk:8324
+msgid "Top"
+msgstr "Haut"
+
+#: gitk:8325
+msgid "From"
+msgstr "De"
+
+#: gitk:8330
+msgid "To"
+msgstr "À"
+
+#: gitk:8354
+msgid "Generate patch"
+msgstr "Générer le patch"
+
+#: gitk:8356
+msgid "From:"
+msgstr "De :"
+
+#: gitk:8365
+msgid "To:"
+msgstr "À :"
+
+#: gitk:8374
+msgid "Reverse"
+msgstr "Inverser"
+
+#: gitk:8376 gitk:8561
+msgid "Output file:"
+msgstr "Fichier de sortie :"
+
+#: gitk:8382
+msgid "Generate"
+msgstr "Générer"
+
+#: gitk:8420
+msgid "Error creating patch:"
+msgstr "Erreur à la création du patch :"
+
+#: gitk:8443 gitk:8549 gitk:8606
+msgid "ID:"
+msgstr "ID :"
+
+#: gitk:8452
+msgid "Tag name:"
+msgstr "Nom du Tag :"
+
+#: gitk:8456 gitk:8615
+msgid "Create"
+msgstr "Créer"
+
+#: gitk:8473
+msgid "No tag name specified"
+msgstr "Aucun nom de tag spécifié"
+
+#: gitk:8477
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "Le tag \"%s\" existe déjà"
+
+#: gitk:8483
+msgid "Error creating tag:"
+msgstr "Erreur à la création du tag :"
+
+#: gitk:8558
+msgid "Command:"
+msgstr "Commande :"
+
+#: gitk:8566
+msgid "Write"
+msgstr "Écrire"
+
+#: gitk:8584
+msgid "Error writing commit:"
+msgstr "Erreur à l'ecriture du commit :"
+
+#: gitk:8611
+msgid "Name:"
+msgstr "Nom :"
+
+#: gitk:8634
+msgid "Please specify a name for the new branch"
+msgstr "Veuillez spécifier un nom pour la nouvelle branche"
+
+#: gitk:8639
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "La branche '%s' existe déjà. Écraser?"
+
+#: gitk:8705
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply
it?" +msgstr "Le Commit %s est déjà inclus dans la branche %s -- le
ré-appliquer " +"malgré tout?"
+
+#: gitk:8710
+msgid "Cherry-picking"
+msgstr "Cueillir (Cherry-picking)"
+
+#: gitk:8719
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr "La cueillette (cherry-pick) a échouée à cause de modifications
locales au fichier '%s'.\n" +"Veuillez commiter, réinitialiser ou
stasher vos changements et essayer de nouveau." +
+#: gitk:8725
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"La cueillette (cherry-pick) a échoué à cause d'un conflit lors d'une
fusion.\n" +"Souhaitez-vous exécuter git citool pour le résoudre?"
+
+#: gitk:8741
+msgid "No changes committed"
+msgstr "Aucun changement commité"
+
+#: gitk:8767
+msgid "Confirm reset"
+msgstr "Confirmer la réinitialisation"
+
+#: gitk:8769
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "Réinitialiser la branche %s à %s?"
+
+#: gitk:8773
+msgid "Reset type:"
+msgstr "Type de réinitialisation :"
+
+#: gitk:8777
+msgid "Soft: Leave working tree and index untouched"
+msgstr "Douce : Laisse l'arbre de travail et l'index intact"
+
+#: gitk:8780
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr "Hybride : Laisse l'arbre de travail dans son état courant,
réinitialise l'index" +
+#: gitk:8783
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"Dure : Réinitialise l'arbre de travail et l'index\n"
+"(abandonne TOUS les changements locaux)"
+
+#: gitk:8800
+msgid "Resetting"
+msgstr "Réinitialisation"
+
+#: gitk:8857
+msgid "Checking out"
+msgstr "Récupération"
+
+#: gitk:8910
+msgid "Cannot delete the currently checked-out branch"
+msgstr "Impossible de supprimer la branche en cours"
+
+#: gitk:8916
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+"Les commits de la branche %s ne sont dans aucune autre branche.\n"
+"Voulez-vous vraiment supprimer cette branche %s ?"
+
+#: gitk:8947
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "Tags et heads : %s"
+
+#: gitk:8962
+msgid "Filter"
+msgstr "Filtrer"
+
+#: gitk:9257
+msgid ""
+"Error reading commit topology information; branch and
preceding/following " +"tag information will be incomplete."
+msgstr ""
+"Erreur à la lecture des informations sur la topologie des commits, "
+"les informations sur les branches et les tags précédents/suivant "
+"seront incomplètes."
+
+#: gitk:10243
+msgid "Tag"
+msgstr "Tag"
+
+#: gitk:10243
+msgid "Id"
+msgstr "Id"
+
+#: gitk:10291
+msgid "Gitk font chooser"
+msgstr "Sélecteur de police de Gitk"
+
+#: gitk:10308
+msgid "B"
+msgstr "B"
+
+#: gitk:10311
+msgid "I"
+msgstr "I"
+
+#: gitk:10407
+msgid "Gitk preferences"
+msgstr "Préférences de Gitk"
+
+#: gitk:10409
+msgid "Commit list display options"
+msgstr "Options d'affichage de la liste des commits"
+
+#: gitk:10412
+msgid "Maximum graph width (lines)"
+msgstr "Longueur maximum du graphe (lignes)"
+
+#FIXME : Traduction standard de "pane"?
+#: gitk:10416
+#, tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "Longueur maximum du graphe (% du panneau)"
+
+#: gitk:10420
+msgid "Show local changes"
+msgstr "Montrer les changements locaux"
+
+#: gitk:10423
+msgid "Auto-select SHA1"
+msgstr "Sélection auto. du SHA1"
+
+#: gitk:10427
+msgid "Diff display options"
+msgstr "Options d'affichage des différences"
+
+#: gitk:10429
+msgid "Tab spacing"
+msgstr "Taille des tabulations"
+
+#: gitk:10432
+msgid "Display nearby tags"
+msgstr "Afficher les tags les plus proches"
+
+#: gitk:10435
+msgid "Hide remote refs"
+msgstr "Cacher les refs distantes"
+
+#: gitk:10438
+msgid "Limit diffs to listed paths"
+msgstr "Limiter les différences aux chemins listés"
+
+#: gitk:10441
+msgid "Support per-file encodings"
+msgstr "Support pour un encodage des caractères par fichier"
+
+#: gitk:10447 gitk:10512
+msgid "External diff tool"
+msgstr "Outil de diff externe"
+
+#: gitk:10449
+msgid "Choose..."
+msgstr "Choisir..."
+
+#: gitk:10454
+msgid "Colors: press to choose"
+msgstr "Couleurs : cliquer pour choisir"
+
+#: gitk:10457
+msgid "Background"
+msgstr "Arrière-plan"
+
+#: gitk:10458 gitk:10488
+msgid "background"
+msgstr "arrière plan"
+
+#: gitk:10461
+msgid "Foreground"
+msgstr "Premier plan"
+
+#: gitk:10462
+msgid "foreground"
+msgstr "premier plan"
+
+#: gitk:10465
+msgid "Diff: old lines"
+msgstr "Différences : anciennes lignes"
+
+#: gitk:10466
+msgid "diff old lines"
+msgstr "différences anciennes lignes"
+
+#: gitk:10470
+msgid "Diff: new lines"
+msgstr "Différences : nouvelles lignes"
+
+#: gitk:10471
+msgid "diff new lines"
+msgstr "différences nouvelles lignes"
+
+#: gitk:10475
+msgid "Diff: hunk header"
+msgstr "Différences : entête du hunk"
+
+#: gitk:10477
+msgid "diff hunk header"
+msgstr "différences : entête du hunk"
+
+#: gitk:10481
+msgid "Marked line bg"
+msgstr "Arrière-plan de la ligne marquée"
+
+#: gitk:10483
+msgid "marked line background"
+msgstr "Arrière-plan de la ligne marquée"
+
+#: gitk:10487
+msgid "Select bg"
+msgstr "Sélectionner l'arrière-plan"
+
+#: gitk:10491
+msgid "Fonts: press to choose"
+msgstr "Polices : cliquer pour choisir"
+
+#: gitk:10493
+msgid "Main font"
+msgstr "Police principale"
+
+#: gitk:10494
+msgid "Diff display font"
+msgstr "Police d'affichage des différences"
+
+#: gitk:10495
+msgid "User interface font"
+msgstr "Police de l'interface utilisateur"
+
+#: gitk:10522
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "Gitk : choisir la couleur de %s"
+
+#: gitk:10973
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+"Désolé, gitk ne peut être exécuté avec cette version de Tcl/Tk.\n"
+" Gitk requiert Tcl/Tk version 8.4 ou supérieur."
+
+#: gitk:11101
+msgid "Cannot find a git repository here."
+msgstr "Impossible de trouver un dépôt git ici."
+
+#: gitk:11105
+#, tcl-format
+msgid "Cannot find the git directory \"%s\"."
+msgstr "Impossible de trouver le répertoire git \"%s\"."
+
+#: gitk:11152
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "Argument '%s' ambigu : à la fois une révision et un nom et
fichier" +
+#: gitk:11164
+msgid "Bad arguments to gitk:"
+msgstr "Arguments invalides pour gitk :"
+
+#: gitk:11249
+msgid "Command line"
+msgstr "Ligne de commande"
^ permalink raw reply related
* RE: Hey - A Conceptual Simplication....
From: George Dennie @ 2009-11-19 20:12 UTC (permalink / raw)
To: git
Cc: B.Steinbrink, 'Jason Sewall', 'Jakub Narebski',
'Jan Krüger', torvalds
In-Reply-To: <20091119074226.GA23304@atjola.homenet>
Thanks Jakub Narebski and Björn Steinbrink...Nice description Björn.
I think an important piece of conceptual information missing from the docs
is a concise list of the conceptual properties defining the context of the
working tree, index, and repository during normal use. This itemization
would go far in explaining the synergies between the various commands.
Functionally, all the commands merely manipulate these properties. If these
properties were summarize in context one would expect that would represent a
very complete functional model of Git. A user could review the description
figure what they wanted to do and then find the command(s) to accomplish it.
Presently this knowledge is accreted over time as oppose to merely being
read and in the space of a few minutes "groked" (of course it could be that
I am particularly limited :).
For example, towards a functional model, is this close? (note: all
properties can be blank/empty)...
REPOSITORIES
Collection of Commits
Collection of Branches
-- collection of commits without children
-- as a result each commits either augments
-- and existing branch or creates a new one
Master Branch
-- typically the publishable development history
INDEX
Collections of Parent/Merge Commits
-- the commit will use all these as its parent
Staged Commit
-- these changes are shown relative to the working tree
Default Branch
-- the history the staged commit is suppose to augment
Collection of Stashes
-- these are not copies of the working tree since they
-- only contain "versioned" files/folders and so is not
-- a backup
WORKING_TREE
Collection of Files and Folders
As far as I can tell, the working tree is not suppose to be stateful, but it
seems the commands treat it as such.
What is interesting is that branches serve to encourage a serialized view of
commits. More than structure, they are like books in a library narrating a
development story. Consequently, and interestingly, they are as much the
purpose of the repository as the commits they organize...which is
interesting.
Again, thanks for your patients.
George.
^ permalink raw reply
* [PATCH] Documentation: undocument gc'd function graph_release()
From: Greg Price @ 2009-11-19 20:58 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
graph_release() was removed in 064bfbd. Cut it from the API
documentation and a comment.
Signed-off-by: Greg Price <price@ksplice.com>
---
Documentation/technical/api-history-graph.txt | 5 -----
graph.h | 1 -
2 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/Documentation/technical/api-history-graph.txt
b/Documentation/technical/api-history-graph.txt
index d66e61b..d6fc90a 100644
--- a/Documentation/technical/api-history-graph.txt
+++ b/Documentation/technical/api-history-graph.txt
@@ -11,9 +11,6 @@ Core functions:
* `graph_init()` creates a new `struct git_graph`
-* `graph_release()` destroys a `struct git_graph`, and frees the memory
- associated with it.
-
* `graph_update()` moves the graph to a new commit.
* `graph_next_line()` outputs the next line of the graph into a strbuf. It
@@ -134,8 +131,6 @@ while ((commit = get_revision(opts)) != NULL) {
putchar(opts->diffopt.line_termination);
}
}
-
-graph_release(graph);
------------
Sample output
diff --git a/graph.h b/graph.h
index bc30d68..b82ae87 100644
--- a/graph.h
+++ b/graph.h
@@ -6,7 +6,6 @@ struct git_graph;
/*
* Create a new struct git_graph.
- * The graph should be freed with graph_release() when no longer needed.
*/
struct git_graph *graph_init(struct rev_info *opt);
--
1.6.5.2.37.ge17fd.dirty
^ permalink raw reply related
* [PATCH] git-update-index: report(...) now flushes stdout after printing the report line
From: Sebastian Thiel @ 2009-11-19 21:17 UTC (permalink / raw)
To: git
This makes it equivalent to the behavior of git-hash-object and allows tools to
write one path
to stdin, flush and assure the work is done once it reads the corresponding
report line.
Previously attempting to do that would result in the program blocking as
git-update-index
did not flush its report line (yet). External programs use the git-hash-object
like behavior
to precisely control when which work is done while providing just-in-time
feedback to the end-user.
---
builtin-update-index.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/builtin-update-index.c b/builtin-update-index.c
index 92beaaf..08bf933 100644
--- a/builtin-update-index.c
+++ b/builtin-update-index.c
@@ -37,6 +37,7 @@ static void report(const char *fmt, ...)
va_start(vp, fmt);
vprintf(fmt, vp);
putchar('\n');
+ maybe_flush_or_die(stdout, "line to stdout");
va_end(vp);
}
--
1.6.5.3.172.g9e796
^ permalink raw reply related
* [PATCH] No diff -b/-w output for all-whitespace changes
From: Greg Bacon @ 2009-11-19 21:12 UTC (permalink / raw)
To: git; +Cc: gitster, Greg Bacon
Change git-diff's whitespace-ignoring modes to generate
output only if a non-empty patch results, which git-apply
rejects.
Update the tests to look for the new behavior.
Signed-off-by: Greg Bacon <gbacon@dbresearch.net>
---
diff.c | 35 +++++++++++++++++++++++++++--------
t/t4015-diff-whitespace.sh | 14 ++++++++++++--
2 files changed, 39 insertions(+), 10 deletions(-)
diff --git a/diff.c b/diff.c
index 0d7f5ea..108de23 100644
--- a/diff.c
+++ b/diff.c
@@ -189,6 +189,7 @@ struct emit_callback {
struct diff_words_data *diff_words;
int *found_changesp;
FILE *file;
+ struct strbuf *header;
};
static int count_lines(const char *data, int size)
@@ -755,6 +756,11 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
const char *plain = diff_get_color(ecbdata->color_diff, DIFF_PLAIN);
const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET);
+ if (ecbdata->header) {
+ fprintf(ecbdata->file, "%s", ecbdata->header->buf);
+ strbuf_reset(ecbdata->header);
+ ecbdata->header = NULL;
+ }
*(ecbdata->found_changesp) = 1;
if (ecbdata->label_path[0]) {
@@ -1561,6 +1567,7 @@ static void builtin_diff(const char *name_a,
const char *reset = diff_get_color_opt(o, DIFF_RESET);
const char *a_prefix, *b_prefix;
const char *textconv_one = NULL, *textconv_two = NULL;
+ struct strbuf header = STRBUF_INIT;
if (DIFF_OPT_TST(o, SUBMODULE_LOG) &&
(!one->mode || S_ISGITLINK(one->mode)) &&
@@ -1595,25 +1602,26 @@ static void builtin_diff(const char *name_a,
b_two = quote_two(b_prefix, name_b + (*name_b == '/'));
lbl[0] = DIFF_FILE_VALID(one) ? a_one : "/dev/null";
lbl[1] = DIFF_FILE_VALID(two) ? b_two : "/dev/null";
- fprintf(o->file, "%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
+ strbuf_addf(&header, "%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
if (lbl[0][0] == '/') {
/* /dev/null */
- fprintf(o->file, "%snew file mode %06o%s\n", set, two->mode, reset);
+ strbuf_addf(&header, "%snew file mode %06o%s\n", set, two->mode, reset);
if (xfrm_msg && xfrm_msg[0])
- fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
+ strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
}
else if (lbl[1][0] == '/') {
- fprintf(o->file, "%sdeleted file mode %06o%s\n", set, one->mode, reset);
+ strbuf_addf(&header, "%sdeleted file mode %06o%s\n", set, one->mode, reset);
if (xfrm_msg && xfrm_msg[0])
- fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
+ strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
}
else {
if (one->mode != two->mode) {
- fprintf(o->file, "%sold mode %06o%s\n", set, one->mode, reset);
- fprintf(o->file, "%snew mode %06o%s\n", set, two->mode, reset);
+ strbuf_addf(&header, "%sold mode %06o%s\n", set, one->mode, reset);
+ strbuf_addf(&header, "%snew mode %06o%s\n", set, two->mode, reset);
}
if (xfrm_msg && xfrm_msg[0])
- fprintf(o->file, "%s%s%s\n", set, xfrm_msg, reset);
+ strbuf_addf(&header, "%s%s%s\n", set, xfrm_msg, reset);
+
/*
* we do not run diff between different kind
* of objects.
@@ -1623,6 +1631,8 @@ static void builtin_diff(const char *name_a,
if (complete_rewrite &&
(textconv_one || !diff_filespec_is_binary(one)) &&
(textconv_two || !diff_filespec_is_binary(two))) {
+ fprintf(o->file, "%s", header.buf);
+ strbuf_reset(&header);
emit_rewrite_diff(name_a, name_b, one, two,
textconv_one, textconv_two, o);
o->found_changes = 1;
@@ -1640,6 +1650,8 @@ static void builtin_diff(const char *name_a,
if (mf1.size == mf2.size &&
!memcmp(mf1.ptr, mf2.ptr, mf1.size))
goto free_ab_and_return;
+ fprintf(o->file, "%s", header.buf);
+ strbuf_reset(&header);
if (DIFF_OPT_TST(o, BINARY))
emit_binary_diff(o->file, &mf1, &mf2);
else
@@ -1656,6 +1668,11 @@ static void builtin_diff(const char *name_a,
struct emit_callback ecbdata;
const struct userdiff_funcname *pe;
+ if (!DIFF_XDL_TST(o, WHITESPACE_FLAGS)) {
+ fprintf(o->file, "%s", header.buf);
+ strbuf_reset(&header);
+ }
+
if (textconv_one) {
size_t size;
mf1.ptr = run_textconv(textconv_one, one, &size);
@@ -1685,6 +1702,7 @@ static void builtin_diff(const char *name_a,
if (ecbdata.ws_rule & WS_BLANK_AT_EOF)
check_blank_at_eof(&mf1, &mf2, &ecbdata);
ecbdata.file = o->file;
+ ecbdata.header = header.len ? &header : NULL;
xpp.flags = XDF_NEED_MINIMAL | o->xdl_opts;
xecfg.ctxlen = o->context;
xecfg.interhunkctxlen = o->interhunkcontext;
@@ -1729,6 +1747,7 @@ static void builtin_diff(const char *name_a,
}
free_ab_and_return:
+ strbuf_release(&header);
diff_free_filespec_data(one);
diff_free_filespec_data(two);
free(a_one);
diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
index 8dd147d..90f3342 100755
--- a/t/t4015-diff-whitespace.sh
+++ b/t/t4015-diff-whitespace.sh
@@ -93,8 +93,6 @@ git diff > out
test_expect_success 'another test, without options' 'test_cmp expect out'
cat << EOF > expect
-diff --git a/x b/x
-index d99af23..8b32fb5 100644
EOF
git diff -w > out
test_expect_success 'another test, with -w' 'test_cmp expect out'
@@ -386,6 +384,18 @@ test_expect_success 'checkdiff allows new blank lines' '
git diff --check
'
+cat <<EOF >expect
+EOF
+test_expect_success 'whitespace-only changes not reported' '
+ git reset --hard &&
+ echo >x "hello world" &&
+ git add x &&
+ git commit -m "hello 1" &&
+ echo >x "hello world" &&
+ git diff -b >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'combined diff with autocrlf conversion' '
git reset --hard &&
--
1.6.5.3
^ permalink raw reply related
* [PATCHv4] gitk french translation
From: Emmanuel Trillaud @ 2009-11-19 21:23 UTC (permalink / raw)
To: Emmanuel Trillaud
Cc: Nicolas Sebrecht, Maximilien Noal, Matthieu Moy, Nicolas Pitre,
Thomas Moulard, Guy Brand, Git Mailing List
In-Reply-To: <20091119210124.8f4a5373.etrillaud@gmail.com>
Signed-off-by: Emmanuel Trillaud <etrillaud@gmail.com>
Signed-off-by: Thomas Moulard <thomas.moulard@gmail.com>
Signed-off-by: Guy Brand <gb@unistra.fr>
--
Guy Brand proofread the v3 of the translation and there was some typos,
so here is the v4
diff --git a/gitk-git/po/fr.po b/gitk-git/po/fr.po
new file mode 100644
index 0000000..2efb3c3
--- /dev/null
+++ b/gitk-git/po/fr.po
@@ -0,0 +1,1243 @@
+
+# French translation of the gitk package
+# Copyright (C) 2005-2008 Paul Mackerras. All rights reserved.
+# This file is distributed under the same license as the gitk package.
+# Translators:
+# Emmanuel Trillaud <etrillaud@gmail.com>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gitk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-05 15:16+0200\n"
+"PO-Revision-Date: 2009-11-19 22:11+0100\n"
+"Last-Translator: YOUR NAME <E-MAIL@ADDRESS>\n"
+"Language-Team: FRENCH\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+
+#: gitk:113
+msgid "Couldn't get list of unmerged files:"
+msgstr "Impossible de récupérer la liste des fichiers non fusionnés :"
+
+#: gitk:269
+msgid "Error parsing revisions:"
+msgstr "Erreur lors du parcours des révisions :"
+
+#: gitk:324
+msgid "Error executing --argscmd command:"
+msgstr "Erreur à l'exécution de la commande --argscmd :"
+
+#: gitk:337
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr "Aucun fichier sélectionné : --merge précisé, mais tous les"
+"fichiers sont fusionnés."
+
+#FIXME : améliorer la traduction de 'file limite'
+#: gitk:340
+#, fuzzy
+msgid ""
+"No files selected: --merge specified but no unmerged files are within
file " +"limit."
+msgstr "Aucun fichier sélectionné : --merge précisé mais aucun fichier
non " +"fusionné n'est dans la limite des fichiers."
+
+#: gitk:362 gitk:509
+msgid "Error executing git log:"
+msgstr "Erreur à l'exécution de git log :"
+
+#: gitk:380 gitk:525
+msgid "Reading"
+msgstr "Lecture en cours"
+
+#: gitk:440 gitk:4123
+msgid "Reading commits..."
+msgstr "Lecture des commits..."
+
+#: gitk:443 gitk:1561 gitk:4126
+msgid "No commits selected"
+msgstr "Aucun commit sélectionné"
+
+#: gitk:1437
+msgid "Can't parse git log output:"
+msgstr "Impossible de lire la sortie de git log :"
+
+#: gitk:1657
+msgid "No commit information available"
+msgstr "Aucune information disponible sur le commit"
+
+#: gitk:1793 gitk:1817 gitk:3916 gitk:8786 gitk:10322 gitk:10498
+msgid "OK"
+msgstr "OK"
+
+#: gitk:1819 gitk:3918 gitk:8383 gitk:8457 gitk:8567 gitk:8616
gitk:8788 +#: gitk:10323 gitk:10499
+msgid "Cancel"
+msgstr "Annuler"
+
+#: gitk:1919
+msgid "Update"
+msgstr "Mise à jour"
+
+#: gitk:1920
+msgid "Reload"
+msgstr "Recharger"
+
+#: gitk:1921
+msgid "Reread references"
+msgstr "Relire les références"
+
+#: gitk:1922
+msgid "List references"
+msgstr "Lister les références"
+
+#: gitk:1924
+msgid "Start git gui"
+msgstr "Démarrer git gui"
+
+#: gitk:1926
+msgid "Quit"
+msgstr "Quitter"
+
+#: gitk:1918
+msgid "File"
+msgstr "Fichier"
+
+#: gitk:1930
+msgid "Preferences"
+msgstr "Préférences"
+
+#: gitk:1929
+msgid "Edit"
+msgstr "Éditer"
+
+#: gitk:1934
+msgid "New view..."
+msgstr "Nouvelle vue..."
+
+#: gitk:1935
+msgid "Edit view..."
+msgstr "Éditer la vue..."
+
+#: gitk:1936
+msgid "Delete view"
+msgstr "Supprimer la vue"
+
+#: gitk:1938
+msgid "All files"
+msgstr "Tous les fichiers"
+
+#: gitk:1933 gitk:3670
+msgid "View"
+msgstr "Vue"
+
+#: gitk:1943 gitk:1953 gitk:2654
+msgid "About gitk"
+msgstr "À propos de gitk"
+
+#: gitk:1944 gitk:1958
+msgid "Key bindings"
+msgstr "Raccourcis clavier"
+
+#: gitk:1942 gitk:1957
+msgid "Help"
+msgstr "Aide"
+
+#: gitk:2018
+msgid "SHA1 ID: "
+msgstr "ID SHA1 :"
+
+#: gitk:2049
+msgid "Row"
+msgstr "Colonne"
+
+#: gitk:2080
+msgid "Find"
+msgstr "Recherche"
+
+#: gitk:2081
+msgid "next"
+msgstr "suivant"
+
+#: gitk:2082
+msgid "prev"
+msgstr "précédent"
+
+#: gitk:2083
+msgid "commit"
+msgstr "commit"
+
+#: gitk:2086 gitk:2088 gitk:4284 gitk:4307 gitk:4331 gitk:6272
gitk:6344 +#: gitk:6428
+msgid "containing:"
+msgstr "contient :"
+
+#: gitk:2089 gitk:3162 gitk:3167 gitk:4359
+msgid "touching paths:"
+msgstr "chemins modifiés :"
+
+#: gitk:2090 gitk:4364
+msgid "adding/removing string:"
+msgstr "ajoute/supprime la chaîne :"
+
+#: gitk:2099 gitk:2101
+msgid "Exact"
+msgstr "Exact"
+
+#: gitk:2101 gitk:4439 gitk:6240
+msgid "IgnCase"
+msgstr "Ignorer la casse"
+
+#: gitk:2101 gitk:4333 gitk:4437 gitk:6236
+msgid "Regexp"
+msgstr "Expression régulière"
+
+#: gitk:2103 gitk:2104 gitk:4458 gitk:4488 gitk:4495 gitk:6364
gitk:6432 +msgid "All fields"
+msgstr "Tous les champs"
+
+#: gitk:2104 gitk:4456 gitk:4488 gitk:6303
+msgid "Headline"
+msgstr "Surligner"
+
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6432 gitk:6866
+msgid "Comments"
+msgstr "Commentaires"
+
+#: gitk:2105 gitk:4456 gitk:4460 gitk:4495 gitk:6303 gitk:6801
gitk:8063 +#: gitk:8078
+msgid "Author"
+msgstr "Auteur"
+
+#: gitk:2105 gitk:4456 gitk:6303 gitk:6803
+msgid "Committer"
+msgstr "Auteur du commit"
+
+#: gitk:2134
+msgid "Search"
+msgstr "Rechercher"
+
+#: gitk:2141
+msgid "Diff"
+msgstr "Différences"
+
+#: gitk:2143
+msgid "Old version"
+msgstr "Ancienne version"
+
+#: gitk:2145
+msgid "New version"
+msgstr "Nouvelle version"
+
+#: gitk:2147
+msgid "Lines of context"
+msgstr "Lignes de contexte"
+
+#: gitk:2157
+msgid "Ignore space change"
+msgstr "Ignorer les modifications d'espace"
+
+#: gitk:2215
+msgid "Patch"
+msgstr "Patch"
+
+#: gitk:2217
+msgid "Tree"
+msgstr "Arbre"
+
+#: gitk:2361 gitk:2378
+msgid "Diff this -> selected"
+msgstr "Différences entre ceci et la sélection"
+
+#: gitk:2362 gitk:2379
+msgid "Diff selected -> this"
+msgstr "Différence entre sélection et ceci"
+
+#: gitk:2363 gitk:2380
+msgid "Make patch"
+msgstr "Créer patch"
+
+#: gitk:2364 gitk:8441
+msgid "Create tag"
+msgstr "Créer tag"
+
+#: gitk:2365 gitk:8547
+msgid "Write commit to file"
+msgstr "Écrire le commit dans un fichier"
+
+#: gitk:2366 gitk:8604
+msgid "Create new branch"
+msgstr "Créer une nouvelle branche"
+
+#: gitk:2367
+msgid "Cherry-pick this commit"
+msgstr "Cueillir (cherry-pick) ce commit"
+
+#: gitk:2368
+msgid "Reset HEAD branch to here"
+msgstr "Réinitialiser la branche HEAD vers cet état"
+
+#: gitk:2369
+msgid "Mark this commit"
+msgstr "Marquer ce commit"
+
+#: gitk:2370
+msgid "Return to mark"
+msgstr "Retourner à la marque"
+
+#: gitk:2371
+msgid "Find descendant of this and mark"
+msgstr "Chercher le descendant de ceci et le marquer"
+
+#: gitk:2372
+msgid "Compare with marked commit"
+msgstr "Comparer avec le commit marqué"
+
+#: gitk:2386
+msgid "Check out this branch"
+msgstr "Récupérer cette branche"
+
+#: gitk:2387
+msgid "Remove this branch"
+msgstr "Supprimer cette branche"
+
+#: gitk:2394
+msgid "Highlight this too"
+msgstr "Surligner également ceci"
+
+#: gitk:2395
+msgid "Highlight this only"
+msgstr "Surligner seulement ceci"
+
+#: gitk:2396
+msgid "External diff"
+msgstr "Diff externe"
+
+#: gitk:2397
+msgid "Blame parent commit"
+msgstr "Blâmer le commit parent"
+
+#: gitk:2404
+msgid "Show origin of this line"
+msgstr "Montrer l'origine de cette ligne"
+
+#: gitk:2405
+msgid "Run git gui blame on this line"
+msgstr "Exécuter git gui blame sur cette ligne"
+
+#: gitk:2656
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public
License" +msgstr ""
+"\n"
+"Gitk - visualisateur de commit pour git\n"
+"\n"
+"Copyright © 2005-2008 Paul Mackerras\n"
+"\n"
+"Utilisation et redistribution soumises aux termes de la GNU General
Public License" +
+#: gitk:2664 gitk:2726 gitk:8969
+msgid "Close"
+msgstr "Fermer"
+
+#: gitk:2683
+msgid "Gitk key bindings"
+msgstr "Raccourcis clavier de Gitk"
+
+#: gitk:2686
+msgid "Gitk key bindings:"
+msgstr "Raccourcis clavier de Gitk :"
+
+#: gitk:2688
+#, tcl-format
+msgid "<%s-Q>\t\tQuit"
+msgstr "<%s-Q>\t\tQuitter"
+
+#: gitk:2689
+msgid "<Home>\t\tMove to first commit"
+msgstr "<Début>\t\tAller au premier commit"
+
+#: gitk:2690
+msgid "<End>\t\tMove to last commit"
+msgstr "<Fin>\t\tAller au dernier commit"
+
+#: gitk:2691
+msgid "<Up>, p, i\tMove up one commit"
+msgstr "<Haut>, p, i\t Aller au commit suivant"
+
+#: gitk:2692
+msgid "<Down>, n, k\tMove down one commit"
+msgstr "<Bas>, n, k\t Aller au commit précédent"
+
+#: gitk:2693
+msgid "<Left>, z, j\tGo back in history list"
+msgstr "<Gauche>, z, j\tReculer dans l'historique"
+
+#: gitk:2694
+msgid "<Right>, x, l\tGo forward in history list"
+msgstr "<Droite>, x, l\tAvancer dans l'historique"
+
+#: gitk:2695
+msgid "<PageUp>\tMove up one page in commit list"
+msgstr "<PageUp>\tMonter d'une page dans la liste des commits"
+
+#: gitk:2696
+msgid "<PageDown>\tMove down one page in commit list"
+msgstr "<PageDown>\tDescendre d'une page dans la liste des commits"
+
+#: gitk:2697
+#, tcl-format
+msgid "<%s-Home>\tScroll to top of commit list"
+msgstr "<%s-Début>\tAller en haut de la liste des commits"
+
+#: gitk:2698
+#, tcl-format
+msgid "<%s-End>\tScroll to bottom of commit list"
+msgstr "<%s-End>\tAller en bas de la liste des commits"
+
+#: gitk:2699
+#, tcl-format
+msgid "<%s-Up>\tScroll commit list up one line"
+msgstr "<%s-Up>\tMonter d'une ligne dans la liste des commits"
+
+#: gitk:2700
+#, tcl-format
+msgid "<%s-Down>\tScroll commit list down one line"
+msgstr "<%s-Down>\tDescendre d'une ligne dans la liste des commits"
+
+#: gitk:2701
+#, tcl-format
+msgid "<%s-PageUp>\tScroll commit list up one page"
+msgstr "<%s-PageUp>\tMonter d'une page dans la liste des commits"
+
+#: gitk:2702
+#, tcl-format
+msgid "<%s-PageDown>\tScroll commit list down one page"
+msgstr "<%s-PageDown>\tDescendre d'une page dans la liste des commits"
+
+#: gitk:2703
+msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
+msgstr "<Shift-Up>\tRecherche en arrière (vers l'avant, commits les
plus anciens)" +
+#: gitk:2704
+msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
+msgstr "<Shift-Down>\tRecherche en avant (vers l'arrière, commit les
plus récents)" +
+#: gitk:2705
+msgid "<Delete>, b\tScroll diff view up one page"
+msgstr "<Supprimer>, b\tMonter d'une page dans la vue des différences"
+
+#: gitk:2706
+msgid "<Backspace>\tScroll diff view up one page"
+msgstr "<Backspace>\tMonter d'une page dans la vue des différences"
+
+#: gitk:2707
+msgid "<Space>\t\tScroll diff view down one page"
+msgstr "<Espace>\t\tDescendre d'une page dans la vue des différences"
+
+#: gitk:2708
+msgid "u\t\tScroll diff view up 18 lines"
+msgstr "u\t\tMonter de 18 lignes dans la vue des différences"
+
+#: gitk:2709
+msgid "d\t\tScroll diff view down 18 lines"
+msgstr "d\t\tDescendre de 18 lignes dans la vue des différences"
+
+#: gitk:2710
+#, tcl-format
+msgid "<%s-F>\t\tFind"
+msgstr "<%s-F>\t\tRechercher"
+
+#: gitk:2711
+#, tcl-format
+msgid "<%s-G>\t\tMove to next find hit"
+msgstr "<%s-G>\t\tAller au résultat de recherche suivant"
+
+#: gitk:2712
+msgid "<Return>\tMove to next find hit"
+msgstr "<Return>\t\tAller au résultat de recherche suivant"
+
+#: gitk:2713
+msgid "/\t\tFocus the search box"
+msgstr "/\t\tFocus sur la zone de recherche"
+
+#: gitk:2714
+msgid "?\t\tMove to previous find hit"
+msgstr "?\t\tAller au résultat de recherche précédent"
+
+#: gitk:2715
+msgid "f\t\tScroll diff view to next file"
+msgstr "f\t\tAller au prochain fichier dans la vue des différences"
+
+#: gitk:2716
+#, tcl-format
+msgid "<%s-S>\t\tSearch for next hit in diff view"
+msgstr "<%s-S>\t\tAller au résultat suivant dans la vue des
différences" +
+#: gitk:2717
+#, tcl-format
+msgid "<%s-R>\t\tSearch for previous hit in diff view"
+msgstr "<%s-R>\t\tAller au résultat précédent dans la vue des
différences" +
+#: gitk:2718
+#, tcl-format
+msgid "<%s-KP+>\tIncrease font size"
+msgstr "<%s-KP+>\tAugmenter la taille de la police"
+
+#: gitk:2719
+#, tcl-format
+msgid "<%s-plus>\tIncrease font size"
+msgstr "<%s-plus>\tAugmenter la taille de la police"
+
+#: gitk:2720
+#, tcl-format
+msgid "<%s-KP->\tDecrease font size"
+msgstr "<%s-KP->\tDiminuer la taille de la police"
+
+#: gitk:2721
+#, tcl-format
+msgid "<%s-minus>\tDecrease font size"
+msgstr "<%s-minus>\tDiminuer la taille de la police"
+
+#: gitk:2722
+msgid "<F5>\t\tUpdate"
+msgstr "<F5>\t\tMise à jour"
+
+#: gitk:3177
+#, tcl-format
+msgid "Error getting \"%s\" from %s:"
+msgstr "Erreur en obtenant \"%s\" de %s:"
+
+#: gitk:3234 gitk:3243
+#, tcl-format
+msgid "Error creating temporary directory %s:"
+msgstr "Erreur lors de la création du répertoire temporaire %s :"
+
+#: gitk:3255
+msgid "command failed:"
+msgstr "échec de la commande :"
+
+#: gitk:3401
+msgid "No such commit"
+msgstr "Commit inexistant"
+
+#: gitk:3415
+msgid "git gui blame: command failed:"
+msgstr "git gui blame : échec de la commande :"
+
+#: gitk:3446
+#, tcl-format
+msgid "Couldn't read merge head: %s"
+msgstr "Impossible de lire le head de la fusion : %s"
+
+#: gitk:3454
+#, tcl-format
+msgid "Error reading index: %s"
+msgstr "Erreur à la lecture de l'index : %s"
+
+#: gitk:3479
+#, tcl-format
+msgid "Couldn't start git blame: %s"
+msgstr "Impossible de démarrer git blame : %s"
+
+#: gitk:3482 gitk:6271
+msgid "Searching"
+msgstr "Recherche en cours"
+
+#: gitk:3514
+#, tcl-format
+msgid "Error running git blame: %s"
+msgstr "Erreur à l'exécution de git blame : %s"
+
+#: gitk:3542
+#, tcl-format
+msgid "That line comes from commit %s, which is not in this view"
+msgstr "Cette ligne est issue du commit %s, qui n'est pas dans cette
vue" +
+#: gitk:3556
+msgid "External diff viewer failed:"
+msgstr "Échec de l'outil externe de visualisation des différences"
+
+#: gitk:3674
+msgid "Gitk view definition"
+msgstr "Définition des vues de Gitk"
+
+#: gitk:3678
+msgid "Remember this view"
+msgstr "Se souvenir de cette vue"
+
+#: gitk:3679
+msgid "References (space separated list):"
+msgstr "Références (liste d'éléments séparés par des espaces) :"
+
+#: gitk:3680
+msgid "Branches & tags:"
+msgstr "Branches & tags :"
+
+#: gitk:3681
+msgid "All refs"
+msgstr "Toutes les références"
+
+#: gitk:3682
+msgid "All (local) branches"
+msgstr "Toutes les branches (locales)"
+
+#: gitk:3683
+msgid "All tags"
+msgstr "Tous les tags"
+
+#: gitk:3684
+msgid "All remote-tracking branches"
+msgstr "Toutes les branches de suivi à distance"
+
+#: gitk:3685
+msgid "Commit Info (regular expressions):"
+msgstr "Info sur les commits (expressions régulières) :"
+
+#: gitk:3686
+msgid "Author:"
+msgstr "Auteur :"
+
+#: gitk:3687
+msgid "Committer:"
+msgstr "Commiteur :"
+
+#: gitk:3688
+msgid "Commit Message:"
+msgstr "Message de commit :"
+
+#: gitk:3689
+msgid "Matches all Commit Info criteria"
+msgstr "Correspond à tous les critères d'Info sur les commits"
+
+#: gitk:3690
+msgid "Changes to Files:"
+msgstr "Changements des fichiers :"
+
+#: gitk:3691
+msgid "Fixed String"
+msgstr "Chaîne Figée"
+
+#: gitk:3692
+msgid "Regular Expression"
+msgstr "Expression Régulière"
+
+#: gitk:3693
+msgid "Search string:"
+msgstr "Recherche de la chaîne :"
+
+#: gitk:3694
+msgid ""
+"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17,
2009 " +"15:27:38\"):"
+msgstr ""
+"Dates des commits (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March
17, " +"2009 15:27:38\") :"
+
+#: gitk:3695
+msgid "Since:"
+msgstr "De :"
+
+#: gitk:3696
+msgid "Until:"
+msgstr "Jusqu'au :"
+
+#: gitk:3697
+msgid "Limit and/or skip a number of revisions (positive integer):"
+msgstr "Limiter et/ou sauter un certain nombre (entier positif) de
révision :" +
+#: gitk:3698
+msgid "Number to show:"
+msgstr "Nombre à afficher :"
+
+#: gitk:3699
+msgid "Number to skip:"
+msgstr "Nombre à sauter :"
+
+#: gitk:3700
+msgid "Miscellaneous options:"
+msgstr "Options diverses"
+
+#: gitk:3701
+msgid "Strictly sort by date"
+msgstr "Trier par date"
+
+#FIXME : traduction de "branch sides"
+#: gitk:3702
+#, fuzzy
+msgid "Mark branch sides"
+msgstr "Marquer les extrémités des branches"
+
+#: gitk:3703
+msgid "Limit to first parent"
+msgstr "Limiter au premier ancêtre"
+
+#: gitk:3704
+msgid "Simple history"
+msgstr "Historique simple"
+
+#: gitk:3705
+msgid "Additional arguments to git log:"
+msgstr "Arguments supplémentaires de git log :"
+
+#: gitk:3706
+msgid "Enter files and directories to include, one per line:"
+msgstr "Saisir les fichiers et répertoires à inclure, un par ligne :"
+
+#: gitk:3707
+msgid "Command to generate more commits to include:"
+msgstr "Commande pour générer plus de commits à inclure :"
+
+#: gitk:3829
+msgid "Gitk: edit view"
+msgstr "Gitk : éditer la vue"
+
+#: gitk:3837
+msgid "-- criteria for selecting revisions"
+msgstr "-- critère pour la sélection des révisions"
+
+#: gitk:3842
+msgid "View Name:"
+msgstr "Nom de la vue :"
+
+#: gitk:3917
+msgid "Apply (F5)"
+msgstr "Appliquer (F5)"
+
+#: gitk:3955
+msgid "Error in commit selection arguments:"
+msgstr "Erreur dans les arguments de sélection des commits :"
+
+#: gitk:4008 gitk:4060 gitk:4508 gitk:4522 gitk:5783 gitk:11196
gitk:11197 +msgid "None"
+msgstr "Aucun"
+
+#: gitk:4456 gitk:6303 gitk:8065 gitk:8080
+msgid "Date"
+msgstr "Date"
+
+#: gitk:4456 gitk:6303
+msgid "CDate"
+msgstr "CDate"
+
+#: gitk:4605 gitk:4610
+msgid "Descendant"
+msgstr "Descendant"
+
+#: gitk:4606
+msgid "Not descendant"
+msgstr "Pas un descendant"
+
+#: gitk:4613 gitk:4618
+msgid "Ancestor"
+msgstr "Ancêtre"
+
+#: gitk:4614
+msgid "Not ancestor"
+msgstr "Pas un ancêtre"
+
+#: gitk:4904
+msgid "Local changes checked in to index but not committed"
+msgstr "Modifications locales enregistrées dans l'index mais non
commitées" +
+#: gitk:4940
+msgid "Local uncommitted changes, not checked in to index"
+msgstr "Modifications locales non enregistrées dans l'index et non
commitées" +
+#: gitk:6621
+msgid "many"
+msgstr "nombreux"
+
+#: gitk:6805
+msgid "Tags:"
+msgstr "Tags :"
+
+#: gitk:6822 gitk:6828 gitk:8058
+msgid "Parent"
+msgstr "Parent"
+
+#: gitk:6833
+msgid "Child"
+msgstr "Enfant"
+
+#: gitk:6842
+msgid "Branch"
+msgstr "Branche"
+
+#: gitk:6845
+msgid "Follows"
+msgstr "Suit"
+
+#: gitk:6848
+msgid "Precedes"
+msgstr "Précède"
+
+#: gitk:7346
+#, tcl-format
+msgid "Error getting diffs: %s"
+msgstr "Erreur lors de la récupération des différences : %s"
+
+#: gitk:7886
+msgid "Goto:"
+msgstr "Aller à :"
+
+#: gitk:7888
+msgid "SHA1 ID:"
+msgstr "Id SHA1 :"
+
+#: gitk:7907
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr "Id SHA1 court %s est ambigu"
+
+#: gitk:7914
+#, tcl-format
+msgid "Revision %s is not known"
+msgstr "Id SHA1 %s est inconnu"
+
+#: gitk:7924
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr "Id SHA1 %s est inconnu"
+
+#: gitk:7926
+#, tcl-format
+msgid "Revision %s is not in the current view"
+msgstr "La révision %s n'est pas dans la vue courante"
+
+#: gitk:8068
+msgid "Children"
+msgstr "Enfants"
+
+#: gitk:8125
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "Réinitialiser la branche %s vers cet état"
+
+#: gitk:8127
+msgid "Detached head: can't reset"
+msgstr "Head détaché : impossible de réinitialiser"
+
+#: gitk:8236 gitk:8242
+msgid "Skipping merge commit "
+msgstr "Éviter le commit de la fusion "
+
+#: gitk:8251 gitk:8256
+msgid "Error getting patch ID for "
+msgstr "Erreur à l'obtention de l'ID du patch pour "
+
+#: gitk:8252 gitk:8257
+msgid " - stopping\n"
+msgstr " - arrêt en cours\n"
+
+#: gitk:8262 gitk:8265 gitk:8273 gitk:8283 gitk:8292
+msgid "Commit "
+msgstr "Commit "
+
+#: gitk:8266
+msgid ""
+" is the same patch as\n"
+" "
+msgstr ""
+"est le même patch que \n"
+" "
+
+#: gitk:8274
+msgid ""
+" differs from\n"
+" "
+msgstr ""
+" diffère de\n"
+" "
+
+#: gitk:8276
+msgid "- stopping\n"
+msgstr "- arrêt en cours\n"
+
+#: gitk:8284 gitk:8293
+#, tcl-format
+msgid " has %s children - stopping\n"
+msgstr "a %s enfants - arrêt en cours\n"
+
+#: gitk:8324
+msgid "Top"
+msgstr "Haut"
+
+#: gitk:8325
+msgid "From"
+msgstr "De"
+
+#: gitk:8330
+msgid "To"
+msgstr "À"
+
+#: gitk:8354
+msgid "Generate patch"
+msgstr "Générer le patch"
+
+#: gitk:8356
+msgid "From:"
+msgstr "De :"
+
+#: gitk:8365
+msgid "To:"
+msgstr "À :"
+
+#: gitk:8374
+msgid "Reverse"
+msgstr "Inverser"
+
+#: gitk:8376 gitk:8561
+msgid "Output file:"
+msgstr "Fichier de sortie :"
+
+#: gitk:8382
+msgid "Generate"
+msgstr "Générer"
+
+#: gitk:8420
+msgid "Error creating patch:"
+msgstr "Erreur à la création du patch :"
+
+#: gitk:8443 gitk:8549 gitk:8606
+msgid "ID:"
+msgstr "ID :"
+
+#: gitk:8452
+msgid "Tag name:"
+msgstr "Nom du Tag :"
+
+#: gitk:8456 gitk:8615
+msgid "Create"
+msgstr "Créer"
+
+#: gitk:8473
+msgid "No tag name specified"
+msgstr "Aucun nom de tag spécifié"
+
+#: gitk:8477
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "Le tag \"%s\" existe déjà"
+
+#: gitk:8483
+msgid "Error creating tag:"
+msgstr "Erreur à la création du tag :"
+
+#: gitk:8558
+msgid "Command:"
+msgstr "Commande :"
+
+#: gitk:8566
+msgid "Write"
+msgstr "Écrire"
+
+#: gitk:8584
+msgid "Error writing commit:"
+msgstr "Erreur à l'ecriture du commit :"
+
+#: gitk:8611
+msgid "Name:"
+msgstr "Nom :"
+
+#: gitk:8634
+msgid "Please specify a name for the new branch"
+msgstr "Veuillez spécifier un nom pour la nouvelle branche"
+
+#: gitk:8639
+#, tcl-format
+msgid "Branch '%s' already exists. Overwrite?"
+msgstr "La branche '%s' existe déjà. Écraser?"
+
+#: gitk:8705
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply
it?" +msgstr "Le Commit %s est déjà inclus dans la branche %s -- le
ré-appliquer " +"malgré tout?"
+
+#: gitk:8710
+msgid "Cherry-picking"
+msgstr "Cueillir (Cherry-picking)"
+
+#: gitk:8719
+#, tcl-format
+msgid ""
+"Cherry-pick failed because of local changes to file '%s'.\n"
+"Please commit, reset or stash your changes and try again."
+msgstr "La cueillette (cherry-pick) a échouée à cause de modifications
locales du fichier '%s'.\n" +"Veuillez commiter, réinitialiser ou
stasher vos changements et essayer de nouveau." +
+#: gitk:8725
+msgid ""
+"Cherry-pick failed because of merge conflict.\n"
+"Do you wish to run git citool to resolve it?"
+msgstr ""
+"La cueillette (cherry-pick) a échouée à cause d'un conflit lors d'une
fusion.\n" +"Souhaitez-vous exécuter git citool pour le résoudre ?"
+
+#: gitk:8741
+msgid "No changes committed"
+msgstr "Aucun changement commité"
+
+#: gitk:8767
+msgid "Confirm reset"
+msgstr "Confirmer la réinitialisation"
+
+#: gitk:8769
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr "Réinitialiser la branche %s à %s?"
+
+#: gitk:8773
+msgid "Reset type:"
+msgstr "Type de réinitialisation :"
+
+#: gitk:8777
+msgid "Soft: Leave working tree and index untouched"
+msgstr "Douce : Laisse lr répertoire de travail et l'index intact"
+
+#: gitk:8780
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr "Hybride : Laisse le répertoire de travail dans son état
courant, réinitialise l'index" +
+#: gitk:8783
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"Dure : Réinitialise le répertoire de travail et l'index\n"
+"(abandonne TOUS les changements locaux)"
+
+#: gitk:8800
+msgid "Resetting"
+msgstr "Réinitialisation"
+
+#Fixme: Récupération est-il vraiment une mauvaise traduction?
+#: gitk:8857
+#, fuzzy
+msgid "Checking out"
+msgstr "Récupération"
+
+#: gitk:8910
+msgid "Cannot delete the currently checked-out branch"
+msgstr "Impossible de supprimer la branche en cours"
+
+#: gitk:8916
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+"Les commits de la branche %s ne sont dans aucune autre branche.\n"
+"Voulez-vous vraiment supprimer cette branche %s ?"
+
+#: gitk:8947
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr "Tags et heads : %s"
+
+#: gitk:8962
+msgid "Filter"
+msgstr "Filtrer"
+
+#: gitk:9257
+msgid ""
+"Error reading commit topology information; branch and
preceding/following " +"tag information will be incomplete."
+msgstr ""
+"Erreur à la lecture des informations sur la topologie des commits, "
+"les informations sur les branches et les tags précédents/suivants "
+"seront incomplètes."
+
+#: gitk:10243
+msgid "Tag"
+msgstr "Tag"
+
+#: gitk:10243
+msgid "Id"
+msgstr "Id"
+
+#: gitk:10291
+msgid "Gitk font chooser"
+msgstr "Sélecteur de police de Gitk"
+
+#: gitk:10308
+msgid "B"
+msgstr "B"
+
+#: gitk:10311
+msgid "I"
+msgstr "I"
+
+#: gitk:10407
+msgid "Gitk preferences"
+msgstr "Préférences de Gitk"
+
+#: gitk:10409
+msgid "Commit list display options"
+msgstr "Options d'affichage de la liste des commits"
+
+#: gitk:10412
+msgid "Maximum graph width (lines)"
+msgstr "Longueur maximum du graphe (lignes)"
+
+#FIXME : Traduction standard de "pane"?
+#: gitk:10416
+#, fuzzy, tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr "Longueur maximum du graphe (% du panneau)"
+
+#: gitk:10420
+msgid "Show local changes"
+msgstr "Montrer les changements locaux"
+
+#: gitk:10423
+msgid "Auto-select SHA1"
+msgstr "Sélection auto. du SHA1"
+
+#: gitk:10427
+msgid "Diff display options"
+msgstr "Options d'affichage des différences"
+
+#: gitk:10429
+msgid "Tab spacing"
+msgstr "Taille des tabulations"
+
+#: gitk:10432
+msgid "Display nearby tags"
+msgstr "Afficher les tags les plus proches"
+
+#: gitk:10435
+msgid "Hide remote refs"
+msgstr "Cacher les refs distantes"
+
+#: gitk:10438
+msgid "Limit diffs to listed paths"
+msgstr "Limiter les différences aux chemins listés"
+
+#: gitk:10441
+msgid "Support per-file encodings"
+msgstr "Support pour un encodage des caractères par fichier"
+
+#: gitk:10447 gitk:10512
+msgid "External diff tool"
+msgstr "Outil de diff externe"
+
+#: gitk:10449
+msgid "Choose..."
+msgstr "Choisir..."
+
+#: gitk:10454
+msgid "Colors: press to choose"
+msgstr "Couleurs : cliquer pour choisir"
+
+#: gitk:10457
+msgid "Background"
+msgstr "Arrière-plan"
+
+#: gitk:10458 gitk:10488
+msgid "background"
+msgstr "arrière-plan"
+
+#: gitk:10461
+msgid "Foreground"
+msgstr "Premier plan"
+
+#: gitk:10462
+msgid "foreground"
+msgstr "premier plan"
+
+#: gitk:10465
+msgid "Diff: old lines"
+msgstr "Différences : anciennes lignes"
+
+#: gitk:10466
+msgid "diff old lines"
+msgstr "différences anciennes lignes"
+
+#: gitk:10470
+msgid "Diff: new lines"
+msgstr "Différences : nouvelles lignes"
+
+#: gitk:10471
+msgid "diff new lines"
+msgstr "différences nouvelles lignes"
+
+#: gitk:10475
+msgid "Diff: hunk header"
+msgstr "Différences : entête du hunk"
+
+#: gitk:10477
+msgid "diff hunk header"
+msgstr "différences : entête du hunk"
+
+#: gitk:10481
+msgid "Marked line bg"
+msgstr "Arrière-plan de la ligne marquée"
+
+#: gitk:10483
+msgid "marked line background"
+msgstr "Arrière-plan de la ligne marquée"
+
+#: gitk:10487
+msgid "Select bg"
+msgstr "Sélectionner l'arrière-plan"
+
+#: gitk:10491
+msgid "Fonts: press to choose"
+msgstr "Polices : cliquer pour choisir"
+
+#: gitk:10493
+msgid "Main font"
+msgstr "Police principale"
+
+#: gitk:10494
+msgid "Diff display font"
+msgstr "Police d'affichage des différences"
+
+#: gitk:10495
+msgid "User interface font"
+msgstr "Police de l'interface utilisateur"
+
+#: gitk:10522
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr "Gitk : choisir la couleur de %s"
+
+#: gitk:10973
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+"Désolé, gitk ne peut être exécuté avec cette version de Tcl/Tk.\n"
+" Gitk requiert Tcl/Tk version 8.4 ou supérieur."
+
+#: gitk:11101
+msgid "Cannot find a git repository here."
+msgstr "Impossible de trouver un dépôt git ici."
+
+#: gitk:11105
+#, tcl-format
+msgid "Cannot find the git directory \"%s\"."
+msgstr "Impossible de trouver le répertoire git \"%s\"."
+
+#: gitk:11152
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr "Argument '%s' ambigu : à la fois une révision et un nom et
fichier" +
+#: gitk:11164
+msgid "Bad arguments to gitk:"
+msgstr "Arguments invalides pour gitk :"
+
+#: gitk:11249
+msgid "Command line"
+msgstr "Ligne de commande"
^ permalink raw reply related
* Re: Hey - A Conceptual Simplication....
From: Junio C Hamano @ 2009-11-19 21:27 UTC (permalink / raw)
To: George Dennie
Cc: git, B.Steinbrink, 'Jason Sewall',
'Jakub Narebski', 'Jan Krüger', torvalds
In-Reply-To: <00d401ca6954$a29fa020$e7dee060$@com>
"George Dennie" <gdennie@pospeople.com> writes:
> REPOSITORIES
> Collection of Commits
Ok.
> Collection of Branches
> -- collection of commits without children
Wrong.
> -- as a result each commits either augments
> -- and existing branch or creates a new one
Ok.
> Master Branch
> -- typically the publishable development history
Not necessarily.
> INDEX
> Collections of Parent/Merge Commits
> -- the commit will use all these as its parent
Wrong.
> Staged Commit
> -- these changes are shown relative to the working tree
A new word for me. I doubt we need to have such a concept.
> Default Branch
> -- the history the staged commit is suppose to augment
We typically call it "the current branch". It is "the branch whose tip
will advance by one commit when you make a new commit" and determined by
HEAD.
> Collection of Stashes
> -- these are not copies of the working tree since they
> -- only contain "versioned" files/folders and so is not
> -- a backup
I think it is better to say what these _are_, instead of saying what they
are not. These are not yoghurt cups, these are nor bicycles, these are
not knitting needles. Listing what they are not does not give you more
information.
> WORKING_TREE
> Collection of Files and Folders
Ok.
> As far as I can tell, the working tree is not suppose to be stateful, but it
> seems the commands treat it as such.
I am not sure what you are trying to say by "stateful" here. A work tree
has files and directories, and if you edit one of the files of course it
changes its state.
----------------------------------------------------------------
A branch is just a pointer to one commit (or nothingness, if it is unborn,
but that is such a special case you do not have to worry about yet until
you understand git more).
The commit can have many children, but you do not care about them when
looking at the branch, as there is no "parent-to-children" pointer.
The pointer that represents a branch moves to another commit by
different operations.
- If you make a new commit while on the branch, it points to the new
commit. This is the most typical, and is done by many every-day
commands, such as "commit", "am", "merge", "cherry-pick", "revert".
Typically the new commit B is a direct child of the commit the branch
used to point at A, and B has A as its first parent.
- There are commands that let you violate the above, i.e. you can change
what commit the branch pointer points at, and the new commit A does not
have to be a direct child of the commit currently pointed by the
branch. "reset" and "rebase" are examples of such commands and are to
rewrite the history.
There is the "current branch" that you are on. It is recorded in HEAD
(cat .git/HEAD to see it). When you create a new commit, the tip of the
branch HEAD points at is updated to point at the new commit. Since the
new commit is made a direct child of the current commit, this will appear
to the users as "advancing the branch".
The state (contents of files and symlinks together with where they are in
the tree) to be commited next is recorded in the index. "git add" and
friends are used to update this state in the index, and "git diff" with
various options allow you to view the difference between this state and
work tree or arbitrary commit.
^ permalink raw reply
* Re: [PATCH 1/2] gitweb.js: fix null object exception in initials calculation
From: Jakub Narebski @ 2009-11-19 21:40 UTC (permalink / raw)
To: Stephen Boyd; +Cc: git
In-Reply-To: <1258659887-5244-2-git-send-email-bebarino@gmail.com>
On Thu, 19 Nov 2009, Stephen Boyd wrote:
> Currently handleLine() assumes that a commit author name will always
> start with a capital letter. It's possible that the author name is
> user@example.com and therefore calling a match() on the name will fail
> to return any matches. Subsequently joining these matches will cause an
> exception. Fix by checking that we have a match before trying to join
> the results into a set of initials for the author.
>
> Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
> ---
[From "[PATCH 0/2] jn/gitweb-blame fixes"]
> This series is based on next's jn/gitweb-blame branch.
>
> I was trying out the incremental blame and noticed it didn't work
> each time. The first patch fixes the crashing I experience when
> blaming gitweb.perl (ironic ;-)
Hmmm... gitweb/gitweb.perl *was* one of files I have tested
'blame_incremental' view on, but I have not experienced any
crashes.
Perhaps it was the matter of different JavaScript engine (Mozilla 1.7.12
with Gecko/20050923 engine, Konqueror 3.5.3-0.2.fc4), or different
starting point for blame.
I assume that crashing lead simply to not working blame, not to browser
crash?
> gitweb/gitweb.js | 7 +++++--
> 1 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/gitweb/gitweb.js b/gitweb/gitweb.js
> index 22570f5..02454d8 100644
> --- a/gitweb/gitweb.js
> +++ b/gitweb/gitweb.js
> @@ -532,8 +532,11 @@ function handleLine(commit, group) {
> if (group.numlines >= 2) {
> var fragment = document.createDocumentFragment();
> var br = document.createElement("br");
> - var text = document.createTextNode(
> - commit.author.match(/\b([A-Z])\B/g).join(''));
> + var match = commit.author.match(/\b([A-Z])\B/g);
> + if (match) {
> + var text = document.createTextNode(
> + match.join(''));
> + }
> if (br && text) {
> var elem = fragment || td_sha1;
> elem.appendChild(br);
Thanks. It now corresponds to what it is done for ordinary 'blame'
view, i.e.:
my @author_initials = ($author =~ /\b([[:upper:]])\B/g);
if (@author_initials) {
print "<br />" .
esc_html(join('', @author_initials));
# or join('.', ...)
}
P.S. Unfortunately unless we decide to generate JavaScript from Perl code,
using something like GWT for Java or Pylons for Python, e.g. CGI::Ajax
(which is not in Perl core), we would have to have such code duplication.
--
Jakub Narebski
Poland
^ permalink raw reply
* [RFC PATCH] {checkout,reset} -p: make patch direction configurable
From: Thomas Rast @ 2009-11-19 22:03 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, Jeff King
When we implemented the -p mode for checkout, reset and stash, some
discussion revolved around the involved patch direction.
Make this configurable for reset and checkout with the following
choices:
index/HEAD other
forward undo addition undo addition
mixed undo addition apply removal
reverse apply removal apply removal
Where for added lines, 'undo addition' means that you will see a '+'
patch and can reverse-apply it; 'apply removal' means you will see a
'-' patch and can forward-apply it.
The default is 'mixed', to keep the behaviour consistent with that
from before the patch.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
This patch is much easier to read with --color-words.
ISTR that Peff wanted this, and maybe some others. I'm not too
interested because I'm still convinced 'mixed' is the Right Option,
but it was somewhere deep on my todo stack and maybe you like it ;-)
We could do the same for stash, but I don't really see the use there;
it does not have any of the direction-switching issues because it does
not support a rev argument.
Documentation/config.txt | 12 +++++
git-add--interactive.perl | 100 +++++++++++++++++++++++++++++++-------------
2 files changed, 82 insertions(+), 30 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index cb73d75..f5f9b80 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1146,6 +1146,18 @@ interactive.singlekey::
linkgit:git-add[1]. Note that this setting is silently
ignored if portable keystroke input is not available.
+interactive.reset.direction::
+interactive.checkout.direction::
+ Direction of diffs used in `git reset -p` and `git checkout
+ -p`. Must be one of 'forward', 'mixed' (default), or
+ 'reverse'.
++
+With 'forward', diffs are taken forward and applied in reverse, i.e.,
+if you added a block of code you see an addition patch and are asked
+if you want to remove it. 'reverse' instead shows a removal patch
+and asks if you to apply it. 'mixed' is the same as 'forward' when
+comparing to HEAD or the index, and 'reverse' otherwise.
+
log.date::
Set default date-time mode for the log command. Setting log.date
value is similar to using 'git-log'\'s --date option. The value is one of the
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 8ce1ec9..051e47e 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -74,6 +74,25 @@
my $patch_mode;
my $patch_mode_revision;
+sub get_patch_direction_config {
+ my ($key, $default, $forward, $reverse) = @_;
+ my $value = $repo->config($key, $default) || $default;
+ if ($value =~ /^forward$/i) {
+ return (0, 0);
+ } elsif ($value =~ /^mixed$/i) {
+ return (0, 1);
+ } elsif ($value =~ /^reverse?/i) {
+ return (1, 1);
+ } else {
+ die "$key must be one of 'forward', 'mixed' or 'reverse'";
+ }
+}
+
+my ($reset_reverse_head, $reset_reverse_nothead)
+ = get_patch_direction_config("interactive.reset.direction", "mixed");
+my ($checkout_reverse_head, $checkout_reverse_nothead)
+ = get_patch_direction_config("interactive.checkout.direction", "mixed");
+
sub apply_patch;
sub apply_patch_for_checkout_commit;
sub apply_patch_for_stash;
@@ -98,48 +117,69 @@
FILTER => undef,
},
'reset_head' => {
- DIFF => 'diff-index -p --cached',
- APPLY => sub { apply_patch 'apply -R --cached', @_; },
- APPLY_CHECK => 'apply -R --cached',
- VERB => 'Unstage',
- TARGET => '',
- PARTICIPLE => 'unstaging',
+ DIFF => 'diff-index -p --cached '
+ . ($reset_reverse_head ? '-R' : ''),
+ APPLY => sub {
+ apply_patch 'apply --cached '
+ . ($reset_reverse_head ? '' : '-R'), @_;
+ },
+ APPLY_CHECK => 'apply --cached '
+ . ($reset_reverse_head ? '' : '-R'),
+ VERB => $reset_reverse_head ? 'Apply' : 'Unstage',
+ TARGET => $reset_reverse_head ? ' to index' : '',
+ PARTICIPLE => $reset_reverse_head ? 'applying' : 'unstaging',
FILTER => 'index-only',
},
'reset_nothead' => {
- DIFF => 'diff-index -R -p --cached',
- APPLY => sub { apply_patch 'apply --cached', @_; },
- APPLY_CHECK => 'apply --cached',
- VERB => 'Apply',
- TARGET => ' to index',
- PARTICIPLE => 'applying',
+ DIFF => 'diff-index -p --cached '
+ . ($reset_reverse_nothead ? '-R' : ''),
+ APPLY => sub {
+ apply_patch 'apply --cached '
+ . ($reset_reverse_nothead ? '' : '-R'), @_;
+ },
+ APPLY_CHECK => 'apply --cached '
+ . ($reset_reverse_nothead ? '' : '-R'),
+ VERB => $reset_reverse_nothead ? 'Apply' : 'Unstage',
+ TARGET => $reset_reverse_nothead ? ' to index' : '',
+ PARTICIPLE => $reset_reverse_nothead ? 'applying' : 'unstaging',
FILTER => 'index-only',
},
'checkout_index' => {
- DIFF => 'diff-files -p',
- APPLY => sub { apply_patch 'apply -R', @_; },
- APPLY_CHECK => 'apply -R',
- VERB => 'Discard',
- TARGET => ' from worktree',
- PARTICIPLE => 'discarding',
+ DIFF => 'diff-files -p ' . ($checkout_reverse_head ? '-R' : ''),
+ APPLY => sub {
+ apply_patch 'apply '
+ . ($checkout_reverse_head ? '' : '-R'), @_;
+ },
+ APPLY_CHECK => 'apply ' . ($checkout_reverse_head ? '' : '-R'),
+ VERB => $checkout_reverse_head ? 'Apply' : 'Discard',
+ TARGET => $checkout_reverse_head ? ' to worktree' : ' from worktree',
+ PARTICIPLE => $checkout_reverse_head ? 'applying' : 'discarding',
FILTER => 'file-only',
},
'checkout_head' => {
- DIFF => 'diff-index -p',
- APPLY => sub { apply_patch_for_checkout_commit '-R', @_ },
- APPLY_CHECK => 'apply -R',
- VERB => 'Discard',
- TARGET => ' from index and worktree',
- PARTICIPLE => 'discarding',
+ DIFF => 'diff-index -p ' . ($checkout_reverse_head ? '-R' : ''),
+ APPLY => sub {
+ apply_patch_for_checkout_commit
+ $checkout_reverse_head ? '' : '-R', @_;
+ },
+ APPLY_CHECK => 'apply ' . ($checkout_reverse_head ? '' : '-R'),
+ VERB => $checkout_reverse_head ? 'Apply' : 'Discard',
+ TARGET => ($checkout_reverse_head ? ' to index and worktree'
+ : ' from index and worktree'),
+ PARTICIPLE => $checkout_reverse_head ? 'applying' : 'discarding',
FILTER => undef,
},
'checkout_nothead' => {
- DIFF => 'diff-index -R -p',
- APPLY => sub { apply_patch_for_checkout_commit '', @_ },
- APPLY_CHECK => 'apply',
- VERB => 'Apply',
- TARGET => ' to index and worktree',
- PARTICIPLE => 'applying',
+ DIFF => 'diff-index -p ' . ($checkout_reverse_nothead ? '-R' : ''),
+ APPLY => sub {
+ apply_patch_for_checkout_commit
+ $checkout_reverse_nothead ? '' : '-R', @_;
+ },
+ APPLY_CHECK => 'apply ' . ($checkout_reverse_nothead ? '' : '-R'),
+ VERB => $checkout_reverse_nothead ? 'Apply' : 'Discard',
+ TARGET => ($checkout_reverse_nothead ? ' to index and worktree'
+ : ' from index and worktree'),
+ PARTICIPLE => $checkout_reverse_nothead ? 'applying' : 'discarding',
FILTER => undef,
},
);
--
1.6.5.3.439.g7a64a6.dirty
^ permalink raw reply related
* Re: [PATCH] No diff -b/-w output for all-whitespace changes
From: Junio C Hamano @ 2009-11-19 22:06 UTC (permalink / raw)
To: Greg Bacon; +Cc: git
In-Reply-To: <1258665144-26520-1-git-send-email-gbacon@dbresearch.net>
Greg Bacon <gbacon@dbresearch.net> writes:
> Change git-diff's whitespace-ignoring modes to generate
> output only if a non-empty patch results, which git-apply
> rejects.
>
> Update the tests to look for the new behavior.
>
> Signed-off-by: Greg Bacon <gbacon@dbresearch.net>
Thanks.
I didn't read the patch carefully, but I think this is the right thing to
do and is in the same sprit as jc/1.7.0-diff-whitespace-only-status topic.
^ permalink raw reply
* Re: [PATCH] No diff -b/-w output for all-whitespace changes
From: Thomas Rast @ 2009-11-19 22:14 UTC (permalink / raw)
To: Greg Bacon; +Cc: git, gitster
In-Reply-To: <1258665144-26520-1-git-send-email-gbacon@dbresearch.net>
Greg Bacon wrote:
> Change git-diff's whitespace-ignoring modes to generate
> output only if a non-empty patch results, which git-apply
> rejects.
Judging from the test, this parses as
Change git-diff's whitespace-ignoring modes to generate
output only if a non-(empty patch, which git-apply
rejects) results.
which is a bit weird, isn't it? :-)
--
Thomas Rast
trast@{inf,student}.ethz.ch
^ permalink raw reply
* Re: [PATCH] gitk: Use git-difftool for external diffs
From: Paul Mackerras @ 2009-11-19 22:21 UTC (permalink / raw)
To: David Aguilar; +Cc: peff, sam, git
In-Reply-To: <20091119193913.GA25410@gmail.com>
David Aguilar writes:
> On Thu, Nov 19, 2009 at 08:03:31PM +1100, Paul Mackerras wrote:
> > David Aguilar writes:
> >
> > > This teaches gitk about git-difftool. A benefit of this change is
> > > that gitk's external diff now works with read-only repositories.
> >
> > What version of git does git difftool first appear in? I prefer not
> > to introduce hard requirements on very recent versions of git into
> > gitk.
> >
> > Paul.
>
> git-difftool appeared in git 1.6.3.
>
> If this patch is not going in then how do you suggest we fix the
> read-only repository bug?
I have no problem with using git difftool if the underlying git is new
enough, I just don't want gitk to explode when it isn't.
If the underlying git isn't new enough then we should probably make a
directory under $TMPDIR with a reasonably unpredictable name.
Also, I don't think we should remove the ability for the user to
choose which external diff tool to use; if we're using git difftool
then we should pass the selected tool with the -t option of git
difftool. Maybe we need a "use default from git config" option
as well, though.
Paul.
^ permalink raw reply
* Re: [PATCH] No diff -b/-w output for all-whitespace changes
From: Greg Bacon @ 2009-11-19 22:25 UTC (permalink / raw)
To: Thomas Rast; +Cc: git, gitster
In-Reply-To: <200911192314.41542.trast@student.ethz.ch>
Thomas Rast wrote
> Judging from the test, this parses as
>
> Change git-diff's whitespace-ignoring modes to generate
> output only if a non-(empty patch, which git-apply
> rejects) results.
>
> which is a bit weird, isn't it? :-)
Yes, rotten wording. I meant git-apply rejects empty patches,
so let's not do that!
I chose this route rather than making git-apply more
forgiving because as currently implemented, git-diff is not
entirely ignoring whitespace when commanded to do so.
Greg
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox