--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/check-code.py Thu Jan 28 23:13:45 2010 -0600
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+#
+# check-code - a style and portability checker for Mercurial
+#
+# Copyright 2010 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+import sys, re, glob
+
+def repquote(m):
+ t = re.sub(r"\S", "x", m.group(2))
+ return m.group(1) + t + m.group(1)
+
+def repcomment(m):
+ return m.group(1) + "#" * len(m.group(2))
+
+def repccomment(m):
+ t = re.sub(r"((?<=\n) )|\S", "x", m.group(2))
+ return m.group(1) + t + "*/"
+
+def repcallspaces(m):
+ t = re.sub(r"\n\s+", "\n", m.group(2))
+ return m.group(1) + t
+
+def repinclude(m):
+ return m.group(1) + "<foo>"
+
+def rephere(m):
+ t = re.sub(r"\S", "x", m.group(2))
+ return m.group(1) + t
+
+
+testpats = [
+ (r'(pushd|popd)', "don't use pushd|popd, use cd"),
+ (r'\W\$?\(\([^\)]*\)\)', "don't use (()) or $(()), use expr"),
+ (r'^function', "don't use 'function', use old style"),
+ (r'grep.*-q', "don't use grep -q, redirect to /dev/null"),
+ (r'echo.*\\n', "don't use 'echo \n', use printf"),
+ (r'^diff.*-\w*N', "don't use diff -N"),
+ (r'(^| )wc[^|]*$', "filter wc output"),
+ (r'head -c', "don't use head -c, use dd"),
+ (r'ls.*-\w*R', "don't use ls -R, use find"),
+ (r'printf.*\\\d\d\d', "don't use printf \NNN, use python"),
+ (r'printf.*\\x', "don't use printf \\x, use python"),
+ (r'\$\(.*\)', "don't use $(expr), use `expr`"),
+ (r'rm -rf \*', "don't use naked rm -rf, target a directory"),
+ (r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w',
+ "use egrep for extended grep syntax"),
+ (r'/bin/', "don't use explicit paths for tools"),
+ (r'\$PWD', "don't use $PWD, use `pwd`"),
+ (r'[^\n]\Z', "no trailing newline"),
+]
+
+testfilters = [
+ (r"( *)(#([^\n]*\S)?)", repcomment),
+ (r"<<(\S+)((.|\n)*?\n\1)", rephere),
+]
+
+pypats = [
+ (r'^\s*\t', "don't use tabs"),
+ (r'(\S\s+|^\s+)\n', "trailing whitespace"),
+ (r'\w,\w', "missing whitespace after ,"),
+ (r'\w[+/*\-<>]\w', "missing whitespace in expression"),
+ (r'^\s+\w+=\w+[^,)]$', "missing whitespace in assignment"),
+ (r'.{85}', "line too long"),
+ (r'[^\n]\Z', "no trailing newline"),
+# (r'^\s+[^_ ][^_. ]+_[^_]+\s*=', "don't use underbars in identifiers"),
+# (r'\w*[a-z][A-Z]\w*\s*=', "don't use camelcase in identifiers"),
+ (r'^\s*(if|while|def|class|except|try)\s[^[]*:\s*[^\]#\s]+',
+ "linebreak after :"),
+ (r'class\s[^(]:', "old-style class, use class foo(object)"),
+ (r'^\s+del\(', "del isn't a function"),
+ (r'^\s+except\(', "except isn't a function"),
+# (r'class\s[A-Z][^\(]*\((?!Exception)',
+# "don't capitalize non-exception classes"),
+# (r'in range\(', "use xrange"),
+# (r'^\s*print\s+', "avoid using print in core and extensions"),
+ (r'[\x80-\xff]', "non-ASCII character literal"),
+ (r'("\')\.format\(', "str.format() not available in Python 2.4"),
+ (r'^\s*with\s+', "with not available in Python 2.4"),
+ (r'if\s.*\selse', "if ... else form not available in Python 2.4"),
+ (r'([\(\[]\s\S)|(\S\s[\)\]])', "gratuitous whitespace in () or []"),
+# (r'\s\s=', "gratuitous whitespace before ="),
+ (r'\S(\+=|-=|!=|<>|<=|>=|<<=|>>=)\S', "missing whitespace around operator")
+]
+
+pyfilters = [
+ (r"""(''')(([^']|\\'|'{1,2}(?!'))*)'''""", repquote),
+ (r'''(""")(([^"]|\\"|"{1,2}(?!"))*)"""''', repquote),
+ (r'''(?<!")(")(([^"\n]|\\")+)"(?!")''', repquote),
+ (r"""(?<!')(')(([^'\n]|\\')+)'(?!')""", repquote),
+ (r"( *)(#([^\n]*\S)?)", repcomment),
+]
+
+cpats = [
+ (r'//', "don't use //-style comments"),
+ (r'^ ', "don't use spaces to indent"),
+ (r'\S\t', "don't use tabs except for indent"),
+ (r'(\S\s+|^\s+)\n', "trailing whitespace"),
+ (r'.{85}', "line too long"),
+ (r'(while|if|do|for)\(', "use space after while/if/do/for"),
+ (r'return\(', "return is not a function"),
+ (r' ;', "no space before ;"),
+ (r'\w+\* \w+', "use int *foo, not int* foo"),
+ (r'\([^\)]+\) \w+', "use (int)foo, not (int) foo"),
+ (r'\S+ (\+\+|--)', "use foo++, not foo ++"),
+ (r'\w,\w', "missing whitespace after ,"),
+ (r'\w[+/*]\w', "missing whitespace in expression"),
+ (r'^#\s+\w', "use #foo, not # foo"),
+ (r'[^\n]\Z', "no trailing newline"),
+]
+
+cfilters = [
+ (r'(/\*)(((\*(?!/))|[^*])*)\*/', repccomment),
+ (r'''(?<!")(")(([^"]|\\")+"(?!"))''', repquote),
+ (r'''(#\s*include\s+<)([^>]+)>''', repinclude),
+ (r'(\()([^)]+\))', repcallspaces),
+]
+
+checks = [
+ ('python', r'.*\.(py|cgi)$', pyfilters, pypats),
+ ('test script', r'(.*/)?test-[^.~]*$', testfilters, testpats),
+ ('c', r'.*\.c$', cfilters, cpats),
+]
+
+if len(sys.argv) == 1:
+ check = glob.glob("*")
+else:
+ check = sys.argv[1:]
+
+for f in check:
+ for name, match, filters, pats in checks:
+ fc = 0
+ if not re.match(match, f):
+ continue
+ pre = post = open(f).read()
+ if "no-" + "check-code" in pre:
+ break
+ for p, r in filters:
+ post = re.sub(p, r, post)
+ # print post # uncomment to show filtered version
+ z = enumerate(zip(pre.splitlines(), post.splitlines(True)))
+ for n, l in z:
+ if "check-code" + "-ignore" in l[0]:
+ continue
+ lc = 0
+ for p, msg in pats:
+ if re.search(p, l[1]):
+ if not lc:
+ print "%s:%d:" % (f, n + 1)
+ print " > %s" % l[0]
+ print " %s" % msg
+ lc += 1
+ fc += 1
+ if fc == 15:
+ print " (too many errors, giving up)"
+ break
+ break
--- a/contrib/hg-ssh Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/hg-ssh Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
# Thomas Arendsen Hein <thomas@intevation.de>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""
hg-ssh - a wrapper for ssh access to a limited set of mercurial repos
--- a/contrib/hgsh/hgsh.c Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/hgsh/hgsh.c Thu Jan 28 23:13:45 2010 -0600
@@ -89,7 +89,7 @@
*/
#ifndef HG_SHELL
#define HG_SHELL NULL
-// #define HG_SHELL "/bin/bash"
+/* #define HG_SHELL "/bin/bash" */
#endif
/*
@@ -118,40 +118,40 @@
static void print_cmdline(int argc, char **argv)
{
- FILE *fp = stderr;
- int i;
+ FILE *fp = stderr;
+ int i;
- fputs("command: ", fp);
+ fputs("command: ", fp);
- for (i = 0; i < argc; i++) {
- char *spc = strpbrk(argv[i], " \t\r\n");
- if (spc) {
- fputc('\'', fp);
- }
- fputs(argv[i], fp);
- if (spc) {
- fputc('\'', fp);
- }
- if (i < argc - 1) {
- fputc(' ', fp);
- }
- }
- fputc('\n', fp);
- fflush(fp);
+ for (i = 0; i < argc; i++) {
+ char *spc = strpbrk(argv[i], " \t\r\n");
+ if (spc) {
+ fputc('\'', fp);
+ }
+ fputs(argv[i], fp);
+ if (spc) {
+ fputc('\'', fp);
+ }
+ if (i < argc - 1) {
+ fputc(' ', fp);
+ }
+ }
+ fputc('\n', fp);
+ fflush(fp);
}
static void usage(const char *reason, int exitcode)
{
- char *hg_help = HG_HELP;
+ char *hg_help = HG_HELP;
- if (reason) {
- fprintf(stderr, "*** Error: %s.\n", reason);
- }
- fprintf(stderr, "*** This program has been invoked incorrectly.\n");
- if (hg_help) {
- fprintf(stderr, "*** %s\n", hg_help);
- }
- exit(exitcode ? exitcode : EX_USAGE);
+ if (reason) {
+ fprintf(stderr, "*** Error: %s.\n", reason);
+ }
+ fprintf(stderr, "*** This program has been invoked incorrectly.\n");
+ if (hg_help) {
+ fprintf(stderr, "*** %s\n", hg_help);
+ }
+ exit(exitcode ? exitcode : EX_USAGE);
}
/*
@@ -162,43 +162,43 @@
*/
static void forward_through_gateway(int argc, char **argv)
{
- char *ssh = SSH;
- char *hg_host = HG_HOST;
- char *hg_user = HG_USER;
- char **nargv = alloca((10 + argc) * sizeof(char *));
- int i = 0, j;
+ char *ssh = SSH;
+ char *hg_host = HG_HOST;
+ char *hg_user = HG_USER;
+ char **nargv = alloca((10 + argc) * sizeof(char *));
+ int i = 0, j;
- nargv[i++] = ssh;
- nargv[i++] = "-q";
- nargv[i++] = "-T";
- nargv[i++] = "-x";
- if (hg_user) {
- nargv[i++] = "-l";
- nargv[i++] = hg_user;
- }
- nargv[i++] = hg_host;
+ nargv[i++] = ssh;
+ nargv[i++] = "-q";
+ nargv[i++] = "-T";
+ nargv[i++] = "-x";
+ if (hg_user) {
+ nargv[i++] = "-l";
+ nargv[i++] = hg_user;
+ }
+ nargv[i++] = hg_host;
- /*
- * sshd called us with added "-c", because it thinks we are a shell.
- * drop it if we find it.
- */
- j = 1;
- if (j < argc && strcmp(argv[j], "-c") == 0) {
- j++;
- }
+ /*
+ * sshd called us with added "-c", because it thinks we are a shell.
+ * drop it if we find it.
+ */
+ j = 1;
+ if (j < argc && strcmp(argv[j], "-c") == 0) {
+ j++;
+ }
- for (; j < argc; i++, j++) {
- nargv[i] = argv[j];
- }
- nargv[i] = NULL;
+ for (; j < argc; i++, j++) {
+ nargv[i] = argv[j];
+ }
+ nargv[i] = NULL;
- if (debug) {
- print_cmdline(i, nargv);
- }
+ if (debug) {
+ print_cmdline(i, nargv);
+ }
- execv(ssh, nargv);
- perror(ssh);
- exit(EX_UNAVAILABLE);
+ execv(ssh, nargv);
+ perror(ssh);
+ exit(EX_UNAVAILABLE);
}
/*
@@ -209,44 +209,44 @@
*/
static void run_shell(int argc, char **argv)
{
- char *hg_shell = HG_SHELL;
- char **nargv;
- char *c;
- int i;
+ char *hg_shell = HG_SHELL;
+ char **nargv;
+ char *c;
+ int i;
- nargv = alloca((argc + 3) * sizeof(char *));
- c = strrchr(hg_shell, '/');
+ nargv = alloca((argc + 3) * sizeof(char *));
+ c = strrchr(hg_shell, '/');
- /* tell "real" shell it is login shell, if needed. */
+ /* tell "real" shell it is login shell, if needed. */
- if (argv[0][0] == '-' && c) {
- nargv[0] = strdup(c);
- if (nargv[0] == NULL) {
- perror("malloc");
- exit(EX_OSERR);
- }
- nargv[0][0] = '-';
- } else {
- nargv[0] = hg_shell;
- }
+ if (argv[0][0] == '-' && c) {
+ nargv[0] = strdup(c);
+ if (nargv[0] == NULL) {
+ perror("malloc");
+ exit(EX_OSERR);
+ }
+ nargv[0][0] = '-';
+ } else {
+ nargv[0] = hg_shell;
+ }
- for (i = 1; i < argc; i++) {
- nargv[i] = argv[i];
- }
- nargv[i] = NULL;
+ for (i = 1; i < argc; i++) {
+ nargv[i] = argv[i];
+ }
+ nargv[i] = NULL;
- if (debug) {
- print_cmdline(i, nargv);
- }
+ if (debug) {
+ print_cmdline(i, nargv);
+ }
- execv(hg_shell, nargv);
- perror(hg_shell);
- exit(EX_OSFILE);
+ execv(hg_shell, nargv);
+ perror(hg_shell);
+ exit(EX_OSFILE);
}
enum cmdline {
- hg_init,
- hg_serve,
+ hg_init,
+ hg_serve,
};
@@ -256,25 +256,25 @@
*/
static int validate_repo(const char *repo_root, const char *subdir)
{
- char *abs_path;
- struct stat st;
- int ret;
+ char *abs_path;
+ struct stat st;
+ int ret;
- if (asprintf(&abs_path, "%s.hg/%s", repo_root, subdir) == -1) {
- ret = -1;
- goto bail;
- }
+ if (asprintf(&abs_path, "%s.hg/%s", repo_root, subdir) == -1) {
+ ret = -1;
+ goto bail;
+ }
- /* verify that we really are looking at valid repo. */
+ /* verify that we really are looking at valid repo. */
- if (stat(abs_path, &st) == -1) {
- ret = 0;
- } else {
- ret = 1;
- }
+ if (stat(abs_path, &st) == -1) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
bail:
- return ret;
+ return ret;
}
/*
@@ -282,158 +282,159 @@
*/
static void serve_data(int argc, char **argv)
{
- char *hg_root = HG_ROOT;
- char *repo, *repo_root;
- enum cmdline cmd;
- char *nargv[6];
- size_t repolen;
- int i;
-
- /*
- * check argv for looking okay. we should be invoked with argv
- * resembling like this:
- *
- * hgsh
- * -c
- * hg -R some/path serve --stdio
- *
- * the "-c" is added by sshd, because it thinks we are login shell.
- */
+ char *hg_root = HG_ROOT;
+ char *repo, *repo_root;
+ enum cmdline cmd;
+ char *nargv[6];
+ size_t repolen;
+ int i;
- if (argc != 3) {
- goto badargs;
- }
-
- if (strcmp(argv[1], "-c") != 0) {
- goto badargs;
- }
-
- if (sscanf(argv[2], "hg init %as", &repo) == 1) {
- cmd = hg_init;
- }
- else if (sscanf(argv[2], "hg -R %as serve --stdio", &repo) == 1) {
- cmd = hg_serve;
- } else {
- goto badargs;
- }
-
- repolen = repo ? strlen(repo) : 0;
+ /*
+ * check argv for looking okay. we should be invoked with argv
+ * resembling like this:
+ *
+ * hgsh
+ * -c
+ * hg -R some/path serve --stdio
+ *
+ * the "-c" is added by sshd, because it thinks we are login shell.
+ */
- if (repolen == 0) {
- goto badargs;
- }
-
- if (hg_root) {
- if (asprintf(&repo_root, "%s/%s/", hg_root, repo) == -1) {
- goto badargs;
- }
+ if (argc != 3) {
+ goto badargs;
+ }
- /*
- * attempt to stop break out from inside the repository tree. could
- * do something more clever here, because e.g. we could traverse a
- * symlink that looks safe, but really breaks us out of tree.
- */
-
- if (strstr(repo_root, "/../") != NULL) {
- goto badargs;
- }
-
- /* only hg init expects no repo. */
+ if (strcmp(argv[1], "-c") != 0) {
+ goto badargs;
+ }
- if (cmd != hg_init) {
- int valid;
-
- valid = validate_repo(repo_root, "data");
-
- if (valid == -1) {
+ if (sscanf(argv[2], "hg init %as", &repo) == 1) {
+ cmd = hg_init;
+ }
+ else if (sscanf(argv[2], "hg -R %as serve --stdio", &repo) == 1) {
+ cmd = hg_serve;
+ } else {
goto badargs;
- }
+ }
- if (valid == 0) {
- valid = validate_repo(repo_root, "store");
+ repolen = repo ? strlen(repo) : 0;
- if (valid == -1) {
- goto badargs;
- }
- }
-
- if (valid == 0) {
- perror(repo);
- exit(EX_DATAERR);
- }
+ if (repolen == 0) {
+ goto badargs;
}
- if (chdir(hg_root) == -1) {
- perror(hg_root);
- exit(EX_SOFTWARE);
- }
- }
+ if (hg_root) {
+ if (asprintf(&repo_root, "%s/%s/", hg_root, repo) == -1) {
+ goto badargs;
+ }
+
+ /*
+ * attempt to stop break out from inside the
+ * repository tree. could do something more clever
+ * here, because e.g. we could traverse a symlink that
+ * looks safe, but really breaks us out of tree.
+ */
+
+ if (strstr(repo_root, "/../") != NULL) {
+ goto badargs;
+ }
- i = 0;
+ /* only hg init expects no repo. */
+
+ if (cmd != hg_init) {
+ int valid;
+
+ valid = validate_repo(repo_root, "data");
+
+ if (valid == -1) {
+ goto badargs;
+ }
+
+ if (valid == 0) {
+ valid = validate_repo(repo_root, "store");
+
+ if (valid == -1) {
+ goto badargs;
+ }
+ }
- switch (cmd) {
- case hg_serve:
- nargv[i++] = HG;
- nargv[i++] = "-R";
- nargv[i++] = repo;
- nargv[i++] = "serve";
- nargv[i++] = "--stdio";
- break;
- case hg_init:
- nargv[i++] = HG;
- nargv[i++] = "init";
- nargv[i++] = repo;
- break;
- }
+ if (valid == 0) {
+ perror(repo);
+ exit(EX_DATAERR);
+ }
+ }
+
+ if (chdir(hg_root) == -1) {
+ perror(hg_root);
+ exit(EX_SOFTWARE);
+ }
+ }
+
+ i = 0;
- nargv[i] = NULL;
+ switch (cmd) {
+ case hg_serve:
+ nargv[i++] = HG;
+ nargv[i++] = "-R";
+ nargv[i++] = repo;
+ nargv[i++] = "serve";
+ nargv[i++] = "--stdio";
+ break;
+ case hg_init:
+ nargv[i++] = HG;
+ nargv[i++] = "init";
+ nargv[i++] = repo;
+ break;
+ }
- if (debug) {
- print_cmdline(i, nargv);
- }
+ nargv[i] = NULL;
- execv(HG, nargv);
- perror(HG);
- exit(EX_UNAVAILABLE);
+ if (debug) {
+ print_cmdline(i, nargv);
+ }
+
+ execv(HG, nargv);
+ perror(HG);
+ exit(EX_UNAVAILABLE);
badargs:
- /* print useless error message. */
+ /* print useless error message. */
- usage("invalid arguments", EX_DATAERR);
+ usage("invalid arguments", EX_DATAERR);
}
int main(int argc, char **argv)
{
- char host[1024];
- char *c;
+ char host[1024];
+ char *c;
- if (gethostname(host, sizeof(host)) == -1) {
- perror("gethostname");
- exit(EX_OSERR);
- }
+ if (gethostname(host, sizeof(host)) == -1) {
+ perror("gethostname");
+ exit(EX_OSERR);
+ }
- if ((c = strchr(host, '.')) != NULL) {
- *c = '\0';
- }
+ if ((c = strchr(host, '.')) != NULL) {
+ *c = '\0';
+ }
- if (getenv("SSH_CLIENT")) {
- char *hg_gateway = HG_GATEWAY;
- char *hg_host = HG_HOST;
+ if (getenv("SSH_CLIENT")) {
+ char *hg_gateway = HG_GATEWAY;
+ char *hg_host = HG_HOST;
- if (hg_gateway && strcmp(host, hg_gateway) == 0) {
- forward_through_gateway(argc, argv);
- }
+ if (hg_gateway && strcmp(host, hg_gateway) == 0) {
+ forward_through_gateway(argc, argv);
+ }
- if (hg_host && strcmp(host, hg_host) != 0) {
- usage("invoked on unexpected host", EX_USAGE);
- }
+ if (hg_host && strcmp(host, hg_host) != 0) {
+ usage("invoked on unexpected host", EX_USAGE);
+ }
- serve_data(argc, argv);
- } else if (HG_SHELL) {
- run_shell(argc, argv);
- } else {
- usage("invalid arguments", EX_DATAERR);
- }
+ serve_data(argc, argv);
+ } else if (HG_SHELL) {
+ run_shell(argc, argv);
+ } else {
+ usage("invalid arguments", EX_DATAERR);
+ }
- return 0;
+ return 0;
}
--- a/contrib/memory.py Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/memory.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''helper extension to measure memory usage
@@ -29,7 +29,7 @@
finally:
if status is not None:
status.close()
- ui.write_err(", ".join(["%s: %.1f MiB" % (key, value/1024.0)
+ ui.write_err(", ".join(["%s: %.1f MiB" % (key, value / 1024.0)
for key, value in result.iteritems()]) + "\n")
def extsetup(ui):
--- a/contrib/mercurial.el Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/mercurial.el Thu Jan 28 23:13:45 2010 -0600
@@ -5,8 +5,8 @@
;; Author: Bryan O'Sullivan <bos@serpentine.com>
;; mercurial.el is free software; you can redistribute it and/or
-;; modify it under the terms of version 2 of the GNU General Public
-;; License as published by the Free Software Foundation.
+;; modify it under the terms of the GNU General Public License version
+;; 2 or any later version.
;; mercurial.el is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -784,7 +784,7 @@
(defun hg-help-overview ()
"This is an overview of the Mercurial SCM mode for Emacs.
-You can find the source code, license (GPL v2), and credits for this
+You can find the source code, license (GPLv2+), and credits for this
code by typing `M-x find-library mercurial RET'."
(interactive)
(hg-view-output ("Mercurial Help Overview")
--- a/contrib/mercurial.spec Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/mercurial.spec Thu Jan 28 23:13:45 2010 -0600
@@ -2,7 +2,7 @@
Name: mercurial
Version: snapshot
Release: 0
-License: GPLv2
+License: GPLv2+
Group: Development/Tools
URL: http://mercurial.selenic.com/
Source0: http://mercurial.selenic.com/release/%{name}-%{version}.tar.gz
--- a/contrib/mq.el Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/mq.el Thu Jan 28 23:13:45 2010 -0600
@@ -5,8 +5,8 @@
;; Author: Bryan O'Sullivan <bos@serpentine.com>
;; mq.el is free software; you can redistribute it and/or modify it
-;; under the terms of version 2 of the GNU General Public License as
-;; published by the Free Software Foundation.
+;; under the terms of the GNU General Public License version 2 or any
+;; later version.
;; mq.el is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
--- a/contrib/perf.py Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/perf.py Thu Jan 28 23:13:45 2010 -0600
@@ -36,7 +36,7 @@
except:
try:
m = cmdutil.match(repo, pats, {})
- timer(lambda: len([b for a,b,c in repo.dirstate.statwalk([], m)]))
+ timer(lambda: len([b for a, b, c in repo.dirstate.statwalk([], m)]))
except:
timer(lambda: len(list(cmdutil.walk(repo, pats, {}))))
--- a/contrib/shrink-revlog.py Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/shrink-revlog.py Thu Jan 28 23:13:45 2010 -0600
@@ -101,9 +101,9 @@
# argh: have to pass an int to %d, because a float >= 2^32
# blows up under Python 2.5 or earlier
ui.write('old file size: %12d bytes (%6.1f MiB)\n'
- % (int(oldsize), oldsize/1024/1024))
+ % (int(oldsize), oldsize / 1024 / 1024))
ui.write('new file size: %12d bytes (%6.1f MiB)\n'
- % (int(newsize), newsize/1024/1024))
+ % (int(newsize), newsize / 1024 / 1024))
shrink_percent = (oldsize - newsize) / oldsize * 100
shrink_factor = oldsize / newsize
@@ -219,4 +219,4 @@
}
if __name__ == "__main__":
- print "shrink-revlog.py is now an extension (see hg help extensions)"
+ print "shrink-revlog.py is now an extension (see hg help extensions)"
--- a/contrib/win32/ReadMe.html Mon Jan 18 19:57:36 2010 +0100
+++ b/contrib/win32/ReadMe.html Thu Jan 28 23:13:45 2010 -0600
@@ -148,8 +148,7 @@
Mercurial is free software; you can redistribute it and/or
modify it under the terms of the <a
href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GNU
- General Public License version 2</a> as published by the Free
- Software Foundation.
+ General Public License version 2</a> or any later version.
</p>
<p>
--- a/doc/gendoc.py Mon Jan 18 19:57:36 2010 +0100
+++ b/doc/gendoc.py Thu Jan 28 23:13:45 2010 -0600
@@ -19,7 +19,7 @@
i = docstr.find("\n")
if i != -1:
- desc = docstr[i+2:]
+ desc = docstr[i + 2:]
else:
desc = " %s" % shortdesc
return (shortdesc, desc)
@@ -76,7 +76,8 @@
cmds.sort()
for f in cmds:
- if f.startswith("debug"): continue
+ if f.startswith("debug"):
+ continue
d = get_cmd(h[f])
# synopsis
ui.write(".. _%s:\n\n" % d['cmd'])
--- a/doc/hg.1.txt Mon Jan 18 19:57:36 2010 +0100
+++ b/doc/hg.1.txt Thu Jan 28 23:13:45 2010 -0600
@@ -95,6 +95,6 @@
-------
Copyright (C) 2005-2010 Matt Mackall.
Free use of this software is granted under the terms of the GNU General
-Public License version 2.
+Public License version 2 or any later version.
.. include:: common.txt
--- a/doc/hgignore.5.txt Mon Jan 18 19:57:36 2010 +0100
+++ b/doc/hgignore.5.txt Thu Jan 28 23:13:45 2010 -0600
@@ -106,6 +106,6 @@
This manual page is copyright 2006 Vadim Gelfer.
Mercurial is copyright 2005-2010 Matt Mackall.
Free use of this software is granted under the terms of the GNU General
-Public License version 2.
+Public License version 2 or any later version.
.. include:: common.txt
--- a/doc/hgrc.5.txt Mon Jan 18 19:57:36 2010 +0100
+++ b/doc/hgrc.5.txt Thu Jan 28 23:13:45 2010 -0600
@@ -305,7 +305,7 @@
email addresses.
``bcc``
Optional. Comma-separated list of blind carbon copy recipients'
- email addresses. Cannot be set interactively.
+ email addresses.
``method``
Optional. Method to use to send email messages. If value is ``smtp``
(default), use SMTP (see the SMTP_ section for configuration).
@@ -955,6 +955,6 @@
This manual page is copyright 2005 Bryan O'Sullivan.
Mercurial is copyright 2005-2010 Matt Mackall.
Free use of this software is granted under the terms of the GNU General
-Public License version 2.
+Public License version 2 or any later version.
.. include:: common.txt
--- a/doc/rst2man.py Mon Jan 18 19:57:36 2010 +0100
+++ b/doc/rst2man.py Thu Jan 28 23:13:45 2010 -0600
@@ -112,7 +112,7 @@
class Table:
def __init__(self):
self._rows = []
- self._options = ['center', ]
+ self._options = ['center',]
self._tab_char = '\t'
self._coldefs = []
def new_row(self):
@@ -123,7 +123,7 @@
def append_cell(self, cell_lines):
"""cell_lines is an array of lines"""
start = 0
- if len(cell_lines)>0 and cell_lines[0] == '.sp\n':
+ if len(cell_lines) > 0 and cell_lines[0] == '.sp\n':
start = 1
self._rows[-1].append(cell_lines[start:])
if len(self._coldefs) < len(self._rows[-1]):
@@ -223,8 +223,8 @@
'term' : ('\n.B ', '\n'),
'title_reference' : ('\\fI', '\\fP'),
- 'topic-title' : ('.SS ', ),
- 'sidebar-title' : ('.SS ', ),
+ 'topic-title' : ('.SS ',),
+ 'sidebar-title' : ('.SS ',),
'problematic' : ('\n.nf\n', '\n.fi\n'),
}
@@ -255,18 +255,18 @@
# ensure we get a ".TH" as viewers require it.
self.head.append(self.header())
# filter body
- for i in xrange(len(self.body)-1,0,-1):
+ for i in xrange(len(self.body)-1, 0, -1):
# remove superfluous vertical gaps.
if self.body[i] == '.sp\n':
- if self.body[i-1][:4] in ('.BI ','.IP '):
+ if self.body[i - 1][:4] in ('.BI ','.IP '):
self.body[i] = '.\n'
- elif (self.body[i-1][:3] == '.B ' and
- self.body[i-2][:4] == '.TP\n'):
+ elif (self.body[i - 1][:3] == '.B ' and
+ self.body[i - 2][:4] == '.TP\n'):
self.body[i] = '.\n'
- elif (self.body[i-1] == '\n' and
- self.body[i-2][0] != '.' and
- (self.body[i-3][:7] == '.TP\n.B '
- or self.body[i-3][:4] == '\n.B ')
+ elif (self.body[i - 1] == '\n' and
+ self.body[i - 2][0] != '.' and
+ (self.body[i - 3][:7] == '.TP\n.B '
+ or self.body[i - 3][:4] == '\n.B ')
):
self.body[i] = '.\n'
return ''.join(self.head + self.body + self.foot)
@@ -451,7 +451,7 @@
depart_caution = depart_admonition
def visit_citation(self, node):
- num,text = node.astext().split(None,1)
+ num, text = node.astext().split(None, 1)
num = num.strip()
self.body.append('.IP [%s] 5\n' % num)
@@ -578,19 +578,18 @@
self.defs['indent'][0] % BLOCKQOUTE_INDENT,
self._docinfo[name],
self.defs['indent'][1],
- self.defs['indent'][1],
- ) )
+ self.defs['indent'][1]))
elif not name in skip:
if name in self._docinfo_names:
label = self._docinfo_names[name]
else:
label = self.language.labels.get(name, name)
- self.body.append("\n%s: %s\n" % (label, self._docinfo[name]) )
+ self.body.append("\n%s: %s\n" % (label, self._docinfo[name]))
if self._docinfo['copyright']:
self.body.append('.SH COPYRIGHT\n%s\n'
% self._docinfo['copyright'])
- self.body.append( self.comment(
- 'Generated by docutils manpage writer.\n' ) )
+ self.body.append(self.comment(
+ 'Generated by docutils manpage writer.\n'))
def visit_emphasis(self, node):
self.body.append(self.defs['emphasis'][0])
@@ -672,7 +671,7 @@
pass
def visit_footnote(self, node):
- num,text = node.astext().split(None,1)
+ num, text = node.astext().split(None, 1)
num = num.strip()
self.body.append('.IP [%s] 5\n' % self.deunicode(num))
@@ -786,7 +785,7 @@
# man 7 man argues to use ".IP" instead of ".TP"
self.body.append('.IP %s %d\n' % (
self._list_char[-1].next(),
- self._list_char[-1].get_width(),) )
+ self._list_char[-1].get_width(),))
def depart_list_item(self, node):
pass
@@ -858,7 +857,7 @@
def visit_option(self, node):
# each form of the option will be presented separately
- if self.context[-1]>0:
+ if self.context[-1] > 0:
self.body.append(', ')
if self.context[-3] == '.BI':
self.body.append('\\')
@@ -877,7 +876,7 @@
def visit_option_argument(self, node):
self.context[-3] = '.BI' # bold/italic alternate
if node['delimiter'] != ' ':
- self.body.append('\\fB%s ' % node['delimiter'] )
+ self.body.append('\\fB%s ' % node['delimiter'])
elif self.body[len(self.body)-1].endswith('='):
# a blank only means no blank in output, just changing font
self.body.append(' ')
--- a/hg Mon Jan 18 19:57:36 2010 +0100
+++ b/hg Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# enable importing on demand to reduce startup time
try:
--- a/hgext/acl.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/acl.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,8 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
-#
+# GNU General Public License version 2 or any later version.
'''hooks for controlling repository access
--- a/hgext/bookmarks.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/bookmarks.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008 David Soria Parra <dsp@php.net>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''track a line of development with movable markers
--- a/hgext/bugzilla.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/bugzilla.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''hooks for integrating with the Bugzilla bug tracker
@@ -145,7 +145,7 @@
from mercurial import cmdutil, templater, util
import re, time
-MySQLdb = None
+mysqldb = None
def buglist(ids):
return '(' + ','.join(map(str, ids)) + ')'
@@ -165,7 +165,7 @@
self.ui.readconfig(usermap, sections=['usermap'])
self.ui.note(_('connecting to %s:%s as %s, password %s\n') %
(host, db, user, '*' * len(passwd)))
- self.conn = MySQLdb.connect(host=host, user=user, passwd=passwd,
+ self.conn = mysqldb.connect(host=host, user=user, passwd=passwd,
db=db, connect_timeout=timeout)
self.cursor = self.conn.cursor()
self.longdesc_id = self.get_longdesc_id()
@@ -177,7 +177,7 @@
self.ui.note(_('query: %s %s\n') % (args, kwargs))
try:
self.cursor.execute(*args, **kwargs)
- except MySQLdb.MySQLError:
+ except mysqldb.MySQLError:
self.ui.note(_('failed query: %s %s\n') % (args, kwargs))
raise
@@ -297,7 +297,8 @@
def __init__(self, ui):
bugzilla_2_16.__init__(self, ui)
- self.default_notify = "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s"
+ self.default_notify = \
+ "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s"
class bugzilla_3_0(bugzilla_2_18):
'''support for bugzilla 3.0 series.'''
@@ -369,7 +370,8 @@
break
start = m.end()
for id in bugzilla._split_re.split(m.group(1)):
- if not id: continue
+ if not id:
+ continue
ids.add(int(id))
if ids:
ids = self.filter_real_bug_ids(ids)
@@ -389,7 +391,7 @@
c = root.find('/')
if c == -1:
break
- root = root[c+1:]
+ root = root[c + 1:]
count -= 1
return root
@@ -417,9 +419,9 @@
bugzilla bug id. only add a comment once per bug, so same change
seen multiple times does not fill bug with duplicate data.'''
try:
- import MySQLdb as mysql
- global MySQLdb
- MySQLdb = mysql
+ import mysqldb as mysql
+ global mysqldb
+ mysqldb = mysql
except ImportError, err:
raise util.Abort(_('python mysql support not available: %s') % err)
@@ -434,6 +436,6 @@
for id in ids:
bz.update(id, ctx)
bz.notify(ids, util.email(ctx.user()))
- except MySQLdb.MySQLError, err:
+ except mysqldb.MySQLError, err:
raise util.Abort(_('database error: %s') % err[1])
--- a/hgext/children.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/children.py Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
# Thomas Arendsen Hein <thomas@intevation.de>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to display child changesets'''
--- a/hgext/churn.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/churn.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2008 Alexander Solovyov <piranha@piranha.org.ua>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to display statistics about repository history'''
@@ -169,7 +169,7 @@
'*' * charnum(sum(count)))
def charnum(count):
- return int(round(count*width/maxcount))
+ return int(round(count * width / maxcount))
for name, count in rate:
ui.write(format(name, count))
@@ -180,7 +180,8 @@
(churn,
[('r', 'rev', [], _('count rate for the specified revision or range')),
('d', 'date', '', _('count rate for revisions matching date spec')),
- ('t', 'template', '{author|email}', _('template to group changesets')),
+ ('t', 'template', '{author|email}',
+ _('template to group changesets')),
('f', 'dateformat', '',
_('strftime-compatible format for grouping by date')),
('c', 'changesets', False, _('count rate by number of changesets')),
--- a/hgext/color.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/color.py Thu Jan 28 23:13:45 2010 -0600
@@ -190,8 +190,8 @@
if opts['missing']:
effects = _patch_effects['missing']
# Determine if patch is applied.
- elif [ applied for applied in repo.mq.applied
- if patchname == applied.name ]:
+ elif [applied for applied in repo.mq.applied
+ if patchname == applied.name]:
effects = _patch_effects['applied']
else:
effects = _patch_effects['unapplied']
--- a/hgext/convert/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''import revisions from foreign VCS repositories into Mercurial'''
@@ -279,7 +279,8 @@
# Main options shared with cvsps-2.1
('b', 'branches', [], _('only return changes on specified branches')),
('p', 'prefix', '', _('prefix to remove from file names')),
- ('r', 'revisions', [], _('only return changes after or between specified tags')),
+ ('r', 'revisions', [],
+ _('only return changes after or between specified tags')),
('u', 'update-cache', None, _("update cvs log cache")),
('x', 'new-cache', None, _("create new cvs log cache")),
('z', 'fuzz', 60, _('set commit time fuzz in seconds')),
--- a/hgext/convert/bzr.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/bzr.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008, 2009 Marek Kubica <marek@xivilization.net> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# This module is for handling 'bzr', that was formerly known as Bazaar-NG;
# it cannot access 'bar' repositories, but they were never used very much
@@ -203,7 +203,8 @@
changes.append((frompath, revid))
changes.append((topath, revid))
# add to mode cache
- mode = ((entry.executable and 'x') or (entry.kind == 'symlink' and 's')
+ mode = ((entry.executable and 'x')
+ or (entry.kind == 'symlink' and 's')
or '')
self._modecache[(topath, revid)] = mode
# register the change as move
--- a/hgext/convert/common.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/common.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import base64, errno
import os
@@ -24,7 +24,8 @@
s = base64.decodestring(s)
return pickle.loads(s)
-class MissingTool(Exception): pass
+class MissingTool(Exception):
+ pass
def checktool(exe, name=None, abort=True):
name = name or exe
@@ -32,7 +33,8 @@
exc = abort and util.Abort or MissingTool
raise exc(_('cannot find required "%s" tool') % name)
-class NoRepo(Exception): pass
+class NoRepo(Exception):
+ pass
SKIPREV = 'SKIP'
@@ -322,7 +324,7 @@
# Since ARG_MAX is for command line _and_ environment, lower our limit
# (and make happy Windows shells while doing this).
- self._argmax = self._argmax/2 - 1
+ self._argmax = self._argmax / 2 - 1
return self._argmax
def limit_arglist(self, arglist, cmd, *args, **kwargs):
@@ -367,8 +369,9 @@
try:
key, value = line.splitlines()[0].rsplit(' ', 1)
except ValueError:
- raise util.Abort(_('syntax error in %s(%d): key/value pair expected')
- % (self.path, i+1))
+ raise util.Abort(
+ _('syntax error in %s(%d): key/value pair expected')
+ % (self.path, i + 1))
if key not in self:
self.order.append(key)
super(mapfile, self).__setitem__(key, value)
--- a/hgext/convert/convcmd.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/convcmd.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from common import NoRepo, MissingTool, SKIPREV, mapfile
from cvs import convert_cvs
@@ -108,7 +108,8 @@
parents = {}
while visit:
n = visit.pop(0)
- if n in known or n in self.map: continue
+ if n in known or n in self.map:
+ continue
known.add(n)
commit = self.cachecommit(n)
parents[n] = []
--- a/hgext/convert/cvs.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/cvs.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, locale, re, socket, errno
from cStringIO import StringIO
@@ -46,7 +46,8 @@
# patchset number?
maxrev = int(self.rev)
except ValueError:
- raise util.Abort(_('revision %s is not a patchset number') % self.rev)
+ raise util.Abort(_('revision %s is not a patchset number')
+ % self.rev)
d = os.getcwd()
try:
@@ -65,7 +66,7 @@
mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None))
for cs in db:
- if maxrev and cs.id>maxrev:
+ if maxrev and cs.id > maxrev:
break
id = str(cs.id)
cs.author = self.recode(cs.author)
@@ -76,7 +77,8 @@
files = {}
for f in cs.entries:
- files[f.file] = "%s%s" % ('.'.join([str(x) for x in f.revision]),
+ files[f.file] = "%s%s" % ('.'.join([str(x)
+ for x in f.revision]),
['', '(DEAD)'][f.dead])
# add current commit to set
@@ -186,8 +188,8 @@
self.writep.flush()
r = self.readp.readline()
if not r.startswith("Valid-requests"):
- raise util.Abort(_("unexpected response from CVS server "
- "(expected \"Valid-requests\", but got %r)")
+ raise util.Abort(_('unexpected response from CVS server '
+ '(expected "Valid-requests", but got %r)')
% r)
if "UseUnchanged" in r:
self.writep.write("UseUnchanged\n")
@@ -208,7 +210,8 @@
while count > 0:
data = fp.read(min(count, chunksize))
if not data:
- raise util.Abort(_("%d bytes missing from remote file") % count)
+ raise util.Abort(_("%d bytes missing from remote file")
+ % count)
count -= len(data)
output.write(data)
return output.getvalue()
--- a/hgext/convert/cvsps.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/cvsps.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,10 +1,9 @@
-#
# Mercurial built-in replacement for cvsps.
#
# Copyright 2008, Frank Kingswood <frank@kingswood-consulting.co.uk>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os
import re
@@ -403,7 +402,7 @@
# normal branch
if revparts[:-2] == e.revision:
branchpoints.add(branch)
- elif revparts == (1,1,1): # vendor branch
+ elif revparts == (1, 1, 1): # vendor branch
if revparts in e.branches:
branchpoints.add(branch)
e.branchpoints = branchpoints
@@ -633,7 +632,7 @@
branches = {} # changeset index where we saw a branch
n = len(changesets)
i = 0
- while i<n:
+ while i < n:
c = changesets[i]
for f in c.entries:
@@ -703,9 +702,12 @@
m = None # if no group found then merge to HEAD
if m in branches and c.branch != m:
# insert empty changeset for merge
- cc = changeset(author=c.author, branch=m, date=c.date,
- comment='convert-repo: CVS merge from branch %s' % c.branch,
- entries=[], tags=[], parents=[changesets[branches[m]], c])
+ cc = changeset(
+ author=c.author, branch=m, date=c.date,
+ comment='convert-repo: CVS merge from branch %s'
+ % c.branch,
+ entries=[], tags=[],
+ parents=[changesets[branches[m]], c])
changesets.insert(i + 1, cc)
branches[m] = i + 1
@@ -775,7 +777,7 @@
if opts["ancestors"]:
if cs.branch not in branches and cs.parents and cs.parents[0].id:
- ancestors[cs.branch] = (changesets[cs.parents[0].id-1].branch,
+ ancestors[cs.branch] = (changesets[cs.parents[0].id - 1].branch,
cs.parents[0].id)
branches[cs.branch] = cs.id
@@ -792,14 +794,15 @@
'%Y/%m/%d %H:%M:%S %1%2'))
ui.write('Author: %s\n' % cs.author)
ui.write('Branch: %s\n' % (cs.branch or 'HEAD'))
- ui.write('Tag%s: %s \n' % (['', 's'][len(cs.tags)>1],
+ ui.write('Tag%s: %s \n' % (['', 's'][len(cs.tags) > 1],
','.join(cs.tags) or '(none)'))
branchpoints = getattr(cs, 'branchpoints', None)
if branchpoints:
ui.write('Branchpoints: %s \n' % ', '.join(branchpoints))
if opts["parents"] and cs.parents:
- if len(cs.parents)>1:
- ui.write('Parents: %s\n' % (','.join([str(p.id) for p in cs.parents])))
+ if len(cs.parents) > 1:
+ ui.write('Parents: %s\n' %
+ (','.join([str(p.id) for p in cs.parents])))
else:
ui.write('Parent: %d\n' % cs.parents[0].id)
@@ -819,8 +822,10 @@
fn = f.file
if fn.startswith(opts["prefix"]):
fn = fn[len(opts["prefix"]):]
- ui.write('\t%s:%s->%s%s \n' % (fn, '.'.join([str(x) for x in f.parent]) or 'INITIAL',
- '.'.join([str(x) for x in f.revision]), ['', '(DEAD)'][f.dead]))
+ ui.write('\t%s:%s->%s%s \n' % (
+ fn, '.'.join([str(x) for x in f.parent]) or 'INITIAL',
+ '.'.join([str(x) for x in f.revision]),
+ ['', '(DEAD)'][f.dead]))
ui.write('\n')
# have we seen the start tag?
@@ -830,7 +835,7 @@
off = False
# see if we reached the end tag
- if len(revisions)>1 and not off:
+ if len(revisions) > 1 and not off:
if revisions[1] == str(cs.id) or \
revisions[1] in cs.tags:
break
--- a/hgext/convert/darcs.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/darcs.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from common import NoRepo, checktool, commandline, commit, converter_source
from mercurial.i18n import _
@@ -12,15 +12,19 @@
# The naming drift of ElementTree is fun!
-try: from xml.etree.cElementTree import ElementTree
+try:
+ from xml.etree.cElementTree import ElementTree
except ImportError:
- try: from xml.etree.ElementTree import ElementTree
+ try:
+ from xml.etree.ElementTree import ElementTree
except ImportError:
- try: from elementtree.cElementTree import ElementTree
+ try:
+ from elementtree.cElementTree import ElementTree
except ImportError:
- try: from elementtree.ElementTree import ElementTree
- except ImportError: ElementTree = None
-
+ try:
+ from elementtree.ElementTree import ElementTree
+ except ImportError:
+ ElementTree = None
class darcs_source(converter_source, commandline):
def __init__(self, ui, path, rev=None):
--- a/hgext/convert/filemap.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/filemap.py Thu Jan 28 23:13:45 2010 -0600
@@ -2,7 +2,7 @@
# Copyright 2007 Alexis S. L. Carvalho <alexis@cecm.usp.br>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import shlex
from mercurial.i18n import _
@@ -12,7 +12,7 @@
def rpairs(name):
e = len(name)
while e != -1:
- yield name[:e], name[e+1:]
+ yield name[:e], name[e + 1:]
e = name.rfind('/', 0, e)
yield '.', name
--- a/hgext/convert/git.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/git.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os
from mercurial import util
@@ -43,13 +43,15 @@
def getheads(self):
if not self.rev:
- return self.gitcmd('git rev-parse --branches --remotes').read().splitlines()
+ fh = self.gitcmd('git rev-parse --branches --remotes')
+ return fh.read().splitlines()
else:
fh = self.gitcmd("git rev-parse --verify %s" % self.rev)
return [fh.read()[:-1]]
def catfile(self, rev, type):
- if rev == "0" * 40: raise IOError()
+ if rev == "0" * 40:
+ raise IOError()
fh = self.gitcmd("git cat-file %s %s" % (type, rev))
return fh.read()
@@ -86,7 +88,7 @@
def getcommit(self, version):
c = self.catfile(version, "commit") # read the commit hash
end = c.find("\n\n")
- message = c[end+2:]
+ message = c[end + 2:]
message = self.recode(message)
l = c[:end].splitlines()
parents = []
@@ -105,7 +107,8 @@
committer = " ".join(p[:-2])
if committer[0] == "<": committer = committer[1:-1]
committer = self.recode(committer)
- if n == "parent": parents.append(v)
+ if n == "parent":
+ parents.append(v)
if committer and committer != author:
message += "\ncommitter: %s\n" % committer
@@ -145,7 +148,7 @@
fh.close()
else:
fh = self.gitcmd('git diff-tree --name-only --root -r %s "%s^%s" --'
- % (version, version, i+1))
+ % (version, version, i + 1))
changes = [f.rstrip('\n') for f in fh]
fh.close()
--- a/hgext/convert/gnuarch.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/gnuarch.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from common import NoRepo, commandline, commit, converter_source
from mercurial.i18n import _
@@ -89,7 +89,8 @@
# Get the complete list of revisions for that tree version
output, status = self.runlines('revisions', '-r', '-f', treeversion)
- self.checkexit(status, 'failed retrieveing revisions for %s' % treeversion)
+ self.checkexit(status, 'failed retrieveing revisions for %s'
+ % treeversion)
# No new iteration unless a revision has a continuation-of header
treeversion = None
@@ -116,7 +117,8 @@
# or if we have to 'jump' to a different treeversion given
# by the continuation-of header.
if self.changes[rev].continuationof:
- treeversion = '--'.join(self.changes[rev].continuationof.split('--')[:-1])
+ treeversion = '--'.join(
+ self.changes[rev].continuationof.split('--')[:-1])
break
# If we reached a base-0 revision w/o any continuation-of
@@ -220,7 +222,7 @@
return data, mode
def _exclude(self, name):
- exclude = [ '{arch}', '.arch-ids', '.arch-inventory' ]
+ exclude = ['{arch}', '.arch-ids', '.arch-inventory']
for exc in exclude:
if name.find(exc) != -1:
return True
@@ -285,7 +287,8 @@
# Commit revision origin when dealing with a branch or tag
if 'Continuation-of' in catlog:
- self.changes[rev].continuationof = self.recode(catlog['Continuation-of'])
+ self.changes[rev].continuationof = self.recode(
+ catlog['Continuation-of'])
except Exception:
raise util.Abort(_('could not parse cat-log of %s') % rev)
--- a/hgext/convert/hg.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/hg.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# Notes for hg->hg conversion:
#
@@ -74,7 +74,7 @@
def getheads(self):
h = self.repo.changelog.heads()
- return [ hex(x) for x in h ]
+ return [hex(x) for x in h]
def setbranch(self, branch, pbranches):
if not self.clonebranches:
@@ -147,8 +147,10 @@
m1node = self.repo.changelog.read(bin(parents[0]))[0]
parent = parents[0]
- if len(parents) < 2: parents.append(nullid)
- if len(parents) < 2: parents.append(nullid)
+ if len(parents) < 2:
+ parents.append(nullid)
+ if len(parents) < 2:
+ parents.append(nullid)
p2 = parents.pop(0)
text = commit.desc
@@ -161,8 +163,8 @@
while parents:
p1 = p2
p2 = parents.pop(0)
- ctx = context.memctx(self.repo, (p1, p2), text, files.keys(), getfilectx,
- commit.author, commit.date, extra)
+ ctx = context.memctx(self.repo, (p1, p2), text, files.keys(),
+ getfilectx, commit.author, commit.date, extra)
self.repo.commitctx(ctx)
text = "(octopus merge fixup)\n"
p2 = hex(self.repo.changelog.tip())
--- a/hgext/convert/monotone.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/monotone.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, re
from mercurial import util
@@ -38,16 +38,22 @@
lines = r'(?:.|\n)+'
self.dir_re = re.compile(space + "dir" + name)
- self.file_re = re.compile(space + "file" + name + "content" + revision)
- self.add_file_re = re.compile(space + "add_file" + name + "content" + revision)
- self.patch_re = re.compile(space + "patch" + name + "from" + revision + "to" + revision)
+ self.file_re = re.compile(space + "file" + name +
+ "content" + revision)
+ self.add_file_re = re.compile(space + "add_file" + name +
+ "content" + revision)
+ self.patch_re = re.compile(space + "patch" + name +
+ "from" + revision + "to" + revision)
self.rename_re = re.compile(space + "rename" + name + "to" + name)
self.delete_re = re.compile(space + "delete" + name)
- self.tag_re = re.compile(space + "tag" + name + "revision" + revision)
- self.cert_re = re.compile(lines + space + "name" + name + "value" + value)
+ self.tag_re = re.compile(space + "tag" + name + "revision" +
+ revision)
+ self.cert_re = re.compile(lines + space + "name" + name +
+ "value" + value)
attr = space + "file" + lines + space + "attr" + space
- self.attr_execute_re = re.compile(attr + '"mtn:execute"' + space + '"true"')
+ self.attr_execute_re = re.compile(attr + '"mtn:execute"' +
+ space + '"true"')
# cached data
self.manifest_rev = None
--- a/hgext/convert/p4.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/p4.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,11 +1,9 @@
-#
# Perforce source for convert extension.
#
# Copyright 2009, Frank Kingswood <frank@kingswood-consulting.co.uk>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
-#
+# GNU General Public License version 2 or any later version.
from mercurial import util
from mercurial.i18n import _
@@ -44,8 +42,12 @@
self.encoding = "latin_1"
self.depotname = {} # mapping from local name to depot name
self.modecache = {}
- self.re_type = re.compile("([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)(\+\w+)?$")
- self.re_keywords = re.compile(r"\$(Id|Header|Date|DateTime|Change|File|Revision|Author):[^$\n]*\$")
+ self.re_type = re.compile(
+ "([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)"
+ "(\+\w+)?$")
+ self.re_keywords = re.compile(
+ r"\$(Id|Header|Date|DateTime|Change|File|Revision|Author)"
+ r":[^$\n]*\$")
self.re_keywords_old = re.compile("\$(Id|Header):[^$\n]*\$")
self._parse(ui, path)
@@ -120,7 +122,8 @@
date = (int(d["time"]), 0) # timezone not set
c = commit(author=self.recode(d["user"]), date=util.datestr(date),
- parents=parents, desc=desc, branch='', extra={"p4": change})
+ parents=parents, desc=desc, branch='',
+ extra={"p4": change})
files = []
i = 0
--- a/hgext/convert/subversion.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/subversion.py Thu Jan 28 23:13:45 2010 -0600
@@ -138,7 +138,7 @@
# looking for several svn-specific files and directories in the given
# directory.
def filecheck(ui, path, proto):
- for x in ('locks', 'hooks', 'format', 'db', ):
+ for x in ('locks', 'hooks', 'format', 'db'):
if not os.path.exists(os.path.join(path, x)):
return False
return True
@@ -150,7 +150,7 @@
try:
opener = urllib2.build_opener()
rsp = opener.open('%s://%s/!svn/ver/0/.svn' % (proto, path))
- data = rsp.read()
+ data = rsp.read()
except urllib2.HTTPError, inst:
if inst.code != 404:
# Except for 404 we cannot know for sure this is not an svn repo
@@ -231,7 +231,7 @@
# deleted branches.
at = url.rfind('@')
if at >= 0:
- latest = int(url[at+1:])
+ latest = int(url[at + 1:])
url = url[:at]
except ValueError:
pass
@@ -363,7 +363,8 @@
'with more than one branch'))
revnum = self.revnum(self.heads[0])
if revnum < self.startrev:
- raise util.Abort(_('svn: no revision found after start revision %d')
+ raise util.Abort(
+ _('svn: no revision found after start revision %d')
% self.startrev)
return self.heads
@@ -389,7 +390,7 @@
uuid, module, revnum = self.revsplit(rev)
entries = svn.client.ls(self.baseurl + urllib.quote(module),
optrev(revnum), True, self.ctx)
- files = [n for n,e in entries.iteritems()
+ files = [n for n, e in entries.iteritems()
if e.kind == svn.core.svn_node_file]
copies = {}
@@ -564,7 +565,8 @@
except SubversionException:
dirent = None
if not dirent:
- raise SvnPathNotFound(_('%s not found up to revision %d') % (path, stop))
+ raise SvnPathNotFound(_('%s not found up to revision %d')
+ % (path, stop))
# stat() gives us the previous revision on this line of
# development, but it might be in *another module*. Fetch the
@@ -645,7 +647,8 @@
# We can avoid the reparent calls if the module has
# not changed but it probably does not worth the pain.
prevmodule = self.reparent('')
- fromkind = svn.ra.check_path(self.ra, parentpath.strip('/'), prevnum)
+ fromkind = svn.ra.check_path(self.ra, parentpath.strip('/'),
+ prevnum)
self.reparent(prevmodule)
if fromkind == svn.core.svn_node_file:
@@ -657,7 +660,7 @@
oroot = parentpath.strip('/')
nroot = path.strip('/')
children = self._find_children(oroot, prevnum)
- children = [s.replace(oroot,nroot) for s in children]
+ children = [s.replace(oroot, nroot) for s in children]
for child in children:
childpath = self.getrelpath("/" + child, pmodule)
@@ -738,7 +741,8 @@
# check whether this revision is the start of a branch or part
# of a branch renaming
orig_paths = sorted(orig_paths.iteritems())
- root_paths = [(p,e) for p,e in orig_paths if self.module.startswith(p)]
+ root_paths = [(p, e) for p, e in orig_paths
+ if self.module.startswith(p)]
if root_paths:
path, ent = root_paths[-1]
if ent.copyfrom_path:
@@ -750,8 +754,9 @@
prevmodule, prevnum = self.revsplit(previd)[1:]
if prevnum >= self.startrev:
parents = [previd]
- self.ui.note(_('found parent of branch %s at %d: %s\n') %
- (self.module, prevnum, prevmodule))
+ self.ui.note(
+ _('found parent of branch %s at %d: %s\n') %
+ (self.module, prevnum, prevmodule))
else:
self.ui.debug("no copyfrom path, don't know what to do.\n")
--- a/hgext/convert/transport.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/convert/transport.py Thu Jan 28 23:13:45 2010 -0600
@@ -125,4 +125,5 @@
self._baton, pool)
def do_update(self, revnum, path, *args, **kwargs):
- return self.Reporter(svn.ra.do_update(self.ra, revnum, path, *args, **kwargs))
+ return self.Reporter(svn.ra.do_update(self.ra, revnum, path,
+ *args, **kwargs))
--- a/hgext/extdiff.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/extdiff.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to allow external programs to compare revisions
@@ -239,7 +239,8 @@
for cmd, path in ui.configitems('extdiff'):
if cmd.startswith('cmd.'):
cmd = cmd[4:]
- if not path: path = cmd
+ if not path:
+ path = cmd
diffopts = ui.config('extdiff', 'opts.' + cmd, '')
diffopts = diffopts and [diffopts] or []
elif cmd.startswith('opts.'):
--- a/hgext/fetch.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/fetch.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''pull, update and merge in one command'''
--- a/hgext/gpg.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/gpg.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,7 +1,7 @@
# Copyright 2005, 2006 Benoit Boissinot <benoit.boissinot@ens-lyon.org>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''commands to sign and verify changesets'''
@@ -38,8 +38,10 @@
finally:
for f in (sigfile, datafile):
try:
- if f: os.unlink(f)
- except: pass
+ if f:
+ os.unlink(f)
+ except:
+ pass
keys = []
key, fingerprint = None, None
err = ""
--- a/hgext/graphlog.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/graphlog.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to view revision graphs from a shell
--- a/hgext/hgcia.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/hgcia.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,5 +1,7 @@
# Copyright (C) 2007-8 Brendan Cully <brendan@kublai.com>
-# Published under the GNU GPL
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
"""hooks for integrating with the CIA.vc notification service
--- a/hgext/hgk.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/hgk.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Chris Mason <mason@suse.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''browse the repository in a graphical way
@@ -186,7 +186,7 @@
l[x].changeset() # force reading
else:
l[x] = 1
- for x in xrange(chunk-1, -1, -1):
+ for x in xrange(chunk - 1, -1, -1):
if l[x] != 0:
yield (i + x, full != None and l[x] or None)
if i == 0:
--- a/hgext/highlight/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/highlight/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008, 2009 Patrick Mezard <pmezard@gmail.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
# The original module was split in an interface and an implementation
# file to defer pygments loading and speedup extension setup.
--- a/hgext/highlight/highlight.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/highlight/highlight.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007-2009 Adam Hupp <adam@hupp.org> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
# The original module was split in an interface and an implementation
# file to defer pygments loading and speedup extension setup.
--- a/hgext/inotify/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''accelerate status report using Linux's inotify service'''
@@ -60,7 +60,7 @@
if ui.config('inotify', 'debug'):
r2 = super(inotifydirstate, self).status(
match, False, clean, unknown)
- for c,a,b in zip('LMARDUIC', result, r2):
+ for c, a, b in zip('LMARDUIC', result, r2):
for f in a:
if f not in b:
ui.warn('*** inotify: %s +%s\n' % (c, f))
--- a/hgext/inotify/client.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/client.py Thu Jan 28 23:13:45 2010 -0600
@@ -5,13 +5,14 @@
# Copyright 2009 Nicolas Dumazet <nicdumz@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from mercurial.i18n import _
import common, server
import errno, os, socket, struct
-class QueryFailed(Exception): pass
+class QueryFailed(Exception):
+ pass
def start_server(function):
"""
@@ -137,8 +138,10 @@
states = 'almrx!'
if ignored:
raise ValueError('this is insanity')
- if clean: states += 'c'
- if unknown: states += '?'
+ if clean:
+ states += 'c'
+ if unknown:
+ states += '?'
yield states
req = '\0'.join(genquery())
--- a/hgext/inotify/common.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/common.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import cStringIO, socket, struct
--- a/hgext/inotify/linux/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/linux/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# This library is free software; you can redistribute it and/or modify
# it under the terms of version 2.1 of the GNU Lesser General Public
-# License, incorporated herein by reference.
+# License, or any later version.
'''Low-level interface to the Linux inotify subsystem.
--- a/hgext/inotify/linux/_inotify.c Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/linux/_inotify.c Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of version 2.1 of the GNU Lesser General
- * Public License, incorporated herein by reference.
+ * Public License or any later version.
*/
#include <Python.h>
@@ -17,298 +17,298 @@
static PyObject *init(PyObject *self, PyObject *args)
{
- PyObject *ret = NULL;
- int fd = -1;
+ PyObject *ret = NULL;
+ int fd = -1;
- if (!PyArg_ParseTuple(args, ":init"))
- goto bail;
+ if (!PyArg_ParseTuple(args, ":init"))
+ goto bail;
- Py_BEGIN_ALLOW_THREADS
- fd = inotify_init();
- Py_END_ALLOW_THREADS
+ Py_BEGIN_ALLOW_THREADS;
+ fd = inotify_init();
+ Py_END_ALLOW_THREADS;
- if (fd == -1) {
- PyErr_SetFromErrno(PyExc_OSError);
- goto bail;
- }
+ if (fd == -1) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ goto bail;
+ }
- ret = PyInt_FromLong(fd);
- if (ret == NULL)
- goto bail;
+ ret = PyInt_FromLong(fd);
+ if (ret == NULL)
+ goto bail;
- goto done;
+ goto done;
bail:
- if (fd != -1)
- close(fd);
+ if (fd != -1)
+ close(fd);
- Py_CLEAR(ret);
+ Py_CLEAR(ret);
done:
- return ret;
+ return ret;
}
PyDoc_STRVAR(
- init_doc,
- "init() -> fd\n"
- "\n"
- "Initialise an inotify instance.\n"
- "Return a file descriptor associated with a new inotify event queue.");
+ init_doc,
+ "init() -> fd\n"
+ "\n"
+ "Initialise an inotify instance.\n"
+ "Return a file descriptor associated with a new inotify event queue.");
static PyObject *add_watch(PyObject *self, PyObject *args)
{
- PyObject *ret = NULL;
- uint32_t mask;
- int wd = -1;
- char *path;
- int fd;
+ PyObject *ret = NULL;
+ uint32_t mask;
+ int wd = -1;
+ char *path;
+ int fd;
- if (!PyArg_ParseTuple(args, "isI:add_watch", &fd, &path, &mask))
- goto bail;
+ if (!PyArg_ParseTuple(args, "isI:add_watch", &fd, &path, &mask))
+ goto bail;
- Py_BEGIN_ALLOW_THREADS
- wd = inotify_add_watch(fd, path, mask);
- Py_END_ALLOW_THREADS
+ Py_BEGIN_ALLOW_THREADS;
+ wd = inotify_add_watch(fd, path, mask);
+ Py_END_ALLOW_THREADS;
- if (wd == -1) {
- PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
- goto bail;
- }
+ if (wd == -1) {
+ PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
+ goto bail;
+ }
- ret = PyInt_FromLong(wd);
- if (ret == NULL)
- goto bail;
+ ret = PyInt_FromLong(wd);
+ if (ret == NULL)
+ goto bail;
- goto done;
+ goto done;
bail:
- if (wd != -1)
- inotify_rm_watch(fd, wd);
+ if (wd != -1)
+ inotify_rm_watch(fd, wd);
- Py_CLEAR(ret);
+ Py_CLEAR(ret);
done:
- return ret;
+ return ret;
}
PyDoc_STRVAR(
- add_watch_doc,
- "add_watch(fd, path, mask) -> wd\n"
- "\n"
- "Add a watch to an inotify instance, or modify an existing watch.\n"
- "\n"
- " fd: file descriptor returned by init()\n"
- " path: path to watch\n"
- " mask: mask of events to watch for\n"
- "\n"
- "Return a unique numeric watch descriptor for the inotify instance\n"
- "mapped by the file descriptor.");
+ add_watch_doc,
+ "add_watch(fd, path, mask) -> wd\n"
+ "\n"
+ "Add a watch to an inotify instance, or modify an existing watch.\n"
+ "\n"
+ " fd: file descriptor returned by init()\n"
+ " path: path to watch\n"
+ " mask: mask of events to watch for\n"
+ "\n"
+ "Return a unique numeric watch descriptor for the inotify instance\n"
+ "mapped by the file descriptor.");
static PyObject *remove_watch(PyObject *self, PyObject *args)
{
- uint32_t wd;
- int fd;
- int r;
+ uint32_t wd;
+ int fd;
+ int r;
- if (!PyArg_ParseTuple(args, "iI:remove_watch", &fd, &wd))
- return NULL;
+ if (!PyArg_ParseTuple(args, "iI:remove_watch", &fd, &wd))
+ return NULL;
- Py_BEGIN_ALLOW_THREADS
- r = inotify_rm_watch(fd, wd);
- Py_END_ALLOW_THREADS
+ Py_BEGIN_ALLOW_THREADS;
+ r = inotify_rm_watch(fd, wd);
+ Py_END_ALLOW_THREADS;
- if (r == -1) {
- PyErr_SetFromErrno(PyExc_OSError);
- return NULL;
- }
+ if (r == -1) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
- Py_INCREF(Py_None);
- return Py_None;
+ Py_INCREF(Py_None);
+ return Py_None;
}
PyDoc_STRVAR(
- remove_watch_doc,
- "remove_watch(fd, wd)\n"
- "\n"
- " fd: file descriptor returned by init()\n"
- " wd: watch descriptor returned by add_watch()\n"
- "\n"
- "Remove a watch associated with the watch descriptor wd from the\n"
- "inotify instance associated with the file descriptor fd.\n"
- "\n"
- "Removing a watch causes an IN_IGNORED event to be generated for this\n"
- "watch descriptor.");
+ remove_watch_doc,
+ "remove_watch(fd, wd)\n"
+ "\n"
+ " fd: file descriptor returned by init()\n"
+ " wd: watch descriptor returned by add_watch()\n"
+ "\n"
+ "Remove a watch associated with the watch descriptor wd from the\n"
+ "inotify instance associated with the file descriptor fd.\n"
+ "\n"
+ "Removing a watch causes an IN_IGNORED event to be generated for this\n"
+ "watch descriptor.");
#define bit_name(x) {x, #x}
static struct {
- int bit;
- const char *name;
- PyObject *pyname;
+ int bit;
+ const char *name;
+ PyObject *pyname;
} bit_names[] = {
- bit_name(IN_ACCESS),
- bit_name(IN_MODIFY),
- bit_name(IN_ATTRIB),
- bit_name(IN_CLOSE_WRITE),
- bit_name(IN_CLOSE_NOWRITE),
- bit_name(IN_OPEN),
- bit_name(IN_MOVED_FROM),
- bit_name(IN_MOVED_TO),
- bit_name(IN_CREATE),
- bit_name(IN_DELETE),
- bit_name(IN_DELETE_SELF),
- bit_name(IN_MOVE_SELF),
- bit_name(IN_UNMOUNT),
- bit_name(IN_Q_OVERFLOW),
- bit_name(IN_IGNORED),
- bit_name(IN_ONLYDIR),
- bit_name(IN_DONT_FOLLOW),
- bit_name(IN_MASK_ADD),
- bit_name(IN_ISDIR),
- bit_name(IN_ONESHOT),
- {0}
+ bit_name(IN_ACCESS),
+ bit_name(IN_MODIFY),
+ bit_name(IN_ATTRIB),
+ bit_name(IN_CLOSE_WRITE),
+ bit_name(IN_CLOSE_NOWRITE),
+ bit_name(IN_OPEN),
+ bit_name(IN_MOVED_FROM),
+ bit_name(IN_MOVED_TO),
+ bit_name(IN_CREATE),
+ bit_name(IN_DELETE),
+ bit_name(IN_DELETE_SELF),
+ bit_name(IN_MOVE_SELF),
+ bit_name(IN_UNMOUNT),
+ bit_name(IN_Q_OVERFLOW),
+ bit_name(IN_IGNORED),
+ bit_name(IN_ONLYDIR),
+ bit_name(IN_DONT_FOLLOW),
+ bit_name(IN_MASK_ADD),
+ bit_name(IN_ISDIR),
+ bit_name(IN_ONESHOT),
+ {0}
};
static PyObject *decode_mask(int mask)
{
- PyObject *ret = PyList_New(0);
- int i;
+ PyObject *ret = PyList_New(0);
+ int i;
- if (ret == NULL)
- goto bail;
+ if (ret == NULL)
+ goto bail;
- for (i = 0; bit_names[i].bit; i++) {
- if (mask & bit_names[i].bit) {
- if (bit_names[i].pyname == NULL) {
- bit_names[i].pyname = PyString_FromString(bit_names[i].name);
- if (bit_names[i].pyname == NULL)
- goto bail;
- }
- Py_INCREF(bit_names[i].pyname);
- if (PyList_Append(ret, bit_names[i].pyname) == -1)
- goto bail;
+ for (i = 0; bit_names[i].bit; i++) {
+ if (mask & bit_names[i].bit) {
+ if (bit_names[i].pyname == NULL) {
+ bit_names[i].pyname = PyString_FromString(bit_names[i].name);
+ if (bit_names[i].pyname == NULL)
+ goto bail;
+ }
+ Py_INCREF(bit_names[i].pyname);
+ if (PyList_Append(ret, bit_names[i].pyname) == -1)
+ goto bail;
+ }
}
- }
- goto done;
+ goto done;
bail:
- Py_CLEAR(ret);
+ Py_CLEAR(ret);
done:
- return ret;
+ return ret;
}
static PyObject *pydecode_mask(PyObject *self, PyObject *args)
{
- int mask;
+ int mask;
- if (!PyArg_ParseTuple(args, "i:decode_mask", &mask))
- return NULL;
+ if (!PyArg_ParseTuple(args, "i:decode_mask", &mask))
+ return NULL;
- return decode_mask(mask);
+ return decode_mask(mask);
}
PyDoc_STRVAR(
- decode_mask_doc,
- "decode_mask(mask) -> list_of_strings\n"
- "\n"
- "Decode an inotify mask value into a list of strings that give the\n"
- "name of each bit set in the mask.");
+ decode_mask_doc,
+ "decode_mask(mask) -> list_of_strings\n"
+ "\n"
+ "Decode an inotify mask value into a list of strings that give the\n"
+ "name of each bit set in the mask.");
static char doc[] = "Low-level inotify interface wrappers.";
static void define_const(PyObject *dict, const char *name, uint32_t val)
{
- PyObject *pyval = PyInt_FromLong(val);
- PyObject *pyname = PyString_FromString(name);
+ PyObject *pyval = PyInt_FromLong(val);
+ PyObject *pyname = PyString_FromString(name);
- if (!pyname || !pyval)
- goto bail;
+ if (!pyname || !pyval)
+ goto bail;
- PyDict_SetItem(dict, pyname, pyval);
+ PyDict_SetItem(dict, pyname, pyval);
bail:
- Py_XDECREF(pyname);
- Py_XDECREF(pyval);
+ Py_XDECREF(pyname);
+ Py_XDECREF(pyval);
}
static void define_consts(PyObject *dict)
{
- define_const(dict, "IN_ACCESS", IN_ACCESS);
- define_const(dict, "IN_MODIFY", IN_MODIFY);
- define_const(dict, "IN_ATTRIB", IN_ATTRIB);
- define_const(dict, "IN_CLOSE_WRITE", IN_CLOSE_WRITE);
- define_const(dict, "IN_CLOSE_NOWRITE", IN_CLOSE_NOWRITE);
- define_const(dict, "IN_OPEN", IN_OPEN);
- define_const(dict, "IN_MOVED_FROM", IN_MOVED_FROM);
- define_const(dict, "IN_MOVED_TO", IN_MOVED_TO);
+ define_const(dict, "IN_ACCESS", IN_ACCESS);
+ define_const(dict, "IN_MODIFY", IN_MODIFY);
+ define_const(dict, "IN_ATTRIB", IN_ATTRIB);
+ define_const(dict, "IN_CLOSE_WRITE", IN_CLOSE_WRITE);
+ define_const(dict, "IN_CLOSE_NOWRITE", IN_CLOSE_NOWRITE);
+ define_const(dict, "IN_OPEN", IN_OPEN);
+ define_const(dict, "IN_MOVED_FROM", IN_MOVED_FROM);
+ define_const(dict, "IN_MOVED_TO", IN_MOVED_TO);
- define_const(dict, "IN_CLOSE", IN_CLOSE);
- define_const(dict, "IN_MOVE", IN_MOVE);
+ define_const(dict, "IN_CLOSE", IN_CLOSE);
+ define_const(dict, "IN_MOVE", IN_MOVE);
- define_const(dict, "IN_CREATE", IN_CREATE);
- define_const(dict, "IN_DELETE", IN_DELETE);
- define_const(dict, "IN_DELETE_SELF", IN_DELETE_SELF);
- define_const(dict, "IN_MOVE_SELF", IN_MOVE_SELF);
- define_const(dict, "IN_UNMOUNT", IN_UNMOUNT);
- define_const(dict, "IN_Q_OVERFLOW", IN_Q_OVERFLOW);
- define_const(dict, "IN_IGNORED", IN_IGNORED);
+ define_const(dict, "IN_CREATE", IN_CREATE);
+ define_const(dict, "IN_DELETE", IN_DELETE);
+ define_const(dict, "IN_DELETE_SELF", IN_DELETE_SELF);
+ define_const(dict, "IN_MOVE_SELF", IN_MOVE_SELF);
+ define_const(dict, "IN_UNMOUNT", IN_UNMOUNT);
+ define_const(dict, "IN_Q_OVERFLOW", IN_Q_OVERFLOW);
+ define_const(dict, "IN_IGNORED", IN_IGNORED);
- define_const(dict, "IN_ONLYDIR", IN_ONLYDIR);
- define_const(dict, "IN_DONT_FOLLOW", IN_DONT_FOLLOW);
- define_const(dict, "IN_MASK_ADD", IN_MASK_ADD);
- define_const(dict, "IN_ISDIR", IN_ISDIR);
- define_const(dict, "IN_ONESHOT", IN_ONESHOT);
- define_const(dict, "IN_ALL_EVENTS", IN_ALL_EVENTS);
+ define_const(dict, "IN_ONLYDIR", IN_ONLYDIR);
+ define_const(dict, "IN_DONT_FOLLOW", IN_DONT_FOLLOW);
+ define_const(dict, "IN_MASK_ADD", IN_MASK_ADD);
+ define_const(dict, "IN_ISDIR", IN_ISDIR);
+ define_const(dict, "IN_ONESHOT", IN_ONESHOT);
+ define_const(dict, "IN_ALL_EVENTS", IN_ALL_EVENTS);
}
struct event {
- PyObject_HEAD
- PyObject *wd;
- PyObject *mask;
- PyObject *cookie;
- PyObject *name;
+ PyObject_HEAD
+ PyObject *wd;
+ PyObject *mask;
+ PyObject *cookie;
+ PyObject *name;
};
static PyObject *event_wd(PyObject *self, void *x)
{
- struct event *evt = (struct event *) self;
- Py_INCREF(evt->wd);
- return evt->wd;
+ struct event *evt = (struct event *)self;
+ Py_INCREF(evt->wd);
+ return evt->wd;
}
static PyObject *event_mask(PyObject *self, void *x)
{
- struct event *evt = (struct event *) self;
- Py_INCREF(evt->mask);
- return evt->mask;
+ struct event *evt = (struct event *)self;
+ Py_INCREF(evt->mask);
+ return evt->mask;
}
static PyObject *event_cookie(PyObject *self, void *x)
{
- struct event *evt = (struct event *) self;
- Py_INCREF(evt->cookie);
- return evt->cookie;
+ struct event *evt = (struct event *)self;
+ Py_INCREF(evt->cookie);
+ return evt->cookie;
}
static PyObject *event_name(PyObject *self, void *x)
{
- struct event *evt = (struct event *) self;
- Py_INCREF(evt->name);
- return evt->name;
+ struct event *evt = (struct event *)self;
+ Py_INCREF(evt->name);
+ return evt->name;
}
static struct PyGetSetDef event_getsets[] = {
- {"wd", event_wd, NULL,
- "watch descriptor"},
- {"mask", event_mask, NULL,
- "event mask"},
- {"cookie", event_cookie, NULL,
- "rename cookie, if rename-related event"},
- {"name", event_name, NULL,
- "file name"},
- {NULL}
+ {"wd", event_wd, NULL,
+ "watch descriptor"},
+ {"mask", event_mask, NULL,
+ "event mask"},
+ {"cookie", event_cookie, NULL,
+ "rename cookie, if rename-related event"},
+ {"name", event_name, NULL,
+ "file name"},
+ {NULL}
};
PyDoc_STRVAR(
@@ -317,284 +317,285 @@
static PyObject *event_new(PyTypeObject *t, PyObject *a, PyObject *k)
{
- return (*t->tp_alloc)(t, 0);
+ return (*t->tp_alloc)(t, 0);
}
static void event_dealloc(struct event *evt)
{
- Py_XDECREF(evt->wd);
- Py_XDECREF(evt->mask);
- Py_XDECREF(evt->cookie);
- Py_XDECREF(evt->name);
+ Py_XDECREF(evt->wd);
+ Py_XDECREF(evt->mask);
+ Py_XDECREF(evt->cookie);
+ Py_XDECREF(evt->name);
- (*evt->ob_type->tp_free)(evt);
+ (*evt->ob_type->tp_free)(evt);
}
static PyObject *event_repr(struct event *evt)
{
- int wd = PyInt_AsLong(evt->wd);
- int cookie = evt->cookie == Py_None ? -1 : PyInt_AsLong(evt->cookie);
- PyObject *ret = NULL, *pymasks = NULL, *pymask = NULL;
- PyObject *join = NULL;
- char *maskstr;
+ int wd = PyInt_AsLong(evt->wd);
+ int cookie = evt->cookie == Py_None ? -1 : PyInt_AsLong(evt->cookie);
+ PyObject *ret = NULL, *pymasks = NULL, *pymask = NULL;
+ PyObject *join = NULL;
+ char *maskstr;
- join = PyString_FromString("|");
- if (join == NULL)
- goto bail;
+ join = PyString_FromString("|");
+ if (join == NULL)
+ goto bail;
- pymasks = decode_mask(PyInt_AsLong(evt->mask));
- if (pymasks == NULL)
- goto bail;
+ pymasks = decode_mask(PyInt_AsLong(evt->mask));
+ if (pymasks == NULL)
+ goto bail;
- pymask = _PyString_Join(join, pymasks);
- if (pymask == NULL)
- goto bail;
+ pymask = _PyString_Join(join, pymasks);
+ if (pymask == NULL)
+ goto bail;
- maskstr = PyString_AsString(pymask);
+ maskstr = PyString_AsString(pymask);
+
+ if (evt->name != Py_None) {
+ PyObject *pyname = PyString_Repr(evt->name, 1);
+ char *name = pyname ? PyString_AsString(pyname) : "???";
- if (evt->name != Py_None) {
- PyObject *pyname = PyString_Repr(evt->name, 1);
- char *name = pyname ? PyString_AsString(pyname) : "???";
-
- if (cookie == -1)
- ret = PyString_FromFormat("event(wd=%d, mask=%s, name=%s)",
- wd, maskstr, name);
- else
- ret = PyString_FromFormat("event(wd=%d, mask=%s, "
- "cookie=0x%x, name=%s)",
- wd, maskstr, cookie, name);
+ if (cookie == -1)
+ ret = PyString_FromFormat(
+ "event(wd=%d, mask=%s, name=%s)",
+ wd, maskstr, name);
+ else
+ ret = PyString_FromFormat("event(wd=%d, mask=%s, "
+ "cookie=0x%x, name=%s)",
+ wd, maskstr, cookie, name);
- Py_XDECREF(pyname);
- } else {
- if (cookie == -1)
- ret = PyString_FromFormat("event(wd=%d, mask=%s)",
- wd, maskstr);
- else {
- ret = PyString_FromFormat("event(wd=%d, mask=%s, cookie=0x%x)",
- wd, maskstr, cookie);
+ Py_XDECREF(pyname);
+ } else {
+ if (cookie == -1)
+ ret = PyString_FromFormat("event(wd=%d, mask=%s)",
+ wd, maskstr);
+ else {
+ ret = PyString_FromFormat(
+ "event(wd=%d, mask=%s, cookie=0x%x)",
+ wd, maskstr, cookie);
+ }
}
- }
- goto done;
+ goto done;
bail:
- Py_CLEAR(ret);
+ Py_CLEAR(ret);
done:
- Py_XDECREF(pymask);
- Py_XDECREF(pymasks);
- Py_XDECREF(join);
+ Py_XDECREF(pymask);
+ Py_XDECREF(pymasks);
+ Py_XDECREF(join);
- return ret;
+ return ret;
}
static PyTypeObject event_type = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- "_inotify.event", /*tp_name*/
- sizeof(struct event), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)event_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- (reprfunc)event_repr, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash */
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
- event_doc, /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- 0, /* tp_methods */
- 0, /* tp_members */
- event_getsets, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- event_new, /* tp_new */
+ PyObject_HEAD_INIT(NULL)
+ 0, /*ob_size*/
+ "_inotify.event", /*tp_name*/
+ sizeof(struct event), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ (destructor)event_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ (reprfunc)event_repr, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash */
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
+ event_doc, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ 0, /* tp_methods */
+ 0, /* tp_members */
+ event_getsets, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ event_new, /* tp_new */
};
PyObject *read_events(PyObject *self, PyObject *args)
{
- PyObject *ctor_args = NULL;
- PyObject *pybufsize = NULL;
- PyObject *ret = NULL;
- int bufsize = 65536;
- char *buf = NULL;
- int nread, pos;
- int fd;
+ PyObject *ctor_args = NULL;
+ PyObject *pybufsize = NULL;
+ PyObject *ret = NULL;
+ int bufsize = 65536;
+ char *buf = NULL;
+ int nread, pos;
+ int fd;
+
+ if (!PyArg_ParseTuple(args, "i|O:read", &fd, &pybufsize))
+ goto bail;
- if (!PyArg_ParseTuple(args, "i|O:read", &fd, &pybufsize))
- goto bail;
+ if (pybufsize && pybufsize != Py_None)
+ bufsize = PyInt_AsLong(pybufsize);
- if (pybufsize && pybufsize != Py_None)
- bufsize = PyInt_AsLong(pybufsize);
+ ret = PyList_New(0);
+ if (ret == NULL)
+ goto bail;
- ret = PyList_New(0);
- if (ret == NULL)
- goto bail;
+ if (bufsize <= 0) {
+ int r;
- if (bufsize <= 0) {
- int r;
+ Py_BEGIN_ALLOW_THREADS;
+ r = ioctl(fd, FIONREAD, &bufsize);
+ Py_END_ALLOW_THREADS;
- Py_BEGIN_ALLOW_THREADS
- r = ioctl(fd, FIONREAD, &bufsize);
- Py_END_ALLOW_THREADS
-
- if (r == -1) {
- PyErr_SetFromErrno(PyExc_OSError);
- goto bail;
+ if (r == -1) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ goto bail;
+ }
+ if (bufsize == 0)
+ goto done;
}
- if (bufsize == 0)
- goto done;
- }
- else {
- static long name_max;
- static long name_fd = -1;
- long min;
+ else {
+ static long name_max;
+ static long name_fd = -1;
+ long min;
- if (name_fd != fd) {
- name_fd = fd;
- Py_BEGIN_ALLOW_THREADS
- name_max = fpathconf(fd, _PC_NAME_MAX);
- Py_END_ALLOW_THREADS
+ if (name_fd != fd) {
+ name_fd = fd;
+ Py_BEGIN_ALLOW_THREADS;
+ name_max = fpathconf(fd, _PC_NAME_MAX);
+ Py_END_ALLOW_THREADS;
+ }
+
+ min = sizeof(struct inotify_event) + name_max + 1;
+
+ if (bufsize < min) {
+ PyErr_Format(PyExc_ValueError,
+ "bufsize must be at least %d", (int)min);
+ goto bail;
+ }
}
- min = sizeof(struct inotify_event) + name_max + 1;
-
- if (bufsize < min) {
- PyErr_Format(PyExc_ValueError, "bufsize must be at least %d",
- (int) min);
- goto bail;
- }
- }
-
- buf = alloca(bufsize);
-
- Py_BEGIN_ALLOW_THREADS
- nread = read(fd, buf, bufsize);
- Py_END_ALLOW_THREADS
-
- if (nread == -1) {
- PyErr_SetFromErrno(PyExc_OSError);
- goto bail;
- }
-
- ctor_args = PyTuple_New(0);
-
- if (ctor_args == NULL)
- goto bail;
+ buf = alloca(bufsize);
- pos = 0;
-
- while (pos < nread) {
- struct inotify_event *in = (struct inotify_event *) (buf + pos);
- struct event *evt;
- PyObject *obj;
-
- obj = PyObject_CallObject((PyObject *) &event_type, ctor_args);
-
- if (obj == NULL)
- goto bail;
-
- evt = (struct event *) obj;
+ Py_BEGIN_ALLOW_THREADS;
+ nread = read(fd, buf, bufsize);
+ Py_END_ALLOW_THREADS;
- evt->wd = PyInt_FromLong(in->wd);
- evt->mask = PyInt_FromLong(in->mask);
- if (in->mask & IN_MOVE)
- evt->cookie = PyInt_FromLong(in->cookie);
- else {
- Py_INCREF(Py_None);
- evt->cookie = Py_None;
- }
- if (in->len)
- evt->name = PyString_FromString(in->name);
- else {
- Py_INCREF(Py_None);
- evt->name = Py_None;
+ if (nread == -1) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ goto bail;
}
- if (!evt->wd || !evt->mask || !evt->cookie || !evt->name)
- goto mybail;
+ ctor_args = PyTuple_New(0);
+
+ if (ctor_args == NULL)
+ goto bail;
+
+ pos = 0;
- if (PyList_Append(ret, obj) == -1)
- goto mybail;
+ while (pos < nread) {
+ struct inotify_event *in = (struct inotify_event *)(buf + pos);
+ struct event *evt;
+ PyObject *obj;
- pos += sizeof(struct inotify_event) + in->len;
- continue;
+ obj = PyObject_CallObject((PyObject *)&event_type, ctor_args);
+
+ if (obj == NULL)
+ goto bail;
+
+ evt = (struct event *)obj;
- mybail:
- Py_CLEAR(evt->wd);
- Py_CLEAR(evt->mask);
- Py_CLEAR(evt->cookie);
- Py_CLEAR(evt->name);
- Py_DECREF(obj);
+ evt->wd = PyInt_FromLong(in->wd);
+ evt->mask = PyInt_FromLong(in->mask);
+ if (in->mask & IN_MOVE)
+ evt->cookie = PyInt_FromLong(in->cookie);
+ else {
+ Py_INCREF(Py_None);
+ evt->cookie = Py_None;
+ }
+ if (in->len)
+ evt->name = PyString_FromString(in->name);
+ else {
+ Py_INCREF(Py_None);
+ evt->name = Py_None;
+ }
+
+ if (!evt->wd || !evt->mask || !evt->cookie || !evt->name)
+ goto mybail;
- goto bail;
- }
+ if (PyList_Append(ret, obj) == -1)
+ goto mybail;
+
+ pos += sizeof(struct inotify_event) + in->len;
+ continue;
- goto done;
+ mybail:
+ Py_CLEAR(evt->wd);
+ Py_CLEAR(evt->mask);
+ Py_CLEAR(evt->cookie);
+ Py_CLEAR(evt->name);
+ Py_DECREF(obj);
+
+ goto bail;
+ }
+
+ goto done;
bail:
- Py_CLEAR(ret);
+ Py_CLEAR(ret);
done:
- Py_XDECREF(ctor_args);
+ Py_XDECREF(ctor_args);
- return ret;
+ return ret;
}
PyDoc_STRVAR(
- read_doc,
- "read(fd, bufsize[=65536]) -> list_of_events\n"
- "\n"
- "\nRead inotify events from a file descriptor.\n"
- "\n"
- " fd: file descriptor returned by init()\n"
- " bufsize: size of buffer to read into, in bytes\n"
- "\n"
- "Return a list of event objects.\n"
- "\n"
- "If bufsize is > 0, block until events are available to be read.\n"
- "Otherwise, immediately return all events that can be read without\n"
- "blocking.");
-
+ read_doc,
+ "read(fd, bufsize[=65536]) -> list_of_events\n"
+ "\n"
+ "\nRead inotify events from a file descriptor.\n"
+ "\n"
+ " fd: file descriptor returned by init()\n"
+ " bufsize: size of buffer to read into, in bytes\n"
+ "\n"
+ "Return a list of event objects.\n"
+ "\n"
+ "If bufsize is > 0, block until events are available to be read.\n"
+ "Otherwise, immediately return all events that can be read without\n"
+ "blocking.");
static PyMethodDef methods[] = {
- {"init", init, METH_VARARGS, init_doc},
- {"add_watch", add_watch, METH_VARARGS, add_watch_doc},
- {"remove_watch", remove_watch, METH_VARARGS, remove_watch_doc},
- {"read", read_events, METH_VARARGS, read_doc},
- {"decode_mask", pydecode_mask, METH_VARARGS, decode_mask_doc},
- {NULL},
+ {"init", init, METH_VARARGS, init_doc},
+ {"add_watch", add_watch, METH_VARARGS, add_watch_doc},
+ {"remove_watch", remove_watch, METH_VARARGS, remove_watch_doc},
+ {"read", read_events, METH_VARARGS, read_doc},
+ {"decode_mask", pydecode_mask, METH_VARARGS, decode_mask_doc},
+ {NULL},
};
void init_inotify(void)
{
- PyObject *mod, *dict;
+ PyObject *mod, *dict;
- if (PyType_Ready(&event_type) == -1)
- return;
+ if (PyType_Ready(&event_type) == -1)
+ return;
- mod = Py_InitModule3("_inotify", methods, doc);
+ mod = Py_InitModule3("_inotify", methods, doc);
- dict = PyModule_GetDict(mod);
+ dict = PyModule_GetDict(mod);
- if (dict)
- define_consts(dict);
+ if (dict)
+ define_consts(dict);
}
--- a/hgext/inotify/linux/watcher.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/linux/watcher.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# This library is free software; you can redistribute it and/or modify
# it under the terms of version 2.1 of the GNU Lesser General Public
-# License, incorporated herein by reference.
+# License, or any later version.
'''High-level interfaces to the Linux inotify subsystem.
--- a/hgext/inotify/linuxserver.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/linuxserver.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from mercurial.i18n import _
from mercurial import osutil, util
@@ -112,7 +112,8 @@
timeout = None
timeobj = None
for obj in cls.instances.itervalues():
- if obj.timeout is not None and (timeout is None or obj.timeout < timeout):
+ if obj.timeout is not None and (timeout is None
+ or obj.timeout < timeout):
timeout, timeobj = obj.timeout, obj
try:
events = cls.poll.poll(timeout)
--- a/hgext/inotify/server.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/inotify/server.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Nicolas Dumazet <nicdumz@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from mercurial.i18n import _
from mercurial import cmdutil, osutil, util
@@ -17,7 +17,8 @@
import sys
import tempfile
-class AlreadyStartedException(Exception): pass
+class AlreadyStartedException(Exception):
+ pass
def join(a, b):
if a:
@@ -30,7 +31,7 @@
c = path.rfind('/')
if c == -1:
return '', path
- return path[:c], path[c+1:]
+ return path[:c], path[c + 1:]
walk_ignored_errors = (errno.ENOENT, errno.ENAMETOOLONG)
@@ -332,8 +333,8 @@
self.sock.bind(self.sockpath)
except socket.error, err:
if err[0] == errno.EADDRINUSE:
- raise AlreadyStartedException( _('cannot start: socket is '
- 'already bound'))
+ raise AlreadyStartedException(_('cannot start: socket is '
+ 'already bound'))
if err[0] == "AF_UNIX path too long":
if os.path.islink(self.sockpath) and \
not os.path.exists(self.sockpath):
--- a/hgext/interhg.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/interhg.py Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
# Edward Lee <edward.lee@engineering.uiuc.edu>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''expand expressions into changelog and summaries
--- a/hgext/keyword.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/keyword.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007-2009 Christian Ebert <blacktrash@gmx.net>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
# $Id$
#
--- a/hgext/mq.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/mq.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Chris Mason <mason@suse.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''manage a stack of patches
@@ -376,7 +376,8 @@
try:
guards = self.opener(self.guards_path).read().split()
except IOError, err:
- if err.errno != errno.ENOENT: raise
+ if err.errno != errno.ENOENT:
+ raise
guards = []
for i, guard in enumerate(guards):
bad = self.check_guard(guard)
@@ -450,9 +451,12 @@
for i in items:
fp.write("%s\n" % i)
fp.close()
- if self.applied_dirty: write_list(map(str, self.applied), self.status_path)
- if self.series_dirty: write_list(self.full_series, self.series_path)
- if self.guards_dirty: write_list(self.active_guards, self.guards_path)
+ if self.applied_dirty:
+ write_list(map(str, self.applied), self.status_path)
+ if self.series_dirty:
+ write_list(self.full_series, self.series_path)
+ if self.guards_dirty:
+ write_list(self.active_guards, self.guards_path)
def removeundo(self, repo):
undo = repo.sjoin('undo')
@@ -482,7 +486,7 @@
def mergeone(self, repo, mergeq, head, patch, rev, diffopts):
# first try just applying the patch
- (err, n) = self.apply(repo, [ patch ], update_status=False,
+ (err, n) = self.apply(repo, [patch], update_status=False,
strict=True, merge=rev)
if err == 0:
@@ -529,7 +533,7 @@
return bin(self.applied[-1].rev)
pp = repo.changelog.parents(rev)
if pp[1] != nullid:
- arevs = [ x.rev for x in self.applied ]
+ arevs = [x.rev for x in self.applied]
p0 = hex(pp[0])
p1 = hex(pp[1])
if p0 in arevs:
@@ -643,10 +647,10 @@
message = ph.message
if not message:
- message = _("imported patch %s\n") % patchname
+ message = "imported patch %s\n" % patchname
else:
if list:
- message.append(_("\nimported patch %s") % patchname)
+ message.append("\nimported patch %s" % patchname)
message = '\n'.join(message)
if ph.haspatch:
@@ -864,7 +868,8 @@
wlock.release()
wlock = None
r = self.qrepo()
- if r: r.add([patchfn])
+ if r:
+ r.add([patchfn])
except:
repo.rollback()
raise
@@ -941,7 +946,7 @@
if not os.path.isfile(self.join(patch)):
try:
sno = int(patch)
- except(ValueError, OverflowError):
+ except (ValueError, OverflowError):
pass
else:
if -len(self.series) <= sno < len(self.series):
@@ -957,8 +962,8 @@
if res:
i = self.series.index(res)
try:
- off = int(patch[minus+1:] or 1)
- except(ValueError, OverflowError):
+ off = int(patch[minus + 1:] or 1)
+ except (ValueError, OverflowError):
pass
else:
if i - off >= 0:
@@ -969,8 +974,8 @@
if res:
i = self.series.index(res)
try:
- off = int(patch[plus+1:] or 1)
- except(ValueError, OverflowError):
+ off = int(patch[plus + 1:] or 1)
+ except (ValueError, OverflowError):
pass
else:
if i + off < len(self.series):
@@ -1106,7 +1111,7 @@
if not update:
parents = repo.dirstate.parents()
- rr = [ bin(x.rev) for x in self.applied ]
+ rr = [bin(x.rev) for x in self.applied]
for p in parents:
if p in rr:
self.ui.warn(_("qpop: forcing dirstate update\n"))
@@ -1306,7 +1311,8 @@
f = repo.file(dst)
src = f.renamed(man[dst])
if src:
- copies.setdefault(src[0], []).extend(copies.get(dst, []))
+ copies.setdefault(src[0], []).extend(
+ copies.get(dst, []))
if dst in a:
copies[src[0]].append(dst)
# we can't copy a file created by the patch itself
@@ -1440,8 +1446,8 @@
length = len(self.series) - start
if not missing:
if self.ui.verbose:
- idxwidth = len(str(start+length - 1))
- for i in xrange(start, start+length):
+ idxwidth = len(str(start + length - 1))
+ for i in xrange(start, start + length):
patch = self.series[i]
if patch in applied:
stat = 'A'
@@ -1493,7 +1499,7 @@
elif line.startswith('Dirstate:'):
l = line.rstrip()
l = l[10:].split(' ')
- qpp = [ bin(x) for x in l ]
+ qpp = [bin(x) for x in l]
elif datastart != None:
l = line.rstrip()
se = statusentry(l)
@@ -1542,7 +1548,7 @@
self.ui.warn(_("status is already saved\n"))
return 1
- ar = [ ':' + x for x in self.full_series ]
+ ar = [':' + x for x in self.full_series]
if not msg:
msg = _("hg patches saved state")
else:
@@ -1694,7 +1700,8 @@
try:
if filename == '-':
if not patchname:
- raise util.Abort(_('need --name to import a patch from -'))
+ raise util.Abort(
+ _('need --name to import a patch from -'))
text = sys.stdin.read()
else:
text = url.open(self.ui, filename).read()
@@ -1912,7 +1919,8 @@
"""commit changes in the queue repository"""
q = repo.mq
r = q.qrepo()
- if not r: raise util.Abort('no queue repository')
+ if not r:
+ raise util.Abort('no queue repository')
commands.commit(r.ui, r, *pats, **opts)
def series(ui, repo, **opts):
@@ -1925,7 +1933,7 @@
q = repo.mq
t = q.applied and q.series_end(True) or 0
if t:
- return q.qseries(repo, start=t-1, length=1, status='A',
+ return q.qseries(repo, start=t - 1, length=1, status='A',
summary=opts.get('summary'))
else:
ui.write(_("no patches applied\n"))
@@ -1950,7 +1958,7 @@
if not l:
ui.write(_("no patches applied\n"))
return 1
- return q.qseries(repo, start=l-2, length=1, status='A',
+ return q.qseries(repo, start=l - 2, length=1, status='A',
summary=opts.get('summary'))
def setupheaderopts(ui, opts):
@@ -1984,7 +1992,8 @@
information.
"""
msg = cmdutil.logmessage(opts)
- def getmsg(): return ui.edit(msg, ui.username())
+ def getmsg():
+ return ui.edit(msg, ui.username())
q = repo.mq
opts['msg'] = msg
if opts.get('edit'):
@@ -2272,7 +2281,8 @@
raise util.Abort(_('%s already exists') % absdest)
if name in q.series:
- raise util.Abort(_('A patch named %s already exists in the series file') % name)
+ raise util.Abort(
+ _('A patch named %s already exists in the series file') % name)
if ui.verbose:
ui.write('renaming %s to %s\n' % (patch, name))
@@ -2464,7 +2474,7 @@
if i == 0:
q.pop(repo, all=True)
else:
- q.pop(repo, i-1)
+ q.pop(repo, i - 1)
break
if popped:
try:
@@ -2575,8 +2585,8 @@
start = lrev + 1
if start < qbase:
# update the cache (excluding the patches) and save it
- self._updatebranchcache(partial, lrev+1, qbase)
- self._writebranchcache(partial, cl.node(qbase-1), qbase-1)
+ self._updatebranchcache(partial, lrev + 1, qbase)
+ self._writebranchcache(partial, cl.node(qbase - 1), qbase - 1)
start = qbase
# if start = qbase, the cache is as updated as it should be.
# if start > qbase, the cache includes (part of) the patches.
@@ -2591,7 +2601,8 @@
repo.__class__ = mqrepo
def mqimport(orig, ui, repo, *args, **kwargs):
- if hasattr(repo, 'abort_if_wdir_patched') and not kwargs.get('no_commit', False):
+ if (hasattr(repo, 'abort_if_wdir_patched')
+ and not kwargs.get('no_commit', False)):
repo.abort_if_wdir_patched(_('cannot import over an applied patch'),
kwargs.get('force'))
return orig(ui, repo, *args, **kwargs)
@@ -2688,11 +2699,16 @@
(refresh,
[('e', 'edit', None, _('edit commit message')),
('g', 'git', None, _('use git extended diff format')),
- ('s', 'short', None, _('refresh only files already in the patch and specified files')),
- ('U', 'currentuser', None, _('add/update author field in patch with current user')),
- ('u', 'user', '', _('add/update author field in patch with given user')),
- ('D', 'currentdate', None, _('add/update date field in patch with current date')),
- ('d', 'date', '', _('add/update date field in patch with given date'))
+ ('s', 'short', None,
+ _('refresh only files already in the patch and specified files')),
+ ('U', 'currentuser', None,
+ _('add/update author field in patch with current user')),
+ ('u', 'user', '',
+ _('add/update author field in patch with given user')),
+ ('D', 'currentdate', None,
+ _('add/update date field in patch with current date')),
+ ('d', 'date', '',
+ _('add/update date field in patch with given date'))
] + commands.walkopts + commands.commitopts,
_('hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...')),
'qrename|qmv':
--- a/hgext/notify.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/notify.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''hooks for sending email notifications at commit/push time
@@ -134,7 +134,7 @@
c = path.find('/')
if c == -1:
break
- path = path[c+1:]
+ path = path[c + 1:]
count -= 1
return path
@@ -216,7 +216,7 @@
subject = '%s: %s' % (self.root, s)
maxsubject = int(self.ui.config('notify', 'maxsubject', 67))
if maxsubject and len(subject) > maxsubject:
- subject = subject[:maxsubject-3] + '...'
+ subject = subject[:maxsubject - 3] + '...'
msg['Subject'] = mail.headencode(self.ui, subject,
self.charsets, self.test)
--- a/hgext/pager.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/pager.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008 David Soria Parra <dsp@php.net>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
# To load the extension, add it to your .hgrc file:
#
--- a/hgext/parentrevspec.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/parentrevspec.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright (C) 2007 Alexis S. L. Carvalho <alexis@cecm.usp.br>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''interpret suffixes to refer to ancestor revisions
@@ -67,7 +67,7 @@
p = cl.parentrevs(rev)
if j < len(suffix) and suffix[j].isdigit():
j += 1
- n = int(suffix[i+1:j])
+ n = int(suffix[i + 1:j])
if n > 2 or n == 2 and p[1] == -1:
raise
else:
@@ -85,7 +85,7 @@
j += 1
if j == i + 1:
raise
- n = int(suffix[i+1:j])
+ n = int(suffix[i + 1:j])
for k in xrange(n):
rev = cl.parentrevs(rev)[0]
i = j
--- a/hgext/patchbomb.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/patchbomb.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to send changesets as (a series of) patch emails
@@ -35,6 +35,9 @@
cc = cc1, cc2, ...
bcc = bcc1, bcc2, ...
+Use ``[patchbomb]`` as configuration section name if you need to
+override global ``[email]`` address settings.
+
Then you can use the "hg email" command to mail a series of changesets
as a patchbomb.
@@ -80,7 +83,7 @@
if not ui.interactive():
if default is not None:
return default
- raise util.Abort(_("%s Please enter a valid value" % (prompt+rest)))
+ raise util.Abort(_("%s Please enter a valid value" % (prompt + rest)))
if default:
prompt += ' [%s]' % default
prompt += rest
--- a/hgext/rebase.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/rebase.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008 Stefano Tortarolo <stefano.tortarolo at gmail dot com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to move sets of revisions to a different ancestor
--- a/hgext/record.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/record.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007 Bryan O'Sullivan <bos@serpentine.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''commands to interactively select changes for commit/qrefresh'''
@@ -297,7 +297,8 @@
doc = gettext(record.__doc__)
c = doc.find(_('y - record this change'))
for l in doc[c:].splitlines():
- if l: ui.write(l.strip(), '\n')
+ if l:
+ ui.write(l.strip(), '\n')
continue
elif r == 0: # yes
ret = True
@@ -437,8 +438,10 @@
contenders = set()
for h in chunks:
- try: contenders.update(set(h.files()))
- except AttributeError: pass
+ try:
+ contenders.update(set(h.files()))
+ except AttributeError:
+ pass
changed = changes[0] + changes[1] + changes[2]
newfiles = [f for f in changed if f in contenders]
--- a/hgext/relink.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/relink.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright (C) 2007 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""recreates hardlinks between repository clones"""
--- a/hgext/schemes.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/schemes.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,7 +1,7 @@
# Copyright 2009, Alexander Solovyov <piranha@piranha.org.ua>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""extend schemes with shortcuts to repository swarms
@@ -64,7 +64,7 @@
parts = parts[:-1]
else:
tail = ''
- context = dict((str(i+1), v) for i, v in enumerate(parts))
+ context = dict((str(i + 1), v) for i, v in enumerate(parts))
url = ''.join(self.templater.process(self.url, context)) + tail
return hg._lookup(url).instance(ui, url, create)
--- a/hgext/share.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/share.py Thu Jan 28 23:13:45 2010 -0600
@@ -1,7 +1,7 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''share a common history between several working directories'''
--- a/hgext/transplant.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/transplant.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''command to transplant changesets from another branch
@@ -489,7 +489,7 @@
def incwalk(repo, incoming, branches, match=util.always):
if not branches:
- branches=None
+ branches = None
for node in repo.changelog.nodesbetween(incoming, branches)[0]:
if match(node):
yield node
@@ -506,7 +506,7 @@
def checkopts(opts, revs):
if opts.get('continue'):
- if filter(lambda opt: opts.get(opt), ('branch', 'all', 'merge')):
+ if opts.get('branch') or opts.get('all') or opts.get('merge'):
raise util.Abort(_('--continue is incompatible with '
'branch, all or merge'))
return
--- a/hgext/win32mbcs.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/win32mbcs.py Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
# Author: Shun-ichi Goto <shunichi.goto@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
'''allow the use of MBCS paths with problematic encodings
--- a/hgext/win32text.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/win32text.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2007-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''perform automatic newline conversion
--- a/hgext/zeroconf/Zeroconf.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/zeroconf/Zeroconf.py Thu Jan 28 23:13:45 2010 -0600
@@ -1571,3 +1571,5 @@
r.unregisterService(info)
print " Unregister done."
r.close()
+
+# no-check-code
--- a/hgext/zeroconf/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/hgext/zeroconf/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''discover and advertise repositories on the local network
--- a/hgwebdir.cgi Mon Jan 18 19:57:36 2010 +0100
+++ b/hgwebdir.cgi Thu Jan 28 23:13:45 2010 -0600
@@ -37,7 +37,7 @@
# [collections]
# /prefix/to/strip/off = /root/of/tree/full/of/repos
#
-# paths example:
+# paths example:
#
# * First two lines mount one repository into one virtual path, like
# '/real/path1' into 'virtual/path1'.
--- a/i18n/hggettext Mon Jan 18 19:57:36 2010 +0100
+++ b/i18n/hggettext Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# The normalize function is taken from pygettext which is distributed
# with Python under the Python License, which is GPL compatible.
--- a/mercurial/ancestor.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/ancestor.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import heapq
--- a/mercurial/archival.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/archival.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
from node import hex
@@ -205,7 +205,8 @@
prefix is name of path to put before every archive member.'''
def write(name, mode, islink, getdata):
- if matchfn and not matchfn(name): return
+ if matchfn and not matchfn(name):
+ return
data = getdata()
if decode:
data = repo.wwritedata(name, data)
--- a/mercurial/base85.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/base85.c Thu Jan 28 23:13:45 2010 -0600
@@ -105,18 +105,24 @@
{
c = b85dec[(int)*text++] - 1;
if (c < 0)
- return PyErr_Format(PyExc_ValueError, "Bad base85 character at position %d", i);
+ return PyErr_Format(
+ PyExc_ValueError,
+ "Bad base85 character at position %d", i);
acc = acc * 85 + c;
}
if (i++ < len)
{
c = b85dec[(int)*text++] - 1;
if (c < 0)
- return PyErr_Format(PyExc_ValueError, "Bad base85 character at position %d", i);
+ return PyErr_Format(
+ PyExc_ValueError,
+ "Bad base85 character at position %d", i);
/* overflow detection: 0xffffffff == "|NsC0",
* "|NsC" == 0x03030303 */
if (acc > 0x03030303 || (acc *= 85) > 0xffffffff - c)
- return PyErr_Format(PyExc_ValueError, "Bad base85 sequence at position %d", i);
+ return PyErr_Format(
+ PyExc_ValueError,
+ "Bad base85 sequence at position %d", i);
acc += c;
}
--- a/mercurial/bdiff.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/bdiff.c Thu Jan 28 23:13:45 2010 -0600
@@ -15,11 +15,11 @@
#include <limits.h>
#if defined __hpux || defined __SUNPRO_C || defined _AIX
-# define inline
+#define inline
#endif
#ifdef __linux
-# define inline __inline
+#define inline __inline
#endif
#ifdef _WIN32
@@ -267,19 +267,21 @@
/* normalize the hunk list, try to push each hunk towards the end */
for (curr = l.base; curr != l.head; curr++) {
- struct hunk *next = curr+1;
+ struct hunk *next = curr + 1;
int shift = 0;
if (next == l.head)
break;
if (curr->a2 == next->a1)
- while (curr->a2+shift < an && curr->b2+shift < bn
- && !cmp(a+curr->a2+shift, b+curr->b2+shift))
+ while (curr->a2 + shift < an && curr->b2 + shift < bn
+ && !cmp(a + curr->a2 + shift,
+ b + curr->b2 + shift))
shift++;
else if (curr->b2 == next->b1)
- while (curr->b2+shift < bn && curr->a2+shift < an
- && !cmp(b+curr->b2+shift, a+curr->a2+shift))
+ while (curr->b2 + shift < bn && curr->a2 + shift < an
+ && !cmp(b + curr->b2 + shift,
+ a + curr->a2 + shift))
shift++;
if (!shift)
continue;
--- a/mercurial/bundlerepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/bundlerepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""Repository class for viewing uncompressed bundles.
@@ -73,7 +73,8 @@
if rev < 0:
return False
return rev in self.basemap
- def bundlebase(self, rev): return self.basemap[rev]
+ def bundlebase(self, rev):
+ return self.basemap[rev]
def _chunk(self, rev):
# Warning: in case of bundle, the diff is against bundlebase,
# not against rev - 1
@@ -98,7 +99,8 @@
def revision(self, node):
"""return an uncompressed revision of a given"""
- if node == nullid: return ""
+ if node == nullid:
+ return ""
text = None
chain = []
--- a/mercurial/byterange.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/byterange.py Thu Jan 28 23:13:45 2010 -0600
@@ -310,7 +310,8 @@
(fb, lb) = range_tup
if lb == '':
if retrlen is None or retrlen == 0:
- raise RangeError('Requested Range Not Satisfiable due to unobtainable file length.')
+ raise RangeError('Requested Range Not Satisfiable due'
+ ' to unobtainable file length.')
lb = retrlen
retrlen = lb - fb
if retrlen < 0:
--- a/mercurial/changegroup.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/changegroup.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import util
--- a/mercurial/changelog.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/changelog.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import bin, hex, nullid
from i18n import _
@@ -78,7 +78,7 @@
doff = self.offset - self.size
self.data.insert(0, "".join(self.data))
del self.data[1:]
- s = self.data[0][doff:doff+count]
+ s = self.data[0][doff:doff + count]
self.offset += len(s)
ret += s
return ret
--- a/mercurial/cmdutil.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/cmdutil.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import hex, nullid, nullrev, short
from i18n import _
@@ -93,7 +93,8 @@
limit = int(limit)
except ValueError:
raise util.Abort(_('limit must be a positive integer'))
- if limit <= 0: raise util.Abort(_('limit must be positive'))
+ if limit <= 0:
+ raise util.Abort(_('limit must be positive'))
else:
limit = None
return limit
@@ -166,7 +167,7 @@
start = revfix(repo, start, 0)
end = revfix(repo, end, len(repo) - 1)
step = start > end and -1 or 1
- for rev in xrange(start, end+step, step):
+ for rev in xrange(start, end + step, step):
if rev in seen:
continue
seen.add(rev)
@@ -569,21 +570,21 @@
if opts['daemon'] and not opts['daemon_pipefds']:
# Signal child process startup with file removal
lockfd, lockpath = tempfile.mkstemp(prefix='hg-service-')
- os.close(lockfd)
+ os.close(lockfd)
try:
if not runargs:
runargs = util.hgcmd() + sys.argv[1:]
runargs.append('--daemon-pipefds=%s' % lockpath)
# Don't pass --cwd to the child process, because we've already
# changed directory.
- for i in xrange(1,len(runargs)):
+ for i in xrange(1, len(runargs)):
if runargs[i].startswith('--cwd='):
del runargs[i]
break
elif runargs[i].startswith('--cwd'):
- del runargs[i:i+2]
+ del runargs[i:i + 2]
break
- pid = util.spawndetached(runargs)
+ pid = util.spawndetached(runargs)
while os.path.exists(lockpath):
time.sleep(0.1)
finally:
@@ -806,10 +807,11 @@
# causes unexpected behaviours at templating level and makes
# it harder to extract it in a standalone function. Its
# behaviour cannot be changed so leave it here for now.
- def showparents(repo, ctx, templ, **args):
+ def showparents(**args):
+ ctx = args['ctx']
parents = [[('rev', p.rev()), ('node', p.hex())]
for p in self._meaningful_parentrevs(ctx)]
- return showlist(templ, 'parent', parents, **args)
+ return showlist('parent', parents, **args)
props = props.copy()
props.update(templatekw.keywords)
@@ -902,13 +904,15 @@
if not os.path.split(mapfile)[0]:
mapname = (templater.templatepath('map-cmdline.' + mapfile)
or templater.templatepath(mapfile))
- if mapname: mapfile = mapname
+ if mapname:
+ mapfile = mapname
try:
t = changeset_templater(ui, repo, patch, opts, mapfile, buffered)
except SyntaxError, inst:
raise util.Abort(inst.args[0])
- if tmpl: t.use_template(tmpl)
+ if tmpl:
+ t.use_template(tmpl)
return t
def finddate(ui, repo, date):
@@ -950,13 +954,13 @@
def increasing_windows(start, end, windowsize=8, sizelimit=512):
if start < end:
while start < end:
- yield start, min(windowsize, end-start)
+ yield start, min(windowsize, end - start)
start += windowsize
if windowsize < sizelimit:
windowsize *= 2
else:
while start > end:
- yield start, min(windowsize, start-end-1)
+ yield start, min(windowsize, start - end - 1)
start -= windowsize
if windowsize < sizelimit:
windowsize *= 2
@@ -1013,7 +1017,8 @@
# A zero count may be a directory or deleted file, so
# try to find matching entries on the slow path.
if follow:
- raise util.Abort(_('cannot follow nonexistent file: "%s"') % file_)
+ raise util.Abort(
+ _('cannot follow nonexistent file: "%s"') % file_)
slowpath = True
break
else:
@@ -1087,7 +1092,7 @@
rev = repo.changelog.rev(repo.lookup(rev))
ff = followfilter()
stop = min(revs[0], revs[-1])
- for x in xrange(rev, stop-1, -1):
+ for x in xrange(rev, stop - 1, -1):
if ff.match(x):
wanted.discard(x)
@@ -1102,7 +1107,7 @@
for i, window in increasing_windows(0, len(revs)):
change = util.cachefunc(repo.changectx)
- nrevs = [rev for rev in revs[i:i+window] if want(rev)]
+ nrevs = [rev for rev in revs[i:i + window] if want(rev)]
for rev in sorted(nrevs):
fns = fncache.get(rev)
ctx = change(rev)
--- a/mercurial/commands.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/commands.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import hex, nullid, nullrev, short
from lock import release
@@ -34,7 +34,7 @@
names = []
m = cmdutil.match(repo, pats, opts)
oldbad = m.bad
- m.bad = lambda x,y: bad.append(x) or oldbad(x,y)
+ m.bad = lambda x, y: bad.append(x) or oldbad(x, y)
for f in repo.walk(m):
exact = m.exact(f)
@@ -69,7 +69,7 @@
raise util.Abort(_('similarity must be a number'))
if sim < 0 or sim > 100:
raise util.Abort(_('similarity must be between 0 and 100'))
- return cmdutil.addremove(repo, pats, opts, similarity=sim/100.)
+ return cmdutil.addremove(repo, pats, opts, similarity=sim / 100.0)
def annotate(ui, repo, *pats, **opts):
"""show changeset information by line for each file
@@ -98,8 +98,8 @@
('follow', lambda x: x[0].path()),
]
- if (not opts.get('user') and not opts.get('changeset') and not opts.get('date')
- and not opts.get('follow')):
+ if (not opts.get('user') and not opts.get('changeset')
+ and not opts.get('date') and not opts.get('follow')):
opts['number'] = 1
linenumber = opts.get('line_number') is not None
@@ -173,7 +173,8 @@
if kind == 'files':
raise util.Abort(_('cannot archive plain files to stdout'))
dest = sys.stdout
- if not prefix: prefix = os.path.basename(repo.root) + '-%h'
+ if not prefix:
+ prefix = os.path.basename(repo.root) + '-%h'
prefix = cmdutil.make_filename(repo, prefix, node)
archival.archive(repo, dest, node, kind, not opts.get('no_decode'),
matchfn, prefix)
@@ -257,7 +258,8 @@
if op1 != node:
hg.clean(repo, op1, show_stats=False)
if opts.get('merge'):
- ui.status(_('merging with changeset %s\n') % nice(repo.changelog.tip()))
+ ui.status(_('merging with changeset %s\n')
+ % nice(repo.changelog.tip()))
hg.merge(repo, hex(repo.changelog.tip()))
else:
ui.status(_('the backout changeset is a new head - '
@@ -868,11 +870,14 @@
if showdate:
if ent[3] == -1:
# Pad or slice to locale representation
- locale_len = len(time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(0)))
+ locale_len = len(time.strftime("%Y-%m-%d %H:%M:%S ",
+ time.localtime(0)))
timestr = 'unset'
- timestr = timestr[:locale_len] + ' '*(locale_len - len(timestr))
+ timestr = (timestr[:locale_len] +
+ ' ' * (locale_len - len(timestr)))
else:
- timestr = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime(ent[3]))
+ timestr = time.strftime("%Y-%m-%d %H:%M:%S ",
+ time.localtime(ent[3]))
if ent[1] & 020000:
mode = 'lnk'
else:
@@ -884,7 +889,7 @@
def debugsub(ui, repo, rev=None):
if rev == '':
rev = None
- for k,v in sorted(repo[rev].substate.items()):
+ for k, v in sorted(repo[rev].substate.items()):
ui.write('path %s\n' % k)
ui.write(' source %s\n' % v[0])
ui.write(' revision %s\n' % v[1])
@@ -1428,7 +1433,8 @@
bheads = repo.branchheads(branch, start, closed=closed)
if not bheads:
if not opts.get('rev'):
- ui.warn(_("no open branch heads on branch %s\n") % encodedbranch)
+ ui.warn(_("no open branch heads on branch %s\n")
+ % encodedbranch)
elif branch != branchrev:
ui.warn(_("no changes on branch %s containing %s are "
"reachable from %s\n")
@@ -1640,7 +1646,8 @@
for title, options in option_lists:
opt_output.append(("\n%s" % title, None))
for shortopt, longopt, default, desc in options:
- if _("DEPRECATED") in desc and not ui.verbose: continue
+ if _("DEPRECATED") in desc and not ui.verbose:
+ continue
opt_output.append(("%2s%s" % (shortopt and "-%s" % shortopt,
longopt and " --%s" % longopt),
"%s%s" % (desc,
@@ -1851,7 +1858,8 @@
patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
files=files, eolmode=None)
finally:
- files = patch.updatedir(ui, repo, files, similarity=sim/100.)
+ files = patch.updatedir(ui, repo, files,
+ similarity=sim / 100.0)
if not opts.get('no_commit'):
m = cmdutil.matchfiles(repo, files or [])
n = repo.commit(message, opts.get('user') or user,
@@ -1976,7 +1984,7 @@
ret = 1
m = cmdutil.match(repo, pats, opts, default='relglob')
- m.bad = lambda x,y: False
+ m.bad = lambda x, y: False
for abs in repo[rev].walk(m):
if not rev and abs not in repo.dirstate:
continue
@@ -2168,7 +2176,8 @@
"""
limit = cmdutil.loglimit(opts)
dest, revs, checkout = hg.parseurl(
- ui.expandpath(dest or 'default-push', dest or 'default'), opts.get('rev'))
+ ui.expandpath(dest or 'default-push', dest or 'default'),
+ opts.get('rev'))
if revs:
revs = [repo.lookup(rev) for rev in revs]
@@ -2324,7 +2333,8 @@
URLs. If DESTINATION is omitted, a default path will be used.
"""
dest, revs, checkout = hg.parseurl(
- ui.expandpath(dest or 'default-push', dest or 'default'), opts.get('rev'))
+ ui.expandpath(dest or 'default-push', dest or 'default'),
+ opts.get('rev'))
other = hg.repository(cmdutil.remoteui(repo, opts), dest)
ui.status(_('pushing to %s\n') % url.hidepassword(dest))
if revs:
@@ -2561,7 +2571,7 @@
# walk dirstate.
m = cmdutil.match(repo, pats, opts)
- m.bad = lambda x,y: False
+ m.bad = lambda x, y: False
for abs in repo.walk(m):
names[abs] = m.rel(abs), m.exact(abs)
@@ -2634,7 +2644,8 @@
msg = msg(abs)
ui.status(msg % rel)
for table, hitlist, misslist, backuphit, backupmiss in disptable:
- if abs not in table: continue
+ if abs not in table:
+ continue
# file has changed in dirstate
if mfentry:
handle(hitlist, backuphit)
@@ -2650,7 +2661,8 @@
continue
# file has not changed in dirstate
if node == parent:
- if exact: ui.warn(_('no changes needed to %s\n') % rel)
+ if exact:
+ ui.warn(_('no changes needed to %s\n') % rel)
continue
if pmf is None:
# only need parent manifest in this unlikely case,
@@ -2782,7 +2794,8 @@
util.set_signal_handler()
self.httpd = server.create_server(baseui, repo)
- if not ui.verbose: return
+ if not ui.verbose:
+ return
if self.httpd.prefix:
prefix = self.httpd.prefix.strip('/') + '/'
@@ -2939,11 +2952,12 @@
_('%d deleted'), _('%d unknown'), _('%d ignored'),
_('%d unresolved')]
t = []
- for s,l in zip(st, labels):
+ for s, l in zip(st, labels):
if s:
t.append(l % len(s))
t = ', '.join(t)
+ cleanworkdir = False
if len(parents) > 1:
t += _(' (merge)')
@@ -2951,10 +2965,11 @@
t += _(' (new branch)')
elif (not st[0] and not st[1] and not st[2]):
t += _(' (clean)')
+ cleanworkdir = True
elif pnode not in bheads:
t += _(' (new branch head)')
- if 'clean' in t:
+ if cleanworkdir:
ui.status(_('commit: %s\n') % t.strip())
else:
ui.write(_('commit: %s\n') % t.strip())
@@ -3461,7 +3476,8 @@
[('0', 'print0', None, _('end fields with NUL')),
('', 'all', None, _('print all revisions that match')),
('f', 'follow', None,
- _('follow changeset history, or file history across copies and renames')),
+ _('follow changeset history,'
+ ' or file history across copies and renames')),
('i', 'ignore-case', None, _('ignore case when matching')),
('l', 'files-with-matches', None,
_('print only filenames and revisions that match')),
@@ -3497,7 +3513,8 @@
('b', 'base', '', _('base path')),
('f', 'force', None,
_('skip check for outstanding uncommitted changes')),
- ('', 'no-commit', None, _("don't commit, just update the working directory")),
+ ('', 'no-commit', None,
+ _("don't commit, just update the working directory")),
('', 'exact', None,
_('apply patch to the nodes from which it was generated')),
('', 'import-branch', None,
@@ -3531,7 +3548,8 @@
"^log|history":
(log,
[('f', 'follow', None,
- _('follow changeset history, or file history across copies and renames')),
+ _('follow changeset history,'
+ ' or file history across copies and renames')),
('', 'follow-first', None,
_('only follow the first parent of merge changesets')),
('d', 'date', '', _('show revisions matching date spec')),
@@ -3543,7 +3561,8 @@
('u', 'user', [], _('revisions committed by user')),
('b', 'only-branch', [],
_('show only changesets within the given named branch')),
- ('P', 'prune', [], _('do not display revision or any of its ancestors')),
+ ('P', 'prune', [],
+ _('do not display revision or any of its ancestors')),
] + logopts + walkopts,
_('[OPTION]... [FILE]')),
"manifest":
@@ -3630,8 +3649,10 @@
('', 'daemon-pipefds', '', _('used internally by daemon mode')),
('E', 'errorlog', '', _('name of error log file to write to')),
('p', 'port', 0, _('port to listen on (default: 8000)')),
- ('a', 'address', '', _('address to listen on (default: all interfaces)')),
- ('', 'prefix', '', _('prefix path to serve from (default: server root)')),
+ ('a', 'address', '',
+ _('address to listen on (default: all interfaces)')),
+ ('', 'prefix', '',
+ _('prefix path to serve from (default: server root)')),
('n', 'name', '',
_('name to show in web pages (default: working directory)')),
('', 'webdir-conf', '', _('name of the webdir config file'
--- a/mercurial/config.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/config.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import error
@@ -73,10 +73,10 @@
def parse(self, src, data, sections=None, remap=None, include=None):
sectionre = re.compile(r'\[([^\[]+)\]')
itemre = re.compile(r'([^=\s][^=]*?)\s*=\s*(.*\S|)')
- contre = re.compile(r'\s+(\S.*\S)')
+ contre = re.compile(r'\s+(\S|\S.*\S)\s*$')
emptyre = re.compile(r'(;|#|\s*$)')
unsetre = re.compile(r'%unset\s+(\S+)')
- includere = re.compile(r'%include\s+(\S.*\S)')
+ includere = re.compile(r'%include\s+(\S|\S.*\S)\s*$')
section = ""
item = None
line = 0
--- a/mercurial/context.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/context.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import nullid, nullrev, short, hex
from i18n import _
@@ -87,20 +87,33 @@
for f in sorted(self._manifest):
yield f
- def changeset(self): return self._changeset
- def manifest(self): return self._manifest
- def manifestnode(self): return self._changeset[0]
+ def changeset(self):
+ return self._changeset
+ def manifest(self):
+ return self._manifest
+ def manifestnode(self):
+ return self._changeset[0]
- def rev(self): return self._rev
- def node(self): return self._node
- def hex(self): return hex(self._node)
- def user(self): return self._changeset[1]
- def date(self): return self._changeset[2]
- def files(self): return self._changeset[3]
- def description(self): return self._changeset[4]
- def branch(self): return self._changeset[5].get("branch")
- def extra(self): return self._changeset[5]
- def tags(self): return self._repo.nodetags(self._node)
+ def rev(self):
+ return self._rev
+ def node(self):
+ return self._node
+ def hex(self):
+ return hex(self._node)
+ def user(self):
+ return self._changeset[1]
+ def date(self):
+ return self._changeset[2]
+ def files(self):
+ return self._changeset[3]
+ def description(self):
+ return self._changeset[4]
+ def branch(self):
+ return self._changeset[5].get("branch")
+ def extra(self):
+ return self._changeset[5]
+ def tags(self):
+ return self._repo.nodetags(self._node)
def parents(self):
"""return contexts for each parent changeset"""
@@ -283,10 +296,14 @@
return filectx(self._repo, self._path, fileid=fileid,
filelog=self._filelog)
- def filerev(self): return self._filerev
- def filenode(self): return self._filenode
- def flags(self): return self._changectx.flags(self._path)
- def filelog(self): return self._filelog
+ def filerev(self):
+ return self._filerev
+ def filenode(self):
+ return self._filenode
+ def flags(self):
+ return self._changectx.flags(self._path)
+ def filelog(self):
+ return self._filelog
def rev(self):
if '_changectx' in self.__dict__:
@@ -295,23 +312,38 @@
return self._changectx.rev()
return self._filelog.linkrev(self._filerev)
- def linkrev(self): return self._filelog.linkrev(self._filerev)
- def node(self): return self._changectx.node()
- def hex(self): return hex(self.node())
- def user(self): return self._changectx.user()
- def date(self): return self._changectx.date()
- def files(self): return self._changectx.files()
- def description(self): return self._changectx.description()
- def branch(self): return self._changectx.branch()
- def extra(self): return self._changectx.extra()
- def manifest(self): return self._changectx.manifest()
- def changectx(self): return self._changectx
+ def linkrev(self):
+ return self._filelog.linkrev(self._filerev)
+ def node(self):
+ return self._changectx.node()
+ def hex(self):
+ return hex(self.node())
+ def user(self):
+ return self._changectx.user()
+ def date(self):
+ return self._changectx.date()
+ def files(self):
+ return self._changectx.files()
+ def description(self):
+ return self._changectx.description()
+ def branch(self):
+ return self._changectx.branch()
+ def extra(self):
+ return self._changectx.extra()
+ def manifest(self):
+ return self._changectx.manifest()
+ def changectx(self):
+ return self._changectx
- def data(self): return self._filelog.read(self._filenode)
- def path(self): return self._path
- def size(self): return self._filelog.size(self._filerev)
+ def data(self):
+ return self._filelog.read(self._filenode)
+ def path(self):
+ return self._path
+ def size(self):
+ return self._filelog.size(self._filerev)
- def cmp(self, text): return self._filelog.cmp(self._filenode, text)
+ def cmp(self, text):
+ return self._filelog.cmp(self._filenode, text)
def renamed(self):
"""check if file was actually renamed in this changeset revision
@@ -348,7 +380,7 @@
pl[0] = (r[0], r[1], None)
return [filectx(self._repo, p, fileid=n, filelog=l)
- for p,n,l in pl if n != nullid]
+ for p, n, l in pl if n != nullid]
def children(self):
# hard for renames
@@ -493,6 +525,17 @@
return None
+ def ancestors(self):
+ seen = set(str(self))
+ visit = [self]
+ while visit:
+ for parent in visit.pop(0).parents():
+ s = str(parent)
+ if s not in seen:
+ visit.append(parent)
+ seen.add(s)
+ yield parent
+
class workingctx(changectx):
"""A workingctx object makes access to data related to
the current working directory convenient.
@@ -583,22 +626,33 @@
self._parents = [changectx(self._repo, x) for x in p]
return self._parents
- def manifest(self): return self._manifest
-
- def user(self): return self._user or self._repo.ui.username()
- def date(self): return self._date
- def description(self): return self._text
+ def manifest(self):
+ return self._manifest
+ def user(self):
+ return self._user or self._repo.ui.username()
+ def date(self):
+ return self._date
+ def description(self):
+ return self._text
def files(self):
return sorted(self._status[0] + self._status[1] + self._status[2])
- def modified(self): return self._status[0]
- def added(self): return self._status[1]
- def removed(self): return self._status[2]
- def deleted(self): return self._status[3]
- def unknown(self): return self._status[4]
- def clean(self): return self._status[5]
- def branch(self): return self._extra['branch']
- def extra(self): return self._extra
+ def modified(self):
+ return self._status[0]
+ def added(self):
+ return self._status[1]
+ def removed(self):
+ return self._status[2]
+ def deleted(self):
+ return self._status[3]
+ def unknown(self):
+ return self._status[4]
+ def clean(self):
+ return self._status[5]
+ def branch(self):
+ return self._extra['branch']
+ def extra(self):
+ return self._extra
def tags(self):
t = []
@@ -674,7 +728,8 @@
def __str__(self):
return "%s@%s" % (self.path(), self._changectx)
- def data(self): return self._repo.wread(self._path)
+ def data(self):
+ return self._repo.wread(self._path)
def renamed(self):
rp = self._repo.dirstate.copied(self._path)
if not rp:
@@ -700,21 +755,24 @@
pl.append((path, filenode(pc, path), fl))
return [filectx(self._repo, p, fileid=n, filelog=l)
- for p,n,l in pl if n != nullid]
+ for p, n, l in pl if n != nullid]
def children(self):
return []
- def size(self): return os.stat(self._repo.wjoin(self._path)).st_size
+ def size(self):
+ return os.stat(self._repo.wjoin(self._path)).st_size
def date(self):
t, tz = self._changectx.date()
try:
return (int(os.lstat(self._repo.wjoin(self._path)).st_mtime), tz)
except OSError, err:
- if err.errno != errno.ENOENT: raise
+ if err.errno != errno.ENOENT:
+ raise
return (t, tz)
- def cmp(self, text): return self._repo.wread(self._path) == text
+ def cmp(self, text):
+ return self._repo.wread(self._path) == text
class memctx(object):
"""Use memctx to perform in-memory commits via localrepo.commitctx().
@@ -776,22 +834,37 @@
def __getitem__(self, key):
return self.filectx(key)
- def p1(self): return self._parents[0]
- def p2(self): return self._parents[1]
+ def p1(self):
+ return self._parents[0]
+ def p2(self):
+ return self._parents[1]
- def user(self): return self._user or self._repo.ui.username()
- def date(self): return self._date
- def description(self): return self._text
- def files(self): return self.modified()
- def modified(self): return self._status[0]
- def added(self): return self._status[1]
- def removed(self): return self._status[2]
- def deleted(self): return self._status[3]
- def unknown(self): return self._status[4]
- def clean(self): return self._status[5]
- def branch(self): return self._extra['branch']
- def extra(self): return self._extra
- def flags(self, f): return self[f].flags()
+ def user(self):
+ return self._user or self._repo.ui.username()
+ def date(self):
+ return self._date
+ def description(self):
+ return self._text
+ def files(self):
+ return self.modified()
+ def modified(self):
+ return self._status[0]
+ def added(self):
+ return self._status[1]
+ def removed(self):
+ return self._status[2]
+ def deleted(self):
+ return self._status[3]
+ def unknown(self):
+ return self._status[4]
+ def clean(self):
+ return self._status[5]
+ def branch(self):
+ return self._extra['branch']
+ def extra(self):
+ return self._extra
+ def flags(self, f):
+ return self[f].flags()
def parents(self):
"""return contexts for each parent changeset"""
@@ -821,11 +894,19 @@
if copied:
self._copied = (copied, nullid)
- def __nonzero__(self): return True
- def __str__(self): return "%s@%s" % (self.path(), self._changectx)
- def path(self): return self._path
- def data(self): return self._data
- def flags(self): return self._flags
- def isexec(self): return 'x' in self._flags
- def islink(self): return 'l' in self._flags
- def renamed(self): return self._copied
+ def __nonzero__(self):
+ return True
+ def __str__(self):
+ return "%s@%s" % (self.path(), self._changectx)
+ def path(self):
+ return self._path
+ def data(self):
+ return self._data
+ def flags(self):
+ return self._flags
+ def isexec(self):
+ return 'x' in self._flags
+ def islink(self):
+ return 'l' in self._flags
+ def renamed(self):
+ return self._copied
--- a/mercurial/copies.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/copies.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import util
@@ -28,27 +28,6 @@
f = _dirname(f)
return d
-def _findoldnames(fctx, limit):
- "find files that path was copied from, back to linkrev limit"
- old = {}
- seen = set()
- orig = fctx.path()
- visit = [(fctx, 0)]
- while visit:
- fc, depth = visit.pop()
- s = str(fc)
- if s in seen:
- continue
- seen.add(s)
- if fc.path() != orig and fc.path() not in old:
- old[fc.path()] = (depth, fc.path()) # remember depth
- if fc.rev() is not None and fc.rev() < limit:
- continue
- visit += [(p, depth - 1) for p in fc.parents()]
-
- # return old names sorted by depth
- return [o[1] for o in sorted(old.values())]
-
def _findlimit(repo, a, b):
"""Find the earliest revision that's an ancestor of a or b but not both,
None if no such revision exists.
@@ -138,23 +117,50 @@
fullcopy = {}
diverge = {}
+ def related(f1, f2, limit):
+ g1, g2 = f1.ancestors(), f2.ancestors()
+ try:
+ while 1:
+ f1r, f2r = f1.rev(), f2.rev()
+ if f1r > f2r:
+ f1 = g1.next()
+ elif f2r > f1r:
+ f2 = g2.next()
+ elif f1 == f2:
+ return f1 # a match
+ elif f1r == f2r or f1r < limit or f2r < limit:
+ return False # copy no longer relevant
+ except StopIteration:
+ return False
+
def checkcopies(f, m1, m2):
'''check possible copies of f from m1 to m2'''
- c1 = ctx(f, m1[f])
- for of in _findoldnames(c1, limit):
+ of = None
+ seen = set([f])
+ for oc in ctx(f, m1[f]).ancestors():
+ ocr = oc.rev()
+ of = oc.path()
+ if of in seen:
+ # check limit late - grab last rename before
+ if ocr < limit:
+ break
+ continue
+ seen.add(of)
+
fullcopy[f] = of # remember for dir rename detection
- if of in m2: # original file not in other manifest?
- # if the original file is unchanged on the other branch,
- # no merge needed
- if m2[of] != ma.get(of):
- c2 = ctx(of, m2[of])
- ca = c1.ancestor(c2)
- # related and named changed on only one side?
- if ca and (ca.path() == f or ca.path() == c2.path()):
- if c1 != ca or c2 != ca: # merge needed?
- copy[f] = of
- elif of in ma:
- diverge.setdefault(of, []).append(f)
+ if of not in m2:
+ continue # no match, keep looking
+ if m2[of] == ma.get(of):
+ break # no merge needed, quit early
+ c2 = ctx(of, m2[of])
+ cr = related(oc, c2, ca.rev())
+ if cr and (cr.path() == f or cr.path == c2.path()): # non-divergent
+ copy[f] = of
+ of = None
+ break
+
+ if of in ma:
+ diverge.setdefault(of, []).append(f)
repo.ui.debug(" searching for copies back to rev %d\n" % limit)
@@ -184,8 +190,10 @@
repo.ui.debug(" all copies found (* = to merge, ! = divergent):\n")
for f in fullcopy:
note = ""
- if f in copy: note += "*"
- if f in diverge2: note += "!"
+ if f in copy:
+ note += "*"
+ if f in diverge2:
+ note += "!"
repo.ui.debug(" %s -> %s %s\n" % (f, fullcopy[f], note))
del diverge2
--- a/mercurial/demandimport.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/demandimport.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
'''
demandimport - automatic demandloading of modules
--- a/mercurial/diffhelpers.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/diffhelpers.c Thu Jan 28 23:13:45 2010 -0600
@@ -33,7 +33,7 @@
hline = PyString_FromStringAndSize(l, sz-1);
if (c == ' ' || c == '+') {
- PyObject *rline = PyString_FromStringAndSize(l+1, sz-2);
+ PyObject *rline = PyString_FromStringAndSize(l + 1, sz - 2);
PyList_SetItem(b, blen-1, rline);
}
if (c == ' ' || c == '-') {
@@ -74,13 +74,13 @@
if (!PyArg_ParseTuple(args, "OOiiOO", &fp, &hunk, &lena, &lenb, &a, &b))
return NULL;
- while(1) {
+ while (1) {
todoa = lena - PyList_Size(a);
todob = lenb - PyList_Size(b);
num = todoa > todob ? todoa : todob;
if (num == 0)
break;
- for (i = 0 ; i < num ; i++) {
+ for (i = 0; i < num; i++) {
x = PyFile_GetLine(fp, 0);
s = PyString_AS_STRING(x);
c = *s;
@@ -135,10 +135,10 @@
if (alen > blen - bstart) {
return Py_BuildValue("l", -1);
}
- for (i = 0 ; i < alen ; i++) {
+ for (i = 0; i < alen; i++) {
sa = PyString_AS_STRING(PyList_GET_ITEM(a, i));
sb = PyString_AS_STRING(PyList_GET_ITEM(b, i + bstart));
- if (strcmp(sa+1, sb) != 0)
+ if (strcmp(sa + 1, sb) != 0)
return Py_BuildValue("l", -1);
}
return Py_BuildValue("l", 0);
--- a/mercurial/dirstate.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/dirstate.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import nullid
from i18n import _
@@ -87,13 +87,14 @@
elif l > 0 and l < 40:
raise util.Abort(_('working directory state appears damaged!'))
except IOError, err:
- if err.errno != errno.ENOENT: raise
+ if err.errno != errno.ENOENT:
+ raise
return [nullid, nullid]
@propertycache
def _dirs(self):
dirs = {}
- for f,s in self._map.iteritems():
+ for f, s in self._map.iteritems():
if s[0] != 'r':
_incdirs(dirs, f)
return dirs
@@ -157,7 +158,8 @@
def getcwd(self):
cwd = os.getcwd()
- if cwd == self._root: return ''
+ if cwd == self._root:
+ return ''
# self._root ends with a path separator if self._root is '/' or 'C:\'
rootsep = self._root
if not util.endswithsep(rootsep):
@@ -215,7 +217,8 @@
try:
st = self._opener("dirstate").read()
except IOError, err:
- if err.errno != errno.ENOENT: raise
+ if err.errno != errno.ENOENT:
+ raise
return
if not st:
return
@@ -440,11 +443,16 @@
def badtype(mode):
kind = _('unknown')
- if stat.S_ISCHR(mode): kind = _('character device')
- elif stat.S_ISBLK(mode): kind = _('block device')
- elif stat.S_ISFIFO(mode): kind = _('fifo')
- elif stat.S_ISSOCK(mode): kind = _('socket')
- elif stat.S_ISDIR(mode): kind = _('directory')
+ if stat.S_ISCHR(mode):
+ kind = _('character device')
+ elif stat.S_ISBLK(mode):
+ kind = _('block device')
+ elif stat.S_ISFIFO(mode):
+ kind = _('fifo')
+ elif stat.S_ISSOCK(mode):
+ kind = _('socket')
+ elif stat.S_ISDIR(mode):
+ kind = _('directory')
return _('unsupported file type (type is %s)') % kind
ignore = self._ignore
--- a/mercurial/dispatch.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/dispatch.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import os, sys, atexit, signal, pdb, socket, errno, shlex, time
@@ -35,7 +35,8 @@
for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
num = getattr(signal, name, None)
- if num: signal.signal(num, catchterm)
+ if num:
+ signal.signal(num, catchterm)
try:
try:
--- a/mercurial/encoding.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/encoding.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import error
import sys, unicodedata, locale, os
@@ -62,7 +62,7 @@
try:
return s.decode(encoding, encodingmode).encode("utf-8")
except UnicodeDecodeError, inst:
- sub = s[max(0, inst.start-10):inst.start+10]
+ sub = s[max(0, inst.start - 10):inst.start + 10]
raise error.Abort("decoding near '%s': %s!" % (sub, inst))
except LookupError, k:
raise error.Abort("%s, please check your locale settings" % k)
--- a/mercurial/error.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/error.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""Mercurial exceptions.
--- a/mercurial/extensions.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/extensions.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import imp, os
import util, cmdutil, help
--- a/mercurial/fancyopts.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/fancyopts.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import getopt
@@ -16,7 +16,7 @@
extraargs = []
if '--' in args:
stopindex = args.index('--')
- extraargs = args[stopindex+1:]
+ extraargs = args[stopindex + 1:]
args = args[:stopindex]
opts, parseargs = getopt.getopt(args, options, longoptions)
args = []
@@ -77,8 +77,10 @@
# does it take a parameter?
if not (default is None or default is True or default is False):
- if short: short += ':'
- if oname: oname += '='
+ if short:
+ short += ':'
+ if oname:
+ oname += '='
if short:
shortlist += short
if name:
--- a/mercurial/filelog.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/filelog.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import revlog
@@ -17,7 +17,7 @@
if not t.startswith('\1\n'):
return t
s = t.index('\1\n', 2)
- return t[s+2:]
+ return t[s + 2:]
def _readmeta(self, node):
t = self.revision(node)
--- a/mercurial/filemerge.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/filemerge.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007, 2008 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import short
from i18n import _
@@ -65,19 +65,19 @@
# then merge tools
tools = {}
- for k,v in ui.configitems("merge-tools"):
+ for k, v in ui.configitems("merge-tools"):
t = k.split('.')[0]
if t not in tools:
tools[t] = int(_toolstr(ui, t, "priority", "0"))
names = tools.keys()
- tools = sorted([(-p,t) for t,p in tools.items()])
+ tools = sorted([(-p, t) for t, p in tools.items()])
uimerge = ui.config("ui", "merge")
if uimerge:
if uimerge not in names:
return (uimerge, uimerge)
tools.insert(0, (None, uimerge)) # highest priority
tools.append((None, "hgmerge")) # the old default, if found
- for p,t in tools:
+ for p, t in tools:
if check(t, None, symlink, binary):
toolpath = _findtool(ui, t)
return (t, '"' + toolpath + '"')
--- a/mercurial/graphmod.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/graphmod.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007 Joel Rosdahl <joel@rosdahl.net>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""supports walking the history as DAGs suitable for graphical output
--- a/mercurial/hbisect.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hbisect.py Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
# Inspired by git bisect, extension skeleton taken from mq.py.
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os
from i18n import _
--- a/mercurial/help.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/help.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import gettext, _
import sys, os
@@ -13,17 +13,19 @@
def moduledoc(file):
'''return the top-level python documentation for the given file
- Loosely inspired by pydoc.source_synopsis(), but rewritten to handle \'''
- as well as """ and to return the whole text instead of just the synopsis'''
+ Loosely inspired by pydoc.source_synopsis(), but rewritten to
+ handle triple quotes and to return the whole text instead of just
+ the synopsis'''
result = []
line = file.readline()
while line[:1] == '#' or not line.strip():
line = file.readline()
- if not line: break
+ if not line:
+ break
start = line[:3]
- if start == '"""' or start == "'''":
+ if start == '\"\"\"' or start == "\'\'\'":
line = line[3:]
while line:
if line.rstrip().endswith(start):
@@ -83,11 +85,15 @@
(["config"], _("Configuration Files"), loaddoc('config')),
(["dates"], _("Date Formats"), loaddoc('dates')),
(["patterns"], _("File Name Patterns"), loaddoc('patterns')),
- (['environment', 'env'], _('Environment Variables'), loaddoc('environment')),
- (['revs', 'revisions'], _('Specifying Single Revisions'), loaddoc('revisions')),
- (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'), loaddoc('multirevs')),
+ (['environment', 'env'], _('Environment Variables'),
+ loaddoc('environment')),
+ (['revs', 'revisions'], _('Specifying Single Revisions'),
+ loaddoc('revisions')),
+ (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'),
+ loaddoc('multirevs')),
(['diffs'], _('Diff Formats'), loaddoc('diffs')),
- (['templating', 'templates'], _('Template Usage'), loaddoc('templates')),
+ (['templating', 'templates'], _('Template Usage'),
+ loaddoc('templates')),
(['urls'], _('URL Paths'), loaddoc('urls')),
(["extensions"], _("Using additional features"), extshelp),
)
--- a/mercurial/hg.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hg.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
from lock import release
@@ -348,7 +348,8 @@
def clean(repo, node, show_stats=True):
"""forcibly switch the working directory to node, clobbering changes"""
stats = _merge.update(repo, node, False, True, None)
- if show_stats: _showstats(repo, stats)
+ if show_stats:
+ _showstats(repo, stats)
return stats[3] > 0
def merge(repo, node, force=None, remind=True):
--- a/mercurial/hgweb/__init__.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/__init__.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import hgweb_mod, hgwebdir_mod
--- a/mercurial/hgweb/common.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/common.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import errno, mimetypes, os
--- a/mercurial/hgweb/hgweb_mod.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/hgweb_mod.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os
from mercurial import ui, hg, hook, error, encoding, templater
@@ -136,7 +136,7 @@
style = cmd.rfind('-')
if style != -1:
req.form['style'] = [cmd[:style]]
- cmd = cmd[style+1:]
+ cmd = cmd[style + 1:]
# avoid accepting e.g. style parameter as command
if hasattr(webcommands, cmd):
--- a/mercurial/hgweb/hgwebdir_mod.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, re, time
from mercurial.i18n import _
@@ -324,7 +324,7 @@
style, mapfile = templater.stylemap(styles)
if style == styles[0]:
vars['style'] = style
-
+
start = url[-1] == '?' and '&' or '?'
sessionvars = webutil.sessionvars(vars, start)
staticurl = config('web', 'staticurl') or url + 'static/'
--- a/mercurial/hgweb/protocol.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/protocol.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import cStringIO, zlib, tempfile, errno, os, sys, urllib, copy
from mercurial import util, streamclone
--- a/mercurial/hgweb/request.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/request.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import socket, cgi, errno
from mercurial import util
@@ -25,7 +25,8 @@
'static': [('cmd', ['static']), ('file', None)]
}
-def expand(form):
+def normalize(form):
+ # first expand the shortcuts
for k in shortcuts.iterkeys():
if k in form:
for name, value in shortcuts[k]:
@@ -33,6 +34,9 @@
value = form[k]
form[name] = value
del form[k]
+ # And strip the values
+ for k, v in form.iteritems():
+ form[k] = [i.strip() for i in v]
return form
class wsgirequest(object):
@@ -47,7 +51,9 @@
self.multiprocess = wsgienv['wsgi.multiprocess']
self.run_once = wsgienv['wsgi.run_once']
self.env = wsgienv
- self.form = expand(cgi.parse(self.inp, self.env, keep_blank_values=1))
+ self.form = normalize(cgi.parse(self.inp,
+ self.env,
+ keep_blank_values=1))
self._start_response = start_response
self.server_write = None
self.headers = []
--- a/mercurial/hgweb/server.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/server.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback
from mercurial import hg, util, error
--- a/mercurial/hgweb/webcommands.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/webcommands.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, mimetypes, re, cgi, copy
import webutil
@@ -228,7 +228,7 @@
start = max(0, pos - revcount + 1)
end = min(count, start + revcount)
pos = end - 1
- parity = paritygen(web.stripecount, offset=start-end)
+ parity = paritygen(web.stripecount, offset=start - end)
changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx)
@@ -334,7 +334,7 @@
emptydirs = []
h = dirs[d]
while isinstance(h, dict) and len(h) == 1:
- k,v = h.items()[0]
+ k, v = h.items()[0]
if v:
emptydirs.append(k)
h = v
@@ -378,9 +378,9 @@
return tmpl("tags",
node=hex(web.repo.changelog.tip()),
- entries=lambda **x: entries(False,0, **x),
- entriesnotip=lambda **x: entries(True,0, **x),
- latestentry=lambda **x: entries(True,1, **x))
+ entries=lambda **x: entries(False, 0, **x),
+ entriesnotip=lambda **x: entries(True, 0, **x),
+ latestentry=lambda **x: entries(True, 1, **x))
def branches(web, req, tmpl):
b = web.repo.branchtags()
@@ -437,14 +437,14 @@
b = web.repo.branchtags()
l = [(-web.repo.changelog.rev(n), n, t) for t, n in b.iteritems()]
- for r,n,t in sorted(l):
+ for r, n, t in sorted(l):
yield {'parity': parity.next(),
'branch': t,
'node': hex(n),
'date': web.repo[n].date()}
def changelist(**map):
- parity = paritygen(web.stripecount, offset=start-end)
+ parity = paritygen(web.stripecount, offset=start - end)
l = [] # build a list in forward order for efficiency
for i in xrange(start, end):
ctx = web.repo[i]
@@ -600,7 +600,7 @@
count = fctx.filerev() + 1
start = max(0, fctx.filerev() - revcount + 1) # first rev on this page
end = min(count, start + revcount) # last rev on this page
- parity = paritygen(web.stripecount, offset=start-end)
+ parity = paritygen(web.stripecount, offset=start - end)
def entries(limit=0, **map):
l = []
--- a/mercurial/hgweb/webutil.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/webutil.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os, copy
from mercurial import match, patch, util, error
@@ -59,7 +59,7 @@
yield {"label": label, "node": node}
return f
- return (dict(before=gen(navbefore), after=gen(navafter)), )
+ return (dict(before=gen(navbefore), after=gen(navafter)),)
def _siblings(siblings=[], hiderev=None):
siblings = [s for s in siblings if s.node() != nullid]
--- a/mercurial/hgweb/wsgicgi.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hgweb/wsgicgi.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Eric Hopper <hopper@omnifarious.org>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
#
# This was originally copied from the public domain code at
# http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
--- a/mercurial/hook.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/hook.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import os, sys
--- a/mercurial/httprepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/httprepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import bin, hex, nullid
from i18n import _
@@ -107,9 +107,10 @@
proto.startswith('text/plain') or
proto.startswith('application/hg-changegroup')):
self.ui.debug("requested URL: '%s'\n" % url.hidepassword(cu))
- raise error.RepoError(_("'%s' does not appear to be an hg repository:\n"
- "---%%<--- (%s)\n%s\n---%%<---\n")
- % (safeurl, proto, resp.read()))
+ raise error.RepoError(
+ _("'%s' does not appear to be an hg repository:\n"
+ "---%%<--- (%s)\n%s\n---%%<---\n")
+ % (safeurl, proto, resp.read()))
if proto.startswith('application/mercurial-'):
try:
@@ -171,7 +172,7 @@
n = " ".join(map(hex, nodes))
d = self.do_read("branches", nodes=n)
try:
- br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ]
+ br = [tuple(map(bin, b.split(" "))) for b in d.splitlines()]
return br
except:
raise error.ResponseError(_("unexpected response:"), d)
@@ -183,7 +184,8 @@
n = " ".join(["-".join(map(hex, p)) for p in pairs[i:i + batch]])
d = self.do_read("between", pairs=n)
try:
- r += [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ]
+ r += [l and map(bin, l.split(" ")) or []
+ for l in d.splitlines()]
except:
raise error.ResponseError(_("unexpected response:"), d)
return r
--- a/mercurial/i18n.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/i18n.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import encoding
import gettext, sys, os
--- a/mercurial/ignore.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/ignore.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import util, match
--- a/mercurial/keepalive.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/keepalive.py Thu Jan 28 23:13:45 2010 -0600
@@ -120,7 +120,8 @@
DEBUG = None
import sys
-if sys.version_info < (2, 4): HANDLE_ERRORS = 1
+if sys.version_info < (2, 4):
+ HANDLE_ERRORS = 1
else: HANDLE_ERRORS = 0
class ConnectionManager:
@@ -137,7 +138,8 @@
def add(self, host, connection, ready):
self._lock.acquire()
try:
- if not host in self._hostmap: self._hostmap[host] = []
+ if not host in self._hostmap:
+ self._hostmap[host] = []
self._hostmap[host].append(connection)
self._connmap[connection] = host
self._readymap[connection] = ready
@@ -160,8 +162,10 @@
self._lock.release()
def set_ready(self, connection, ready):
- try: self._readymap[connection] = ready
- except KeyError: pass
+ try:
+ self._readymap[connection] = ready
+ except KeyError:
+ pass
def get_ready_conn(self, host):
conn = None
@@ -214,7 +218,8 @@
self._cm.set_ready(connection, 1)
def _remove_connection(self, host, connection, close=0):
- if close: connection.close()
+ if close:
+ connection.close()
self._cm.remove(connection)
#### Transaction Execution
@@ -233,7 +238,8 @@
# if this response is non-None, then it worked and we're
# done. Break out, skipping the else block.
- if r: break
+ if r:
+ break
# connection is bad - possibly closed by server
# discard it and ask for the next free connection
@@ -243,8 +249,9 @@
else:
# no (working) free connections were found. Create a new one.
h = http_class(host)
- if DEBUG: DEBUG.info("creating new connection to %s (%d)",
- host, id(h))
+ if DEBUG:
+ DEBUG.info("creating new connection to %s (%d)",
+ host, id(h))
self._cm.add(host, h, 0)
self._start_transaction(h, req)
r = h.getresponse()
@@ -252,9 +259,11 @@
raise urllib2.URLError(err)
# if not a persistent connection, don't try to reuse it
- if r.will_close: self._cm.remove(h)
+ if r.will_close:
+ self._cm.remove(h)
- if DEBUG: DEBUG.info("STATUS: %s, %s", r.status, r.reason)
+ if DEBUG:
+ DEBUG.info("STATUS: %s, %s", r.status, r.reason)
r._handler = self
r._host = host
r._url = req.get_full_url()
@@ -293,8 +302,9 @@
# same exception was raised, etc. The tradeoff is
# that it's now possible this call will raise
# a DIFFERENT exception
- if DEBUG: DEBUG.error("unexpected exception - closing " + \
- "connection to %s (%d)", host, id(h))
+ if DEBUG:
+ DEBUG.error("unexpected exception - closing "
+ "connection to %s (%d)", host, id(h))
self._cm.remove(h)
h.close()
raise
@@ -304,11 +314,13 @@
# bad header back. This is most likely to happen if
# the socket has been closed by the server since we
# last used the connection.
- if DEBUG: DEBUG.info("failed to re-use connection to %s (%d)",
- host, id(h))
+ if DEBUG:
+ DEBUG.info("failed to re-use connection to %s (%d)",
+ host, id(h))
r = None
else:
- if DEBUG: DEBUG.info("re-using connection to %s (%d)", host, id(h))
+ if DEBUG:
+ DEBUG.info("re-using connection to %s (%d)", host, id(h))
return r
@@ -319,7 +331,7 @@
if sys.version_info >= (2, 4):
headers.update(req.unredirected_hdrs)
headers.update(self.parent.addheaders)
- headers = dict((n.lower(), v) for n,v in headers.items())
+ headers = dict((n.lower(), v) for n, v in headers.items())
skipheaders = {}
for n in ('host', 'accept-encoding'):
if n in headers:
@@ -477,13 +489,18 @@
i = self._rbuf.find('\n')
while i < 0 and not (0 < limit <= len(self._rbuf)):
new = self._raw_read(self._rbufsize)
- if not new: break
+ if not new:
+ break
i = new.find('\n')
- if i >= 0: i = i + len(self._rbuf)
+ if i >= 0:
+ i = i + len(self._rbuf)
self._rbuf = self._rbuf + new
- if i < 0: i = len(self._rbuf)
- else: i = i+1
- if 0 <= limit < len(self._rbuf): i = limit
+ if i < 0:
+ i = len(self._rbuf)
+ else:
+ i = i + 1
+ if 0 <= limit < len(self._rbuf):
+ i = limit
data, self._rbuf = self._rbuf[:i], self._rbuf[i:]
return data
@@ -492,7 +509,8 @@
list = []
while 1:
line = self.readline()
- if not line: break
+ if not line:
+ break
list.append(line)
total += len(line)
if sizehint and total >= sizehint:
@@ -528,9 +546,10 @@
if self.debuglevel > 0:
print "send:", repr(str)
try:
- blocksize=8192
+ blocksize = 8192
if hasattr(str,'read') :
- if self.debuglevel > 0: print "sendIng a read()able"
+ if self.debuglevel > 0:
+ print "sendIng a read()able"
data=str.read(blocksize)
while data:
self.sock.sendall(data)
@@ -588,8 +607,10 @@
fo = urllib2.urlopen(url)
fo.read()
fo.close()
- try: status, reason = fo.status, fo.reason
- except AttributeError: status, reason = None, None
+ try:
+ status, reason = fo.status, fo.reason
+ except AttributeError:
+ status, reason = None, None
except IOError, e:
print " EXCEPTION: %s" % e
raise
@@ -635,7 +656,8 @@
foo = ''
while 1:
f = fo.readline()
- if f: foo = foo + f
+ if f:
+ foo = foo + f
else: break
fo.close()
m = md5.new(foo)
@@ -657,14 +679,15 @@
urllib2.install_opener(opener)
t2 = fetch(N, url)
print ' TIME: %.3f s' % t2
- print ' improvement factor: %.2f' % (t1/t2, )
+ print ' improvement factor: %.2f' % (t1 / t2)
def fetch(N, url, delay=0):
import time
lens = []
starttime = time.time()
for i in range(N):
- if delay and i > 0: time.sleep(delay)
+ if delay and i > 0:
+ time.sleep(delay)
fo = urllib2.urlopen(url)
foo = fo.read()
fo.close()
@@ -683,7 +706,8 @@
global DEBUG
dbbackup = DEBUG
class FakeLogger:
- def debug(self, msg, *args): print msg % args
+ def debug(self, msg, *args):
+ print msg % args
info = warning = error = debug
DEBUG = FakeLogger()
print " fetching the file to establish a connection"
--- a/mercurial/localrepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/localrepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import bin, hex, nullid, nullrev, short
from i18n import _
@@ -319,7 +319,7 @@
# TODO: rename this function?
tiprev = len(self) - 1
if lrev != tiprev:
- self._updatebranchcache(partial, lrev+1, tiprev+1)
+ self._updatebranchcache(partial, lrev + 1, tiprev + 1)
self._writebranchcache(partial, self.changelog.tip(), tiprev)
return partial
@@ -377,7 +377,8 @@
# invalidate the cache
raise ValueError('invalidating branch cache (tip differs)')
for l in lines:
- if not l: continue
+ if not l:
+ continue
node, label = l.split(" ", 1)
partial.setdefault(label.strip(), []).append(bin(node))
except KeyboardInterrupt:
@@ -562,7 +563,8 @@
# abort here if the journal already exists
if os.path.exists(self.sjoin("journal")):
- raise error.RepoError(_("abandoned transaction found - run hg recover"))
+ raise error.RepoError(
+ _("abandoned transaction found - run hg recover"))
# save dirstate for rollback
try:
@@ -587,7 +589,8 @@
try:
if os.path.exists(self.sjoin("journal")):
self.ui.status(_("rolling back interrupted transaction\n"))
- transaction.rollback(self.sopener, self.sjoin("journal"), self.ui.warn)
+ transaction.rollback(self.sopener, self.sjoin("journal"),
+ self.ui.warn)
self.invalidate()
return True
else:
@@ -603,7 +606,8 @@
lock = self.lock()
if os.path.exists(self.sjoin("undo")):
self.ui.status(_("rolling back last transaction\n"))
- transaction.rollback(self.sopener, self.sjoin("undo"), self.ui.warn)
+ transaction.rollback(self.sopener, self.sjoin("undo"),
+ self.ui.warn)
util.rename(self.join("undo.dirstate"), self.join("dirstate"))
try:
branch = self.opener("undo.branch").read()
@@ -1339,7 +1343,7 @@
self.ui.debug("request %d: %s\n" %
(reqcnt, " ".join(map(short, r))))
for p in xrange(0, len(r), 10):
- for b in remote.branches(r[p:p+10]):
+ for b in remote.branches(r[p:p + 10]):
self.ui.debug("received %s:%s\n" %
(short(b[0]), short(b[1])))
unknown.append(b)
@@ -1609,7 +1613,8 @@
ret = self.prepush(remote, force, revs)
if ret[0] is not None:
cg, remote_heads = ret
- if force: remote_heads = ['force']
+ if force:
+ remote_heads = ['force']
return remote.unbundle(cg, remote_heads, 'push')
return ret[1]
--- a/mercurial/lock.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/lock.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import util, error
import errno, os, socket, time
--- a/mercurial/mail.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/mail.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import util, encoding
--- a/mercurial/manifest.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/manifest.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import mdiff, parsers, error, revlog
@@ -11,8 +11,10 @@
class manifestdict(dict):
def __init__(self, mapping=None, flags=None):
- if mapping is None: mapping = {}
- if flags is None: flags = {}
+ if mapping is None:
+ mapping = {}
+ if flags is None:
+ flags = {}
dict.__init__(self, mapping)
self._flags = flags
def flags(self, f):
@@ -70,7 +72,7 @@
while lo < hi:
mid = (lo + hi) // 2
start = mid
- while start > 0 and m[start-1] != '\n':
+ while start > 0 and m[start - 1] != '\n':
start -= 1
end = advance(start, '\0')
if m[start:end] < s:
@@ -85,7 +87,7 @@
if cmp(s, found) == 0:
# we know that after the null there are 40 bytes of sha1
end = advance(end + 40, '\n')
- return (lo, end+1)
+ return (lo, end + 1)
else:
return (lo, lo)
--- a/mercurial/match.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/match.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008, 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import re
import util
@@ -125,10 +125,11 @@
res = ''
group = 0
escape = re.escape
- def peek(): return i < n and pat[i]
+ def peek():
+ return i < n and pat[i]
while i < n:
c = pat[i]
- i = i+1
+ i += 1
if c not in '*?[{},\\':
res += escape(c)
elif c == '*':
--- a/mercurial/mdiff.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/mdiff.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import bdiff, mpatch, util
@@ -96,7 +96,8 @@
return '\t\n'
return '\n'
- if not a and not b: return ""
+ if not a and not b:
+ return ""
epoch = util.datestr((0, 0))
if not opts.text and (util.binary(a) or util.binary(b)):
@@ -125,7 +126,8 @@
al = splitnewlines(a)
bl = splitnewlines(b)
l = list(bunidiff(a, b, al, bl, "a/" + fn1, "b/" + fn2, opts=opts))
- if not l: return ""
+ if not l:
+ return ""
# difflib uses a space, rather than a tab
l[0] = "%s%s" % (l[0][:-2], datetag(ad))
l[1] = "%s%s" % (l[1][:-2], datetag(bd))
@@ -182,7 +184,7 @@
for x in xrange(a2, aend):
yield ' ' + l1[x]
- header = [ "--- %s\t\n" % header1, "+++ %s\t\n" % header2 ]
+ header = ["--- %s\t\n" % header1, "+++ %s\t\n" % header2]
if opts.showfunc:
funcre = re.compile('\w')
@@ -203,7 +205,7 @@
# in the file. If it starts later, old and new below will both be
# empty and we'll continue to the next match.
if i > 0:
- s = diff[i-1]
+ s = diff[i - 1]
else:
s = [0, 0, 0, 0]
delta = []
@@ -246,11 +248,11 @@
delta = hunk[4]
else:
# create a new hunk
- hunk = [ astart, a2, bstart, b2, delta ]
+ hunk = [astart, a2, bstart, b2, delta]
- delta[len(delta):] = [ ' ' + x for x in l1[astart:a1] ]
- delta[len(delta):] = [ '-' + x for x in old ]
- delta[len(delta):] = [ '+' + x for x in new ]
+ delta[len(delta):] = [' ' + x for x in l1[astart:a1]]
+ delta[len(delta):] = ['-' + x for x in old]
+ delta[len(delta):] = ['+' + x for x in new]
if hunk:
for x in yieldhunk(hunk, header):
--- a/mercurial/merge.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/merge.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import nullid, nullrev, hex, bin
from i18n import _
@@ -135,8 +135,10 @@
_(" conflicting flags for %s\n"
"(n)one, e(x)ec or sym(l)ink?") % f,
(_("&None"), _("E&xec"), _("Sym&link")), 0)
- if r == 1: return "x" # Exec
- if r == 2: return "l" # Symlink
+ if r == 1:
+ return "x" # Exec
+ if r == 2:
+ return "l" # Symlink
return ""
if m and m != a: # changed from a to m
return m
--- a/mercurial/minirst.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/minirst.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""simplified reStructuredText parser.
@@ -78,9 +78,9 @@
# | indented literal block |
# +---------------------------+
blocks[i]['type'] = 'paragraph'
- if blocks[i]['lines'][-1].endswith('::') and i+1 < len(blocks):
+ if blocks[i]['lines'][-1].endswith('::') and i + 1 < len(blocks):
indent = blocks[i]['indent']
- adjustment = blocks[i+1]['indent'] - indent
+ adjustment = blocks[i + 1]['indent'] - indent
if blocks[i]['lines'] == ['::']:
# Expanded form: remove block
@@ -104,9 +104,9 @@
adjustment -= m.end()
# Mark the following indented blocks.
- while i+1 < len(blocks) and blocks[i+1]['indent'] > indent:
- blocks[i+1]['type'] = 'literal'
- blocks[i+1]['indent'] -= adjustment
+ while i + 1 < len(blocks) and blocks[i + 1]['indent'] > indent:
+ blocks[i + 1]['type'] = 'literal'
+ blocks[i + 1]['indent'] -= adjustment
i += 1
i += 1
return blocks
@@ -133,7 +133,7 @@
item (but only if singleline is True).
"""
line1 = lines[i]
- line2 = i+1 < len(lines) and lines[i+1] or ''
+ line2 = i + 1 < len(lines) and lines[i + 1] or ''
if not itemre.match(line1):
return False
if singleline:
@@ -153,7 +153,7 @@
items.append(dict(type=type, lines=[],
indent=blocks[i]['indent']))
items[-1]['lines'].append(line)
- blocks[i:i+1] = items
+ blocks[i:i + 1] = items
break
i += 1
return blocks
@@ -221,7 +221,7 @@
"""
i = 1
while i < len(blocks):
- if (blocks[i]['type'] == blocks[i-1]['type'] and
+ if (blocks[i]['type'] == blocks[i - 1]['type'] and
blocks[i]['type'] in ('bullet', 'option', 'field', 'definition')):
i += 1
else:
--- a/mercurial/mpatch.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/mpatch.c Thu Jan 28 23:13:45 2010 -0600
@@ -35,13 +35,13 @@
#endif
#ifdef _WIN32
-# ifdef _MSC_VER
+#ifdef _MSC_VER
/* msvc 6.0 has problems */
-# define inline __inline
+#define inline __inline
typedef unsigned long uint32_t;
-# else
-# include <stdint.h>
-# endif
+#else
+#include <stdint.h>
+#endif
static uint32_t ntohl(uint32_t x)
{
return ((x & 0x000000ffUL) << 24) |
@@ -51,13 +51,13 @@
}
#else
/* not windows */
-# include <sys/types.h>
-# if defined __BEOS__ && !defined __HAIKU__
-# include <ByteOrder.h>
-# else
-# include <arpa/inet.h>
-# endif
-# include <inttypes.h>
+#include <sys/types.h>
+#if defined __BEOS__ && !defined __HAIKU__
+#include <ByteOrder.h>
+#else
+#include <arpa/inet.h>
+#endif
+#include <inttypes.h>
#endif
static char mpatch_doc[] = "Efficient binary patching.";
--- a/mercurial/node.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/node.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import binascii
--- a/mercurial/osutil.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/osutil.c Thu Jan 28 23:13:45 2010 -0600
@@ -14,13 +14,13 @@
#include <string.h>
#ifdef _WIN32
-# include <windows.h>
-# include <io.h>
+#include <windows.h>
+#include <io.h>
#else
-# include <dirent.h>
-# include <sys/stat.h>
-# include <sys/types.h>
-# include <unistd.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#endif
/* some platforms lack the PATH_MAX definition (eg. GNU/Hurd) */
@@ -174,7 +174,7 @@
stp->st_mtime = to_python_time(&fd->ftLastWriteTime);
stp->st_ctime = to_python_time(&fd->ftCreationTime);
if (kind == _S_IFREG)
- stp->st_size = ((__int64)fd->nFileSizeHigh << 32)
+ stp->st_size = ((__int64)fd->nFileSizeHigh << 32)
+ fd->nFileSizeLow;
return Py_BuildValue("siN", fd->cFileName,
kind, py_st);
@@ -189,7 +189,7 @@
char *pattern;
/* build the path + \* pattern string */
- pattern = malloc(plen+3); /* path + \* + \0 */
+ pattern = malloc(plen + 3); /* path + \* + \0 */
if (!pattern) {
PyErr_NoMemory();
goto error_nomem;
@@ -485,7 +485,7 @@
goto bail;
}
- fd = _open_osfhandle((intptr_t) handle, flags);
+ fd = _open_osfhandle((intptr_t)handle, flags);
if (fd == -1) {
CloseHandle(handle);
PyErr_SetFromErrnoWithFilename(PyExc_IOError, name);
--- a/mercurial/parsers.c Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/parsers.c Thu Jan 28 23:13:45 2010 -0600
@@ -131,14 +131,14 @@
}
#ifdef _WIN32
-# ifdef _MSC_VER
+#ifdef _MSC_VER
/* msvc 6.0 has problems */
-# define inline __inline
+#define inline __inline
typedef unsigned long uint32_t;
typedef unsigned __int64 uint64_t;
-# else
-# include <stdint.h>
-# endif
+#else
+#include <stdint.h>
+#endif
static uint32_t ntohl(uint32_t x)
{
return ((x & 0x000000ffUL) << 24) |
@@ -148,13 +148,13 @@
}
#else
/* not windows */
-# include <sys/types.h>
-# if defined __BEOS__ && !defined __HAIKU__
-# include <ByteOrder.h>
-# else
-# include <arpa/inet.h>
-# endif
-# include <inttypes.h>
+#include <sys/types.h>
+#if defined __BEOS__ && !defined __HAIKU__
+#include <ByteOrder.h>
+#else
+#include <arpa/inet.h>
+#endif
+#include <inttypes.h>
#endif
static PyObject *parse_dirstate(PyObject *self, PyObject *args)
@@ -303,16 +303,16 @@
if (n == 0) /* mask out version number for the first entry */
offset_flags &= 0xFFFF;
else {
- uint32_t offset_high = ntohl(*((uint32_t *) decode));
- offset_flags |= ((uint64_t) offset_high) << 32;
+ uint32_t offset_high = ntohl(*((uint32_t *)decode));
+ offset_flags |= ((uint64_t)offset_high) << 32;
}
- comp_len = ntohl(*((uint32_t *) (decode + 8)));
- uncomp_len = ntohl(*((uint32_t *) (decode + 12)));
- base_rev = ntohl(*((uint32_t *) (decode + 16)));
- link_rev = ntohl(*((uint32_t *) (decode + 20)));
- parent_1 = ntohl(*((uint32_t *) (decode + 24)));
- parent_2 = ntohl(*((uint32_t *) (decode + 28)));
+ comp_len = ntohl(*((uint32_t *)(decode + 8)));
+ uncomp_len = ntohl(*((uint32_t *)(decode + 12)));
+ base_rev = ntohl(*((uint32_t *)(decode + 16)));
+ link_rev = ntohl(*((uint32_t *)(decode + 20)));
+ parent_1 = ntohl(*((uint32_t *)(decode + 24)));
+ parent_2 = ntohl(*((uint32_t *)(decode + 28)));
c_node_id = decode + 32;
entry = _build_idx_entry(nodemap, n, offset_flags,
--- a/mercurial/patch.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/patch.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007 Chris Mason <chris.mason@oracle.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
from node import hex, nullid, short
@@ -78,7 +78,7 @@
if subject.startswith('[PATCH'):
pend = subject.find(']')
if pend >= 0:
- subject = subject[pend+1:].lstrip()
+ subject = subject[pend + 1:].lstrip()
subject = subject.replace('\n\t', ' ')
ui.debug('Subject: %s\n' % subject)
if user:
@@ -472,7 +472,7 @@
search_start = orig_start + self.skew
for fuzzlen in xrange(3):
- for toponly in [ True, False ]:
+ for toponly in [True, False]:
old = h.old(fuzzlen, toponly)
cand = self.findlines(old[0][1:], search_start)
@@ -497,7 +497,7 @@
else:
msg = _("Hunk #%d succeeded at %d %s"
"(offset %d lines).\n")
- f(msg % (h.number, l+1, fuzzstr, offset))
+ f(msg % (h.number, l + 1, fuzzstr, offset))
return fuzzlen
self.printfile(True)
self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start))
@@ -508,7 +508,7 @@
def __init__(self, desc, num, lr, context, create=False, remove=False):
self.number = num
self.desc = desc
- self.hunk = [ desc ]
+ self.hunk = [desc]
self.a = []
self.b = []
self.starta = self.lena = None
@@ -621,7 +621,7 @@
if l.startswith('\ '):
s = self.b[-1][:-1]
self.b[-1] = s
- self.hunk[hunki-1] = s
+ self.hunk[hunki - 1] = s
continue
if not l:
lr.push(l)
@@ -650,7 +650,7 @@
elif h.startswith('-'):
continue
else:
- self.hunk.insert(hunki-1, u)
+ self.hunk.insert(hunki - 1, u)
break
if not self.a:
@@ -689,15 +689,15 @@
top = 0
bot = 0
hlen = len(self.hunk)
- for x in xrange(hlen-1):
+ for x in xrange(hlen - 1):
# the hunk starts with the @@ line, so use x+1
- if self.hunk[x+1][0] == ' ':
+ if self.hunk[x + 1][0] == ' ':
top += 1
else:
break
if not toponly:
- for x in xrange(hlen-1):
- if self.hunk[hlen-bot-1][0] == ' ':
+ for x in xrange(hlen - 1):
+ if self.hunk[hlen - bot - 1][0] == ' ':
bot += 1
else:
break
@@ -1025,11 +1025,13 @@
afile, bfile, first_hunk = values
try:
if sourcefile:
- current_file = patchfile(ui, sourcefile, opener, eolmode=eolmode)
+ current_file = patchfile(ui, sourcefile, opener,
+ eolmode=eolmode)
else:
- current_file, missing = selectfile(afile, bfile, first_hunk,
- strip)
- current_file = patchfile(ui, current_file, opener, missing, eolmode)
+ current_file, missing = selectfile(afile, bfile,
+ first_hunk, strip)
+ current_file = patchfile(ui, current_file, opener,
+ missing, eolmode)
except PatchError, err:
ui.warn(str(err) + '\n')
current_file, current_hunk = None, None
@@ -1196,7 +1198,8 @@
try:
return internalpatch(patchname, ui, strip, cwd, files, eolmode)
except NoHunks:
- patcher = util.find_exe('gpatch') or util.find_exe('patch') or 'patch'
+ patcher = (util.find_exe('gpatch') or util.find_exe('patch')
+ or 'patch')
ui.debug('no valid hunks found; trying with %r instead\n' %
patcher)
if util.needbinarypatch():
@@ -1232,7 +1235,7 @@
l = len(text)
i = 0
while i < l:
- yield text[i:i+csize]
+ yield text[i:i + csize]
i += csize
tohash = gitindex(to)
@@ -1460,7 +1463,7 @@
fp.write(chunk)
for seqno, rev in enumerate(revs):
- single(rev, seqno+1, fp)
+ single(rev, seqno + 1, fp)
def diffstatdata(lines):
filename, adds, removes = None, 0, 0
@@ -1495,7 +1498,7 @@
totaladds += adds
totalremoves += removes
maxname = max(maxname, len(filename))
- maxtotal = max(maxtotal, adds+removes)
+ maxtotal = max(maxtotal, adds + removes)
if isbinary:
hasbinary = True
--- a/mercurial/posix.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/posix.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import osutil
--- a/mercurial/pure/base85.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/base85.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright (C) 2009 Brendan Cully <brendan@kublai.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import struct
@@ -48,7 +48,7 @@
l = len(text)
out = []
for i in range(0, len(text), 5):
- chunk = text[i:i+5]
+ chunk = text[i:i + 5]
acc = 0
for j, c in enumerate(chunk):
try:
--- a/mercurial/pure/bdiff.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/bdiff.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import struct, difflib
@@ -33,13 +33,15 @@
a2end = a2 + l2
b2end = b2 + l2
if a1end == a2:
- while a1end+shift < a2end and a[a1end+shift] == b[b1end+shift]:
+ while (a1end + shift < a2end and
+ a[a1end + shift] == b[b1end + shift]):
shift += 1
elif b1end == b2:
- while b1end+shift < b2end and a[a1end+shift] == b[b1end+shift]:
+ while (b1end + shift < b2end and
+ a[a1end + shift] == b[b1end + shift]):
shift += 1
- yield a1, b1, l1+shift
- prev = a2+shift, b2+shift, l2-shift
+ yield a1, b1, l1 + shift
+ prev = a2 + shift, b2 + shift, l2 - shift
yield prev
def bdiff(a, b):
--- a/mercurial/pure/diffhelpers.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/diffhelpers.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
def addlines(fp, hunk, lena, lenb, a, b):
while True:
--- a/mercurial/pure/mpatch.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/mpatch.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import struct
try:
@@ -22,7 +22,8 @@
# temporary string buffers.
def patches(a, bins):
- if not bins: return a
+ if not bins:
+ return a
plens = [len(x) for x in bins]
pl = sum(plens)
@@ -30,7 +31,8 @@
tl = bl + bl + pl # enough for the patches and two working texts
b1, b2 = 0, bl
- if not tl: return a
+ if not tl:
+ return a
m = StringIO()
def move(dest, src, count):
--- a/mercurial/pure/osutil.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/osutil.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import os
import stat as _stat
@@ -11,13 +11,20 @@
posixfile = open
def _mode_to_kind(mode):
- if _stat.S_ISREG(mode): return _stat.S_IFREG
- if _stat.S_ISDIR(mode): return _stat.S_IFDIR
- if _stat.S_ISLNK(mode): return _stat.S_IFLNK
- if _stat.S_ISBLK(mode): return _stat.S_IFBLK
- if _stat.S_ISCHR(mode): return _stat.S_IFCHR
- if _stat.S_ISFIFO(mode): return _stat.S_IFIFO
- if _stat.S_ISSOCK(mode): return _stat.S_IFSOCK
+ if _stat.S_ISREG(mode):
+ return _stat.S_IFREG
+ if _stat.S_ISDIR(mode):
+ return _stat.S_IFDIR
+ if _stat.S_ISLNK(mode):
+ return _stat.S_IFLNK
+ if _stat.S_ISBLK(mode):
+ return _stat.S_IFBLK
+ if _stat.S_ISCHR(mode):
+ return _stat.S_IFCHR
+ if _stat.S_ISFIFO(mode):
+ return _stat.S_IFIFO
+ if _stat.S_ISSOCK(mode):
+ return _stat.S_IFSOCK
return mode
def listdir(path, stat=False, skip=None):
--- a/mercurial/pure/parsers.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/pure/parsers.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from mercurial.node import bin, nullid, nullrev
from mercurial import util
--- a/mercurial/repair.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/repair.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2007 Matt Mackall
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import changegroup
from node import nullrev, short
--- a/mercurial/repo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/repo.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import error
--- a/mercurial/revlog.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/revlog.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""Storage back-end for Mercurial.
@@ -127,7 +127,7 @@
self.dataf = dataf
self.s = struct.calcsize(indexformatng)
self.datasize = size
- self.l = size/self.s
+ self.l = size / self.s
self.index = [None] * self.l
self.map = {nullid: nullrev}
self.allmap = 0
@@ -902,7 +902,7 @@
try:
# hex(node)[:...]
l = len(id) // 2 # grab an even number of digits
- bin_id = bin(id[:l*2])
+ bin_id = bin(id[:l * 2])
nl = [n for n in self.nodemap if n[:l] == bin_id]
nl = [n for n in nl if hex(n).startswith(id)]
if len(nl) > 0:
@@ -1403,7 +1403,7 @@
return (dd, di)
def files(self):
- res = [ self.indexfile ]
+ res = [self.indexfile]
if not self._inline:
res.append(self.datafile)
return res
--- a/mercurial/simplemerge.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/simplemerge.py Thu Jan 28 23:13:45 2010 -0600
@@ -50,7 +50,7 @@
def compare_range(a, astart, aend, b, bstart, bend):
"""Compare a[astart:aend] == b[bstart:bend], without slicing.
"""
- if (aend-astart) != (bend-bstart):
+ if (aend - astart) != (bend - bstart):
return False
for ia, ib in zip(xrange(astart, aend), xrange(bstart, bend)):
if a[ia] != b[ib]:
@@ -303,7 +303,7 @@
region_ib)
if reg is not None:
yield reg
- yield 'same', region_ia, region_len+region_ia
+ yield 'same', region_ia, region_len + region_ia
next_a = region_ia + region_len
next_b = region_ib + region_len
reg = self.mismatch_region(next_a, amatch, next_b, bmatch)
@@ -336,7 +336,7 @@
# there is an unconflicted block at i; how long does it
# extend? until whichever one ends earlier.
- i = intersect((abase, abase+alen), (bbase, bbase+blen))
+ i = intersect((abase, abase + alen), (bbase, bbase + blen))
if i:
intbase = i[0]
intend = i[1]
--- a/mercurial/sshrepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/sshrepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import bin, hex
from i18n import _
@@ -90,9 +90,11 @@
def readerr(self):
while 1:
size = util.fstat(self.pipee).st_size
- if size == 0: break
+ if size == 0:
+ break
l = self.pipee.readline()
- if not l: break
+ if not l:
+ break
self.ui.status(_("remote: "), l)
def abort(self, exception):
@@ -190,7 +192,7 @@
n = " ".join(map(hex, nodes))
d = self.call("branches", nodes=n)
try:
- br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ]
+ br = [tuple(map(bin, b.split(" "))) for b in d.splitlines()]
return br
except:
self.abort(error.ResponseError(_("unexpected response:"), d))
@@ -199,7 +201,7 @@
n = " ".join(["-".join(map(hex, p)) for p in pairs])
d = self.call("between", pairs=n)
try:
- p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ]
+ p = [l and map(bin, l.split(" ")) or [] for l in d.splitlines()]
return p
except:
self.abort(error.ResponseError(_("unexpected response:"), d))
--- a/mercurial/sshserver.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/sshserver.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
from node import bin, hex
@@ -42,7 +42,8 @@
def serve_forever(self):
try:
- while self.serve_one(): pass
+ while self.serve_one():
+ pass
finally:
if self.lock is not None:
self.lock.release()
@@ -52,7 +53,8 @@
cmd = self.fin.readline()[:-1]
if cmd:
impl = getattr(self, 'do_' + cmd, None)
- if impl: impl()
+ if impl:
+ impl()
else: self.respond("")
return cmd != ''
--- a/mercurial/statichttprepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/statichttprepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import changelog, byterange, url, error
--- a/mercurial/store.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/store.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2008 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import osutil, util
@@ -32,7 +32,7 @@
def _buildencodefun():
e = '_'
win_reserved = [ord(x) for x in '\\:*?"<>|']
- cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
+ cmap = dict([(chr(x), chr(x)) for x in xrange(127)])
for x in (range(32) + range(126, 256) + win_reserved):
cmap[chr(x)] = "~%02x" % x
for x in range(ord("A"), ord("Z")+1) + [ord(e)]:
@@ -45,7 +45,7 @@
while i < len(s):
for l in xrange(1, 4):
try:
- yield dmap[s[i:i+l]]
+ yield dmap[s[i:i + l]]
i += l
break
except KeyError:
@@ -59,7 +59,7 @@
def _build_lower_encodefun():
win_reserved = [ord(x) for x in '\\:*?"<>|']
- cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
+ cmap = dict([(chr(x), chr(x)) for x in xrange(127)])
for x in (range(32) + range(126, 256) + win_reserved):
cmap[chr(x)] = "~%02x" % x
for x in range(ord("A"), ord("Z")+1):
--- a/mercurial/streamclone.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/streamclone.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import util, error
from i18n import _
--- a/mercurial/strutil.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/strutil.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
def findall(haystack, needle, start=0, end=None):
if end is None:
--- a/mercurial/subrepo.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/subrepo.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,9 +3,9 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
-import errno, os, re
+import errno, os, re, xml.dom.minidom
from i18n import _
import config, util, node, error
hg = None
@@ -265,8 +265,8 @@
cmd = [util.shellquote(arg) for arg in cmd]
cmd = util.quotecommand(' '.join(cmd))
env = dict(os.environ)
- for k in ('LANGUAGE', 'LANG', 'LC_ALL', 'LC_MESSAGES'):
- env[k] = 'en_US.UTF-8'
+ # Avoid localized output, preserve current locale for everything else.
+ env['LC_MESSAGES'] = 'C'
write, read, err = util.popen3(cmd, env=env, newlines=True)
retdata = read.read()
err = err.read().strip()
@@ -275,35 +275,52 @@
return retdata
def _wcrev(self):
- info = self._svncommand(['info'])
- mat = re.search('Revision: ([\d]+)\n', info)
- if not mat:
+ output = self._svncommand(['info', '--xml'])
+ doc = xml.dom.minidom.parseString(output)
+ entries = doc.getElementsByTagName('entry')
+ if not entries:
return 0
- return mat.groups()[0]
+ return int(entries[0].getAttribute('revision') or 0)
- def _url(self):
- info = self._svncommand(['info'])
- mat = re.search('URL: ([^\n]+)\n', info)
- if not mat:
- return 0
- return mat.groups()[0]
-
- def _wcclean(self):
- status = self._svncommand(['status'])
- status = '\n'.join([s for s in status.splitlines() if s[0] != '?'])
- if status.strip():
- return False
- return True
+ def _wcchanged(self):
+ """Return (changes, extchanges) where changes is True
+ if the working directory was changed, and extchanges is
+ True if any of these changes concern an external entry.
+ """
+ output = self._svncommand(['status', '--xml'])
+ externals, changes = [], []
+ doc = xml.dom.minidom.parseString(output)
+ for e in doc.getElementsByTagName('entry'):
+ s = e.getElementsByTagName('wc-status')
+ if not s:
+ continue
+ item = s[0].getAttribute('item')
+ props = s[0].getAttribute('props')
+ path = e.getAttribute('path')
+ if item == 'external':
+ externals.append(path)
+ if (item not in ('', 'normal', 'unversioned', 'external')
+ or props not in ('', 'none')):
+ changes.append(path)
+ for path in changes:
+ for ext in externals:
+ if path == ext or path.startswith(ext + os.sep):
+ return True, True
+ return bool(changes), False
def dirty(self):
- if self._wcrev() == self._state[1] and self._wcclean():
+ if self._wcrev() == self._state[1] and not self._wcchanged()[0]:
return False
return True
def commit(self, text, user, date):
# user and date are out of our hands since svn is centralized
- if self._wcclean():
+ changed, extchanged = self._wcchanged()
+ if not changed:
return self._wcrev()
+ if extchanged:
+ # Do not try to commit externals
+ raise util.Abort(_('cannot commit svn externals'))
commitinfo = self._svncommand(['commit', '-m', text])
self._ui.status(commitinfo)
newrev = re.search('Committed revision ([\d]+).', commitinfo)
--- a/mercurial/tags.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/tags.py Thu Jan 28 23:13:45 2010 -0600
@@ -4,7 +4,7 @@
# Copyright 2009 Greg Ward <greg@gerg.ca>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# Currently this module only deals with reading and caching tags.
# Eventually, it could take care of updating (adding/removing/moving)
--- a/mercurial/templatefilters.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templatefilters.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import cgi, re, os, time, urllib, textwrap
import util, encoding
@@ -64,7 +64,8 @@
m = para_re.search(text, start)
if not m:
w = len(text)
- while w > start and text[w-1].isspace(): w -= 1
+ while w > start and text[w - 1].isspace():
+ w -= 1
yield text[start:w], text[w:]
break
yield text[start:m.start(0)], m.group(1)
@@ -91,17 +92,21 @@
def domain(author):
'''get domain of author, or empty string if none.'''
f = author.find('@')
- if f == -1: return ''
- author = author[f+1:]
+ if f == -1:
+ return ''
+ author = author[f + 1:]
f = author.find('>')
- if f >= 0: author = author[:f]
+ if f >= 0:
+ author = author[:f]
return author
def person(author):
'''get name of author, or else username.'''
- if not '@' in author: return author
+ if not '@' in author:
+ return author
f = author.find('<')
- if f == -1: return util.shortuser(author)
+ if f == -1:
+ return util.shortuser(author)
return author[:f].rstrip()
def indent(text, prefix):
--- a/mercurial/templatekw.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templatekw.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,12 +3,12 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import hex
import encoding, patch, util, error
-def showlist(templ, name, values, plural=None, **args):
+def showlist(name, values, plural=None, **args):
'''expand set of values.
name is name of key in template map.
values is list of strings or dicts.
@@ -28,7 +28,9 @@
expand 'end_foos'.
'''
- if plural: names = plural
+ templ = args['templ']
+ if plural:
+ names = plural
else: names = name + 's'
if not values:
noname = 'no_' + names
@@ -143,11 +145,11 @@
def showauthor(repo, ctx, templ, **args):
return ctx.user()
-def showbranches(repo, ctx, templ, **args):
- branch = ctx.branch()
+def showbranches(**args):
+ branch = args['ctx'].branch()
if branch != 'default':
branch = encoding.tolocal(branch)
- return showlist(templ, 'branch', [branch], plural='branches', **args)
+ return showlist('branch', [branch], plural='branches', **args)
def showdate(repo, ctx, templ, **args):
return ctx.date()
@@ -164,46 +166,51 @@
removes += i[2]
return '%s: +%s/-%s' % (files, adds, removes)
-def showextras(repo, ctx, templ, **args):
- for key, value in sorted(ctx.extra().items()):
+def showextras(**args):
+ templ = args['templ']
+ for key, value in sorted(args['ctx'].extra().items()):
args = args.copy()
args.update(dict(key=key, value=value))
yield templ('extra', **args)
-def showfileadds(repo, ctx, templ, revcache, **args):
- return showlist(templ, 'file_add', getfiles(repo, ctx, revcache)[1], **args)
+def showfileadds(**args):
+ repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
+ return showlist('file_add', getfiles(repo, ctx, revcache)[1], **args)
-def showfilecopies(repo, ctx, templ, cache, revcache, **args):
- copies = revcache.get('copies')
+def showfilecopies(**args):
+ cache, ctx= args['cache'], args['ctx']
+ copies = args['revcache'].get('copies')
if copies is None:
if 'getrenamed' not in cache:
- cache['getrenamed'] = getrenamedfn(repo)
+ cache['getrenamed'] = getrenamedfn(args['repo'])
copies = []
getrenamed = cache['getrenamed']
for fn in ctx.files():
rename = getrenamed(fn, ctx.rev())
if rename:
copies.append((fn, rename[0]))
-
+
c = [{'name': x[0], 'source': x[1]} for x in copies]
- return showlist(templ, 'file_copy', c, plural='file_copies', **args)
+ return showlist('file_copy', c, plural='file_copies', **args)
# showfilecopiesswitch() displays file copies only if copy records are
# provided before calling the templater, usually with a --copies
# command line switch.
-def showfilecopiesswitch(repo, ctx, templ, cache, revcache, **args):
- copies = revcache.get('copies') or []
+def showfilecopiesswitch(**args):
+ copies = args['revcache'].get('copies') or []
c = [{'name': x[0], 'source': x[1]} for x in copies]
- return showlist(templ, 'file_copy', c, plural='file_copies', **args)
+ return showlist('file_copy', c, plural='file_copies', **args)
-def showfiledels(repo, ctx, templ, revcache, **args):
- return showlist(templ, 'file_del', getfiles(repo, ctx, revcache)[2], **args)
+def showfiledels(**args):
+ repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
+ return showlist('file_del', getfiles(repo, ctx, revcache)[2], **args)
-def showfilemods(repo, ctx, templ, revcache, **args):
- return showlist(templ, 'file_mod', getfiles(repo, ctx, revcache)[0], **args)
+def showfilemods(**args):
+ repo, ctx, revcache = args['repo'], args['ctx'], args['revcache']
+ return showlist('file_mod', getfiles(repo, ctx, revcache)[0], **args)
-def showfiles(repo, ctx, templ, **args):
- return showlist(templ, 'file', ctx.files(), **args)
+def showfiles(**args):
+ return showlist('file', args['ctx'].files(), **args)
def showlatesttag(repo, ctx, templ, cache, **args):
return getlatesttags(repo, ctx, cache)[2]
@@ -211,7 +218,8 @@
def showlatesttagdistance(repo, ctx, templ, cache, **args):
return getlatesttags(repo, ctx, cache)[1]
-def showmanifest(repo, ctx, templ, **args):
+def showmanifest(**args):
+ repo, ctx, templ = args['repo'], args['ctx'], args['templ']
args = args.copy()
args.update(dict(rev=repo.manifest.rev(ctx.changeset()[0]),
node=hex(ctx.changeset()[0])))
@@ -223,9 +231,17 @@
def showrev(repo, ctx, templ, **args):
return ctx.rev()
-def showtags(repo, ctx, templ, **args):
- return showlist(templ, 'tag', ctx.tags(), **args)
+def showtags(**args):
+ return showlist('tag', args['ctx'].tags(), **args)
+# keywords are callables like:
+# fn(repo, ctx, templ, cache, revcache, **args)
+# with:
+# repo - current repository instance
+# ctx - the changectx being displayed
+# templ - the templater instance
+# cache - a cache dictionary for the whole templater run
+# revcache - a cache dictionary for the current revision
keywords = {
'author': showauthor,
'branches': showbranches,
--- a/mercurial/templater.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templater.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import re, sys, os
@@ -77,7 +77,7 @@
raise SyntaxError(_("error expanding '%s%%%s'") % (key, format))
lm = map.copy()
for i in v:
- if isinstance(i, dict):
+ if isinstance(i, dict):
lm.update(i)
yield self.process(format, lm)
else:
@@ -244,7 +244,6 @@
styles = [styles]
for style in styles:
-
if not style:
continue
locations = [os.path.join(style, 'map'), 'map-' + style]
--- a/mercurial/templates/coal/map Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/coal/map Thu Jan 28 23:13:45 2010 -0600
@@ -181,7 +181,7 @@
<td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
<td>{description}</td>
<td>{contact|obfuscate}</td>
- <td class="age">{lastchange|age} ago</td>
+ <td class="age">{lastchange|age}</td>
<td class="indexlinks">{archives%indexarchiveentry}</td>
</tr>\n'
indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}"> ↓{type|escape}</a>'
--- a/mercurial/templates/gitweb/graph.tmpl Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/gitweb/graph.tmpl Thu Jan 28 23:13:45 2010 -0600
@@ -63,7 +63,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
revlink += '</span> _TAGS';
-revlink += '<span class="info">_DATE ago, by _USER</span></li>';
+revlink += '<span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/mercurial/templates/monoblue/graph.tmpl Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/monoblue/graph.tmpl Thu Jan 28 23:13:45 2010 -0600
@@ -60,7 +60,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
- revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
+ revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/mercurial/templates/paper/graph.tmpl Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/paper/graph.tmpl Thu Jan 28 23:13:45 2010 -0600
@@ -71,7 +71,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
+revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/mercurial/templates/spartan/graph.tmpl Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/spartan/graph.tmpl Thu Jan 28 23:13:45 2010 -0600
@@ -55,7 +55,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span><span class="info">_DATE ago, by _USER</span></li>';
+revlink += '</span><span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/mercurial/templates/spartan/map Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/templates/spartan/map Thu Jan 28 23:13:45 2010 -0600
@@ -168,7 +168,7 @@
<td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
<td>{description}</td>
<td>{contact|obfuscate}</td>
- <td class="age">{lastchange|age} ago</td>
+ <td class="age">{lastchange|age}</td>
<td class="indexlinks">
<a href="{url}rss-log">RSS</a>
<a href="{url}atom-log">Atom</a>
--- a/mercurial/transaction.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/transaction.py Thu Jan 28 23:13:45 2010 -0600
@@ -9,7 +9,7 @@
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import os, errno
@@ -73,8 +73,8 @@
@active
def add(self, file, offset, data=None):
- if file in self.map: return
-
+ if file in self.map:
+ return
if self._queue:
self._queue[-1].append((file, offset, data))
return
@@ -147,7 +147,8 @@
self.report(_("transaction abort!\n"))
try:
- _playback(self.journal, self.report, self.opener, self.entries, False)
+ _playback(self.journal, self.report, self.opener,
+ self.entries, False)
self.report(_("rollback completed\n"))
except:
self.report(_("rollback failed - please run hg recover\n"))
--- a/mercurial/ui.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/ui.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import errno, getpass, os, socket, sys, tempfile, traceback
@@ -198,7 +198,8 @@
def shortuser(self, user):
"""Return a short representation of a user name or email address."""
- if not self.verbose: user = util.shortuser(user)
+ if not self.verbose:
+ user = util.shortuser(user)
return user
def _path(self, loc):
@@ -236,12 +237,14 @@
def write_err(self, *args):
try:
- if not sys.stdout.closed: sys.stdout.flush()
+ if not sys.stdout.closed:
+ sys.stdout.flush()
for a in args:
sys.stderr.write(str(a))
# stderr may be buffered under win32 when redirected to files,
# including stdout.
- if not sys.stderr.closed: sys.stderr.flush()
+ if not sys.stderr.closed:
+ sys.stderr.flush()
except IOError, inst:
if inst.errno != errno.EPIPE:
raise
@@ -311,21 +314,24 @@
return resps.index(r.lower())
self.write(_("unrecognized response\n"))
-
def getpass(self, prompt=None, default=None):
- if not self.interactive(): return default
+ if not self.interactive():
+ return default
try:
return getpass.getpass(prompt or _('password: '))
except EOFError:
raise util.Abort(_('response expected'))
def status(self, *msg):
- if not self.quiet: self.write(*msg)
+ if not self.quiet:
+ self.write(*msg)
def warn(self, *msg):
self.write_err(*msg)
def note(self, *msg):
- if self.verbose: self.write(*msg)
+ if self.verbose:
+ self.write(*msg)
def debug(self, *msg):
- if self.debugflag: self.write(*msg)
+ if self.debugflag:
+ self.write(*msg)
def edit(self, text, user):
(fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
text=True)
--- a/mercurial/url.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/url.py Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
import urllib, urllib2, urlparse, httplib, os, re, socket, cStringIO
from i18n import _
@@ -30,18 +30,18 @@
if a == -1:
user, passwd = None, None
else:
- userpass, netloc = netloc[:a], netloc[a+1:]
+ userpass, netloc = netloc[:a], netloc[a + 1:]
c = userpass.find(':')
if c == -1:
user, passwd = urllib.unquote(userpass), None
else:
user = urllib.unquote(userpass[:c])
- passwd = urllib.unquote(userpass[c+1:])
+ passwd = urllib.unquote(userpass[c + 1:])
c = netloc.find(':')
if c == -1:
host, port = netloc, None
else:
- host, port = netloc[:c], netloc[c+1:]
+ host, port = netloc[:c], netloc[c + 1:]
return host, port, user, passwd
def netlocunsplit(host, port, user=None, passwd=None):
@@ -89,7 +89,8 @@
l = list(path)
for i in xrange(len(l)):
c = l[i]
- if c == '%' and i + 2 < len(l) and (l[i+1] in _hex and l[i+2] in _hex):
+ if (c == '%' and i + 2 < len(l) and
+ l[i + 1] in _hex and l[i + 2] in _hex):
pass
elif c not in _safeset:
l[i] = '%%%02X' % ord(c)
@@ -148,7 +149,8 @@
bestauth = None
for auth in config.itervalues():
prefix = auth.get('prefix')
- if not prefix: continue
+ if not prefix:
+ continue
p = prefix.split('://', 1)
if len(p) > 1:
schemes, prefix = [p[0]], p[1]
@@ -180,7 +182,7 @@
proxypasswd = ui.config("http_proxy", "passwd")
# see if we should use a proxy for this url
- no_list = [ "localhost", "127.0.0.1" ]
+ no_list = ["localhost", "127.0.0.1"]
no_list.extend([p.lower() for
p in ui.configlist("http_proxy", "no")])
no_list.extend([p.strip().lower() for
@@ -436,7 +438,8 @@
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.host, self.port))
if _generic_proxytunnel(self):
- self.sock = _ssl_wrap_socket(self.sock, self.cert_file, self.key_file)
+ self.sock = _ssl_wrap_socket(self.sock, self.cert_file,
+ self.key_file)
else:
BetterHTTPS.connect(self)
--- a/mercurial/util.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/util.py Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""Mercurial utility functions and platform specfic implementations.
@@ -182,16 +182,21 @@
code = os.system(cmd)
if sys.platform == 'OpenVMS' and code & 1:
code = 0
- if code: raise Abort(_("command '%s' failed: %s") %
- (cmd, explain_exit(code)))
+ if code:
+ raise Abort(_("command '%s' failed: %s") %
+ (cmd, explain_exit(code)))
return open(outname, 'rb').read()
finally:
try:
- if inname: os.unlink(inname)
- except: pass
+ if inname:
+ os.unlink(inname)
+ except:
+ pass
try:
- if outname: os.unlink(outname)
- except: pass
+ if outname:
+ os.unlink(outname)
+ except:
+ pass
filtertable = {
'tempfile:': tempfilter,
@@ -242,8 +247,11 @@
Abort = error.Abort
-def always(fn): return True
-def never(fn): return False
+def always(fn):
+ return True
+
+def never(fn):
+ return False
def pathto(root, n1, n2):
'''return the relative path from one place to another.
@@ -256,7 +264,8 @@
relative to root.
n2 should always be relative to root.
'''
- if not n1: return localpath(n2)
+ if not n1:
+ return localpath(n2)
if os.path.isabs(n1):
if os.path.splitdrive(root)[0] != os.path.splitdrive(n1)[0]:
return os.path.join(root, localpath(n2))
@@ -912,11 +921,15 @@
assert size >= 0
assert limit is None or limit >= 0
while True:
- if limit is None: nbytes = size
- else: nbytes = min(limit, size)
+ if limit is None:
+ nbytes = size
+ else:
+ nbytes = min(limit, size)
s = nbytes and f.read(nbytes)
- if not s: break
- if limit: limit -= len(s)
+ if not s:
+ break
+ if limit:
+ limit -= len(s)
yield s
def makedate():
@@ -1084,7 +1097,7 @@
user = user[:f]
f = user.find('<')
if f >= 0:
- user = user[f+1:]
+ user = user[f + 1:]
f = user.find(' ')
if f >= 0:
user = user[:f]
@@ -1096,15 +1109,16 @@
def email(author):
'''get email of author.'''
r = author.find('>')
- if r == -1: r = None
- return author[author.find('<')+1:r]
+ if r == -1:
+ r = None
+ return author[author.find('<') + 1:r]
def ellipsis(text, maxlength=400):
"""Trim string to at most maxlength (default: 400) characters."""
if len(text) <= maxlength:
return text
else:
- return "%s..." % (text[:maxlength-3])
+ return "%s..." % (text[:maxlength - 3])
def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
'''yield every hg repository under path, recursively.'''
@@ -1173,7 +1187,8 @@
if 'HGRCPATH' in os.environ:
_rcpath = []
for p in os.environ['HGRCPATH'].split(os.pathsep):
- if not p: continue
+ if not p:
+ continue
p = expandpath(p)
if os.path.isdir(p):
for f, kind in osutil.listdir(p):
@@ -1189,15 +1204,15 @@
'''return byte count formatted as readable string, with units'''
units = (
- (100, 1<<30, _('%.0f GB')),
- (10, 1<<30, _('%.1f GB')),
- (1, 1<<30, _('%.2f GB')),
- (100, 1<<20, _('%.0f MB')),
- (10, 1<<20, _('%.1f MB')),
- (1, 1<<20, _('%.2f MB')),
- (100, 1<<10, _('%.0f KB')),
- (10, 1<<10, _('%.1f KB')),
- (1, 1<<10, _('%.2f KB')),
+ (100, 1 << 30, _('%.0f GB')),
+ (10, 1 << 30, _('%.1f GB')),
+ (1, 1 << 30, _('%.2f GB')),
+ (100, 1 << 20, _('%.0f MB')),
+ (10, 1 << 20, _('%.1f MB')),
+ (1, 1 << 20, _('%.2f MB')),
+ (100, 1 << 10, _('%.0f KB')),
+ (10, 1 << 10, _('%.1f KB')),
+ (1, 1 << 10, _('%.2f KB')),
(1, 1, _('%.0f bytes')),
)
@@ -1219,7 +1234,7 @@
# root. On POSIX they are rooted at the file system root.
if os.name == 'nt':
droot = os.path.splitdrive(os.getcwd())[0] + '/'
- path = os.path.join(droot, path[i+1:])
+ path = os.path.join(droot, path[i + 1:])
else:
path = path[i:]
else:
--- a/mercurial/verify.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/verify.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from node import nullid, short
from i18n import _
@@ -155,7 +155,8 @@
ui.status(_("crosschecking files in changesets and manifests\n"))
if havemf:
- for c,m in sorted([(c, m) for m in mflinkrevs for c in mflinkrevs[m]]):
+ for c, m in sorted([(c, m) for m in mflinkrevs
+ for c in mflinkrevs[m]]):
err(c, _("changeset refers to unknown manifest %s") % short(m))
mflinkrevs = None # del is bad here due to scope issues
@@ -259,7 +260,7 @@
# cross-check
if f in filenodes:
- fns = [(lr, n) for n,lr in filenodes[f].iteritems()]
+ fns = [(lr, n) for n, lr in filenodes[f].iteritems()]
for lr, node in sorted(fns):
err(lr, _("%s in manifests not found") % short(node), f)
--- a/mercurial/win32.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/win32.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""Utility functions that use win32 API.
--- a/mercurial/windows.py Mon Jan 18 19:57:36 2010 +0100
+++ b/mercurial/windows.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
from i18n import _
import osutil, error
@@ -47,7 +47,8 @@
self.fp.write(s[start:end])
start = end
except IOError, inst:
- if inst.errno != 0: raise
+ if inst.errno != 0:
+ raise
self.close()
raise IOError(errno.EPIPE, 'Broken pipe')
@@ -55,7 +56,8 @@
try:
return self.fp.flush()
except IOError, inst:
- if inst.errno != errno.EINVAL: raise
+ if inst.errno != errno.EINVAL:
+ raise
self.close()
raise IOError(errno.EPIPE, 'Broken pipe')
@@ -333,7 +335,7 @@
hStdOutput = None
hStdError = None
wShowWindow = subprocess.SW_HIDE
-
+
args = subprocess.list2cmdline(args)
# Not running the command in shell mode makes python26 hang when
# writing to hgweb output socket.
--- a/setup.py Mon Jan 18 19:57:36 2010 +0100
+++ b/setup.py Thu Jan 28 23:13:45 2010 -0600
@@ -240,7 +240,7 @@
]
packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert',
- 'hgext.highlight', 'hgext.zeroconf', ]
+ 'hgext.highlight', 'hgext.zeroconf']
if sys.platform == 'linux2' and os.uname()[2] > '2.6':
# The inotify extension is only usable with Linux 2.6 kernels.
@@ -257,7 +257,7 @@
def ordinarypath(p):
return p and p[0] != '.' and p[-1] != '~'
-for root in ('templates', ):
+for root in ('templates',):
for curdir, dirs, files in os.walk(os.path.join('mercurial', root)):
curdir = curdir.split(os.sep, 1)[1]
dirs[:] = filter(ordinarypath, dirs)
@@ -273,7 +273,7 @@
author_email='mpm@selenic.com',
url='http://mercurial.selenic.com/',
description='Scalable distributed SCM',
- license='GNU GPL',
+ license='GNU GPLv2+',
scripts=scripts,
packages=packages,
ext_modules=extmodules,
--- a/tests/coverage.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/coverage.py Thu Jan 28 23:13:45 2010 -0600
@@ -106,20 +106,20 @@
self.excluded = excluded
self.suite_spots = suite_spots
self.excluding_suite = 0
-
+
def doRecursive(self, node):
for n in node.getChildNodes():
self.dispatch(n)
visitStmt = visitModule = doRecursive
-
+
def doCode(self, node):
if hasattr(node, 'decorators') and node.decorators:
self.dispatch(node.decorators)
self.recordAndDispatch(node.code)
else:
self.doSuite(node, node.code)
-
+
visitFunction = visitClass = doCode
def getFirstLine(self, node):
@@ -139,26 +139,26 @@
for n in node.getChildNodes():
lineno = max(lineno, self.getLastLine(n))
return lineno
-
+
def doStatement(self, node):
self.recordLine(self.getFirstLine(node))
visitAssert = visitAssign = visitAssTuple = visitPrint = \
visitPrintnl = visitRaise = visitSubscript = visitDecorators = \
doStatement
-
+
def visitPass(self, node):
- # Pass statements have weird interactions with docstrings. If this
- # pass statement is part of one of those pairs, claim that the statement
- # is on the later of the two lines.
+ # Pass statements have weird interactions with docstrings. If
+ # this pass statement is part of one of those pairs, claim
+ # that the statement is on the later of the two lines.
l = node.lineno
if l:
- lines = self.suite_spots.get(l, [l,l])
+ lines = self.suite_spots.get(l, [l, l])
self.statements[lines[1]] = 1
-
+
def visitDiscard(self, node):
# Discard nodes are statements that execute an expression, but then
- # discard the results. This includes function calls, so we can't
+ # discard the results. This includes function calls, so we can't
# ignore them all. But if the expression is a constant, the statement
# won't be "executed", so don't count it now.
if node.expr.__class__.__name__ != 'Const':
@@ -172,7 +172,7 @@
return self.recordLine(self.getFirstLine(node))
else:
return 0
-
+
def recordLine(self, lineno):
# Returns a bool, whether the line is included or excluded.
if lineno:
@@ -196,9 +196,9 @@
self.statements[lineno] = 1
return 1
return 0
-
+
default = recordNodeLine
-
+
def recordAndDispatch(self, node):
self.recordNodeLine(node)
self.dispatch(node)
@@ -209,7 +209,7 @@
self.excluding_suite = 1
self.recordAndDispatch(body)
self.excluding_suite = exsuite
-
+
def doPlainWordSuite(self, prevsuite, suite):
# Finding the exclude lines for else's is tricky, because they aren't
# present in the compiler parse tree. Look at the previous suite,
@@ -217,17 +217,17 @@
# first line are excluded, then we exclude the else.
lastprev = self.getLastLine(prevsuite)
firstelse = self.getFirstLine(suite)
- for l in range(lastprev+1, firstelse):
+ for l in range(lastprev + 1, firstelse):
if self.suite_spots.has_key(l):
self.doSuite(None, suite, exclude=self.excluded.has_key(l))
break
else:
self.doSuite(None, suite)
-
+
def doElse(self, prevsuite, node):
if node.else_:
self.doPlainWordSuite(prevsuite, node.else_)
-
+
def visitFor(self, node):
self.doSuite(node, node.body)
self.doElse(node.body, node)
@@ -250,21 +250,21 @@
if not a:
# It's a plain "except:". Find the previous suite.
if i > 0:
- prev = node.handlers[i-1][2]
+ prev = node.handlers[i - 1][2]
else:
prev = node.body
self.doPlainWordSuite(prev, h)
else:
self.doSuite(a, h)
self.doElse(node.handlers[-1][2], node)
-
+
def visitTryFinally(self, node):
self.doSuite(node, node.body)
self.doPlainWordSuite(node.body, node.final)
-
+
def visitWith(self, node):
self.doSuite(node, node.body)
-
+
def visitGlobal(self, node):
# "global" statements don't execute like others (they don't call the
# trace function), so don't record their line numbers.
@@ -285,7 +285,7 @@
# A dictionary with an entry for (Python source file name, line number
# in that file) if that line has been executed.
c = {}
-
+
# A map from canonical Python source file name to a dictionary in
# which there's an entry for each line number that has been
# executed.
@@ -313,19 +313,18 @@
self.relative_dir = self.abs_file(os.curdir)+os.sep
self.exclude('# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]')
- # t(f, x, y). This method is passed to sys.settrace as a trace function.
- # See [van Rossum 2001-07-20b, 9.2] for an explanation of sys.settrace and
+ # t(f, x, y). This method is passed to sys.settrace as a trace function.
+ # See [van Rossum 2001-07-20b, 9.2] for an explanation of sys.settrace and
# the arguments and return value of the trace function.
# See [van Rossum 2001-07-20a, 3.2] for a description of frame and code
# objects.
-
- def t(self, f, w, unused): #pragma: no cover
+ def t(self, f, w, unused): #pragma: no cover
if w == 'line':
self.c[(f.f_code.co_filename, f.f_lineno)] = 1
#-for c in self.cstack:
#- c[(f.f_code.co_filename, f.f_lineno)] = 1
return self.t
-
+
def help(self, error=None): #pragma: no cover
if error:
print error
@@ -363,7 +362,8 @@
elif o[2:] + '=' in long_opts:
settings[o[2:]+'='] = a
else: #pragma: no cover
- pass # Can't get here, because getopt won't return anything unknown.
+ # Can't get here, because getopt won't return anything unknown.
+ pass
if settings.get('help'):
help_fn()
@@ -377,14 +377,14 @@
args_needed = (settings.get('execute')
or settings.get('annotate')
or settings.get('report'))
- action = (settings.get('erase')
+ action = (settings.get('erase')
or settings.get('collect')
or args_needed)
if not action:
help_fn("You must specify at least one of -e, -x, -c, -r, or -a.")
if not args_needed and args:
help_fn("Unexpected arguments: %s" % " ".join(args))
-
+
self.parallel_mode = settings.get('parallel-mode')
self.get_ready()
@@ -402,7 +402,7 @@
self.collect()
if not args:
args = self.cexecuted.keys()
-
+
ignore_errors = settings.get('ignore-errors')
show_missing = settings.get('show-missing')
directory = settings.get('directory=')
@@ -412,7 +412,7 @@
omit = [self.abs_file(p) for p in omit.split(',')]
else:
omit = []
-
+
if settings.get('report'):
self.report(args, show_missing, ignore_errors, omit_prefixes=omit)
if settings.get('annotate'):
@@ -422,7 +422,7 @@
self.usecache = usecache
if cache_file and not self.cache:
self.cache_default = cache_file
-
+
def get_ready(self, parallel_mode=False):
if self.usecache and not self.cache:
self.cache = os.environ.get(self.cache_env, self.cache_default)
@@ -430,7 +430,7 @@
self.cache += "." + gethostname() + "." + str(os.getpid())
self.restore()
self.analysis_cache = {}
-
+
def start(self, parallel_mode=False):
self.get_ready()
if self.nesting == 0: #pragma: no cover
@@ -438,7 +438,7 @@
if hasattr(threading, 'settrace'):
threading.settrace(self.t)
self.nesting += 1
-
+
def stop(self):
self.nesting -= 1
if self.nesting == 0: #pragma: no cover
@@ -462,7 +462,7 @@
def begin_recursive(self):
self.cstack.append(self.c)
self.xstack.append(self.exclude_re)
-
+
def end_recursive(self):
self.c = self.cstack.pop()
self.exclude_re = self.xstack.pop()
@@ -568,7 +568,7 @@
self.canonical_filename_cache[filename] = cf
return self.canonical_filename_cache[filename]
- # canonicalize_filenames(). Copy results from "c" to "cexecuted",
+ # canonicalize_filenames(). Copy results from "c" to "cexecuted",
# canonicalizing filenames on the way. Clear the "c" map.
def canonicalize_filenames(self):
@@ -598,7 +598,6 @@
# in the source code, (3) a list of lines of excluded statements,
# and (4), a map of line numbers to multi-line line number ranges, for
# statements that cross lines.
-
def analyze_morf(self, morf):
if self.analysis_cache.has_key(morf):
return self.analysis_cache[morf]
@@ -636,26 +635,27 @@
if len(tree) == 3 and type(tree[2]) == type(1):
return tree[2]
tree = tree[1]
-
+
def last_line_of_tree(self, tree):
while True:
if len(tree) == 3 and type(tree[2]) == type(1):
return tree[2]
tree = tree[-1]
-
+
def find_docstring_pass_pair(self, tree, spots):
for i in range(1, len(tree)):
- if self.is_string_constant(tree[i]) and self.is_pass_stmt(tree[i+1]):
+ if (self.is_string_constant(tree[i]) and
+ self.is_pass_stmt(tree[i + 1]):
first_line = self.first_line_of_tree(tree[i])
- last_line = self.last_line_of_tree(tree[i+1])
+ last_line = self.last_line_of_tree(tree[i + 1])
self.record_multiline(spots, first_line, last_line)
-
+
def is_string_constant(self, tree):
try:
return tree[0] == symbol.stmt and tree[1][1][1][0] == symbol.expr_stmt
except:
return False
-
+
def is_pass_stmt(self, tree):
try:
return tree[0] == symbol.stmt and tree[1][1][1][0] == symbol.pass_stmt
@@ -663,9 +663,9 @@
return False
def record_multiline(self, spots, i, j):
- for l in range(i, j+1):
+ for l in range(i, j + 1):
spots[l] = (i, j)
-
+
def get_suite_spots(self, tree, spots):
""" Analyze a parse tree to find suite introducers which span a number
of lines.
@@ -675,16 +675,16 @@
if tree[i][0] == symbol.suite:
# Found a suite, look back for the colon and keyword.
lineno_colon = lineno_word = None
- for j in range(i-1, 0, -1):
+ for j in range(i - 1, 0, -1):
if tree[j][0] == token.COLON:
# Colons are never executed themselves: we want the
# line number of the last token before the colon.
- lineno_colon = self.last_line_of_tree(tree[j-1])
+ lineno_colon = self.last_line_of_tree(tree[j - 1])
elif tree[j][0] == token.NAME:
if tree[j][1] == 'elif':
- # Find the line number of the first non-terminal
- # after the keyword.
- t = tree[j+1]
+ # Find the line number of the first
+ # non-terminal after the keyword.
+ t = tree[j + 1]
while t and token.ISNONTERMINAL(t[0]):
t = t[1]
if t:
@@ -694,7 +694,7 @@
break
elif tree[j][0] == symbol.except_clause:
# "except" clauses look like:
- # ('except_clause', ('NAME', 'except', lineno), ...)
+ # ('except_clause', ('NAME', 'except', lineno),...)
if tree[j][1][0] == token.NAME:
lineno_word = tree[j][1][2]
break
@@ -703,11 +703,11 @@
# between the two with the two line numbers.
self.record_multiline(spots, lineno_word, lineno_colon)
- # "pass" statements are tricky: different versions of Python
- # treat them differently, especially in the common case of a
- # function with a doc string and a single pass statement.
+ # "pass" statements are tricky: different versions
+ # of Python treat them differently, especially in
+ # the common case of a function with a doc string
+ # and a single pass statement.
self.find_docstring_pass_pair(tree[i], spots)
-
elif tree[i][0] == symbol.simple_stmt:
first_line = self.first_line_of_tree(tree[i])
last_line = self.last_line_of_tree(tree[i])
@@ -724,7 +724,7 @@
lines = text.split('\n')
for i in range(len(lines)):
if reExclude.search(lines[i]):
- excluded[i+1] = 1
+ excluded[i + 1] = 1
# Parse the code and analyze the parse tree to find out which statements
# are multiline, and where suites begin and end.
@@ -732,7 +732,7 @@
tree = parser.suite(text+'\n\n').totuple(1)
self.get_suite_spots(tree, suite_spots)
#print "Suite spots:", suite_spots
-
+
# Use the compiler module to parse the text and find the executable
# statements. We add newlines to be impervious to final partial lines.
statements = {}
@@ -831,7 +831,8 @@
def morf_name_compare(self, x, y):
return cmp(self.morf_name(x), self.morf_name(y))
- def report(self, morfs, show_missing=1, ignore_errors=0, file=None, omit_prefixes=[]):
+ def report(self, morfs, show_missing=1, ignore_errors=0, file=None,
+ omit_prefixes=[]):
if not isinstance(morfs, types.ListType):
morfs = [morfs]
# On windows, the shell doesn't expand wildcards. Do it here.
@@ -842,7 +843,7 @@
else:
globbed.append(morf)
morfs = globbed
-
+
morfs = self.filter_by_prefix(morfs, omit_prefixes)
morfs.sort(self.morf_name_compare)
@@ -856,8 +857,8 @@
fmt_coverage = fmt_coverage + " %s"
if not file:
file = sys.stdout
- print >>file, header
- print >>file, "-" * len(header)
+ print >> file, header
+ print >> file, "-" * len(header)
total_statements = 0
total_executed = 0
for morf in morfs:
@@ -903,14 +904,16 @@
for morf in morfs:
try:
filename, statements, excluded, missing, _ = self.analysis2(morf)
- self.annotate_file(filename, statements, excluded, missing, directory)
+ self.annotate_file(filename, statements, excluded, missing,
+ directory)
except KeyboardInterrupt:
raise
except:
if not ignore_errors:
raise
-
- def annotate_file(self, filename, statements, excluded, missing, directory=None):
+
+ def annotate_file(self, filename, statements, excluded, missing,
+ directory=None):
source = open(filename, 'r')
if directory:
dest_file = os.path.join(directory,
@@ -937,7 +940,7 @@
if self.blank_re.match(line):
dest.write(' ')
elif self.else_re.match(line):
- # Special logic for lines containing only 'else:'.
+ # Special logic for lines containing only 'else:'.
# See [GDR 2001-12-04b, 3.2].
if i >= len(statements) and j >= len(missing):
dest.write('! ')
@@ -961,40 +964,40 @@
the_coverage = coverage()
# Module functions call methods in the singleton object.
-def use_cache(*args, **kw):
+def use_cache(*args, **kw):
return the_coverage.use_cache(*args, **kw)
-def start(*args, **kw):
+def start(*args, **kw):
return the_coverage.start(*args, **kw)
-def stop(*args, **kw):
+def stop(*args, **kw):
return the_coverage.stop(*args, **kw)
-def erase(*args, **kw):
+def erase(*args, **kw):
return the_coverage.erase(*args, **kw)
-def begin_recursive(*args, **kw):
+def begin_recursive(*args, **kw):
return the_coverage.begin_recursive(*args, **kw)
-def end_recursive(*args, **kw):
+def end_recursive(*args, **kw):
return the_coverage.end_recursive(*args, **kw)
-def exclude(*args, **kw):
+def exclude(*args, **kw):
return the_coverage.exclude(*args, **kw)
-def analysis(*args, **kw):
+def analysis(*args, **kw):
return the_coverage.analysis(*args, **kw)
-def analysis2(*args, **kw):
+def analysis2(*args, **kw):
return the_coverage.analysis2(*args, **kw)
-def report(*args, **kw):
+def report(*args, **kw):
return the_coverage.report(*args, **kw)
-def annotate(*args, **kw):
+def annotate(*args, **kw):
return the_coverage.annotate(*args, **kw)
-def annotate_file(*args, **kw):
+def annotate_file(*args, **kw):
return the_coverage.annotate_file(*args, **kw)
# Save coverage data when Python exits. (The atexit module wasn't
@@ -1008,7 +1011,7 @@
def main():
the_coverage.command_line(sys.argv[1:])
-
+
# Command-line interface.
if __name__ == '__main__':
main()
@@ -1072,7 +1075,7 @@
# Thanks, Allen.
#
# 2005-12-02 NMB Call threading.settrace so that all threads are measured.
-# Thanks Martin Fuzzey. Add a file argument to report so that reports can be
+# Thanks Martin Fuzzey. Add a file argument to report so that reports can be
# captured to a different destination.
#
# 2005-12-03 NMB coverage.py can now measure itself.
--- a/tests/printenv.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/printenv.py Thu Jan 28 23:13:45 2010 -0600
@@ -48,7 +48,8 @@
out.write("%s hook: " % name)
for v in env:
- out.write("%s=%s " % (v, os.environ[v].replace(os.environ["HGTMP"], '$HGTMP')))
+ out.write("%s=%s " %
+ (v, os.environ[v].replace(os.environ["HGTMP"], '$HGTMP')))
out.write("\n")
out.close()
--- a/tests/printrepr.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/printrepr.py Thu Jan 28 23:13:45 2010 -0600
@@ -3,7 +3,7 @@
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
"""prints repr(sys.stdin) but preserves newlines in input"""
--- a/tests/readlink.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/readlink.py Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,8 @@
try:
print f, '->', os.readlink(f)
except OSError, err:
- if err.errno != errno.EINVAL: raise
+ if err.errno != errno.EINVAL:
+ raise
print f, 'not a symlink'
sys.exit(0)
--- a/tests/run-tests.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/run-tests.py Thu Jan 28 23:13:45 2010 -0600
@@ -5,7 +5,7 @@
# Copyright 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2, incorporated herein by reference.
+# GNU General Public License version 2 or any later version.
# Modifying this script is tricky because it has many modes:
# - serial (default) vs parallel (-jN, N > 1)
@@ -231,7 +231,7 @@
if last:
lines.append(last)
return lines
- lines.append(text[i:n+1])
+ lines.append(text[i:n + 1])
i = n + 1
def parsehghaveoutput(lines):
@@ -660,7 +660,8 @@
jobs = [[] for j in xrange(options.jobs)]
while tests:
for job in jobs:
- if not tests: break
+ if not tests:
+ break
job.append(tests.pop())
fps = {}
for j, job in enumerate(jobs):
--- a/tests/test-command-template Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-command-template Thu Jan 28 23:13:45 2010 -0600
@@ -195,4 +195,13 @@
EOF
hg -R latesttag tip
+echo '# test recursive showlist template (issue1989)'
+cat > style1989 <<EOF
+changeset = '{file_mods}{manifest}{extras}'
+file_mod = 'M|{author|person}\n'
+manifest = '{rev},{author}\n'
+extra = '{key}: {author}\n'
+EOF
+hg -R latesttag log -r tip --style=style1989
+
echo '# done'
--- a/tests/test-command-template.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-command-template.out Thu Jan 28 23:13:45 2010 -0600
@@ -1066,4 +1066,8 @@
0: null+1
# style path expansion (issue1948)
test 10:dee8f28249af
+# test recursive showlist template (issue1989)
+M|test
+10,test
+branch: test
# done
--- a/tests/test-convert-cvs Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-convert-cvs Thu Jan 28 23:13:45 2010 -0600
@@ -23,7 +23,7 @@
def cvschangesets(ui,repo,hooktype,changesets):
print "%s hook: %d changesets"%(hooktype,len(changesets))
EOF
-hookpath=$PWD
+hookpath=`pwd`
echo "[hooks]" >> $HGRCPATH
echo "cvslog=python:$hookpath/cvshooks.py:cvslog" >> $HGRCPATH
@@ -32,7 +32,7 @@
echo % create cvs repository
mkdir cvsrepo
cd cvsrepo
-CVSROOT=$PWD
+CVSROOT=`pwd`
export CVSROOT
CVS_OPTIONS=-f
export CVS_OPTIONS
--- a/tests/test-convert-p4-filetypes Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-convert-p4-filetypes Thu Jan 28 23:13:45 2010 -0600
@@ -6,7 +6,7 @@
echo "convert = " >> $HGRCPATH
echo % create p4 depot
-P4ROOT=$PWD/depot; export P4ROOT
+P4ROOT=`pwd`/depot; export P4ROOT
P4AUDIT=$P4ROOT/audit; export P4AUDIT
P4JOURNAL=$P4ROOT/journal; export P4JOURNAL
P4LOG=$P4ROOT/log; export P4LOG
--- a/tests/test-encode Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-encode Thu Jan 28 23:13:45 2010 -0600
@@ -4,11 +4,11 @@
cat > .hg/hgrc <<EOF
[encode]
-not.gz = tr a-z A-Z
+not.gz = tr [:lower:] [:upper:]
*.gz = gzip -d
[decode]
-not.gz = tr A-Z a-z
+not.gz = tr [:upper:] [:lower:]
*.gz = gzip
EOF
--- a/tests/test-gendoc Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-gendoc Thu Jan 28 23:13:45 2010 -0600
@@ -1,13 +1,13 @@
#!/bin/sh
"$TESTDIR/hghave" rst2html || exit 80
-RST2HTML=$(which rst2html 2> /dev/null || which rst2html.py)
+RST2HTML=`which rst2html 2> /dev/null || which rst2html.py`
HGENCODING=UTF-8
export HGENCODING
for PO in C $TESTDIR/../i18n/*.po; do
- LOCALE=$(basename $PO .po)
+ LOCALE=`basename $PO .po`
echo
echo "% extracting documentation from $LOCALE"
echo ".. -*- coding: utf-8 -*-" > gendoc-$LOCALE.txt
--- a/tests/test-hgrc Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-hgrc Thu Jan 28 23:13:45 2010 -0600
@@ -19,5 +19,9 @@
echo ' x = y' >> $HGRCPATH
hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|"
+python -c "print '[foo]\nbar = a\n b\n c \n de\n fg \nbaz = bif cb \n'" \
+ > $HGRCPATH
+hg showconfig foo
+
echo '%include /no-such-file' > $HGRCPATH
hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|"
--- a/tests/test-hgrc.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-hgrc.out Thu Jan 28 23:13:45 2010 -0600
@@ -7,4 +7,6 @@
bundle.mainreporoot=.../foobar
paths.default=.../foo%bar
hg: config error at $HGRCPATH:2: ' x = y'
+foo.bar=a\nb\nc\nde\nfg
+foo.baz=bif cb
hg: config error at $HGRCPATH:1: cannot include /no-such-file (No such file or directory)
--- a/tests/test-hgweb-auth.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-hgweb-auth.py Thu Jan 28 23:13:45 2010 -0600
@@ -16,7 +16,8 @@
return ui
def dumpdict(dict):
- return '{' + ', '.join(['%s: %s' % (k, dict[k]) for k in sorted(dict.iterkeys())]) + '}'
+ return '{' + ', '.join(['%s: %s' % (k, dict[k])
+ for k in sorted(dict.iterkeys())]) + '}'
def test(auth):
print 'CFG:', dumpdict(auth)
@@ -56,6 +57,8 @@
test({'x.prefix': 'example.org', 'x.schemes': 'http https'})
print '\n*** Test prefix matching\n'
-test({'x.prefix': 'http://example.org/foo', 'y.prefix': 'http://example.org/bar'})
-test({'x.prefix': 'http://example.org/foo', 'y.prefix': 'http://example.org/foo/bar'})
+test({'x.prefix': 'http://example.org/foo',
+ 'y.prefix': 'http://example.org/bar'})
+test({'x.prefix': 'http://example.org/foo',
+ 'y.prefix': 'http://example.org/foo/bar'})
test({'x.prefix': '*', 'y.prefix': 'https://example.org/bar'})
--- a/tests/test-hgweb-commands.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-hgweb-commands.out Thu Jan 28 23:13:45 2010 -0600
@@ -775,7 +775,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a class="list" href="/rev/_NODEID?style=gitweb" title="_NODEID"><b>_DESC</b></a>';
revlink += '</span> _TAGS';
-revlink += '<span class="info">_DATE ago, by _USER</span></li>';
+revlink += '<span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/tests/test-hgweb-empty.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-hgweb-empty.out Thu Jan 28 23:13:45 2010 -0600
@@ -235,7 +235,7 @@
var revlink = '<li style="_STYLE"><span class="desc">';
revlink += '<a href="/rev/_NODEID" title="_NODEID">_DESC</a>';
-revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
+revlink += '</span>_TAGS<span class="info">_DATE, by _USER</span></li>';
graph.vertex = function(x, y, color, parity, cur) {
--- a/tests/test-merge-tools Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-merge-tools Thu Jan 28 23:13:45 2010 -0600
@@ -83,7 +83,7 @@
domerge -r 2 --config merge-tools.true.executable=nonexistingmergetool
echo "# or true.executable with bogus path:"
-domerge -r 2 --config merge-tools.true.executable=/bin/nonexistingmergetool
+domerge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
echo "# but true.executable set to cat found in PATH works:"
echo "true.executable=cat" >> .hg/hgrc
@@ -103,7 +103,7 @@
domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
echo "# merge-patterns specifies executable with bogus path and gets warning:"
-domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/bin/nonexistingmergetool
+domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
echo
echo ui.merge overrules priority
--- a/tests/test-merge-tools.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-merge-tools.out Thu Jan 28 23:13:45 2010 -0600
@@ -116,7 +116,7 @@
false.whatever=
true.priority=1
# hg update -C 1
-# hg merge -r 2 --config merge-tools.true.executable=/bin/nonexistingmergetool
+# hg merge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
merging f
merging f failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
@@ -218,7 +218,7 @@
true.priority=1
true.executable=cat
# hg update -C 1
-# hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/bin/nonexistingmergetool
+# hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
couldn't find merge tool true specified for f
merging f
merging f failed!
--- a/tests/test-minirst.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-minirst.py Thu Jan 28 23:13:45 2010 -0600
@@ -15,10 +15,7 @@
A small indented paragraph.
It is followed by some lines
containing random whitespace.
-
-
-
-The third and final paragraph.
+ \n \n \nThe third and final paragraph.
"""
debugformat('paragraphs', paragraphs, 60)
--- a/tests/test-mq-git Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-mq-git Thu Jan 28 23:13:45 2010 -0600
@@ -76,4 +76,4 @@
hg cp a c
hg qrefresh -d '0 0'
cat .hg/patches/regular
-cd ..
\ No newline at end of file
+cd ..
--- a/tests/test-mq-qrefresh Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-mq-qrefresh Thu Jan 28 23:13:45 2010 -0600
@@ -166,4 +166,4 @@
hg mv a b
hg qrefresh
hg qdiff --nodates
-cd ..
\ No newline at end of file
+cd ..
--- a/tests/test-parse-date Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-parse-date Thu Jan 28 23:13:45 2010 -0600
@@ -84,4 +84,4 @@
hg log -d '< 02/01 ' --template '{date|date}\n'
hg log -d ' > 02/01 ' --template '{date|date}\n'
-hg log -d ' < 02/01 ' --template '{date|date}\n'
\ No newline at end of file
+hg log -d ' < 02/01 ' --template '{date|date}\n'
--- a/tests/test-patch-offset Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-patch-offset Thu Jan 28 23:13:45 2010 -0600
@@ -63,5 +63,5 @@
echo % compare imported changes against reference file
python ../writepatterns.py aref 34X 10A 1B 1a 9A 1C 10A 1B 10A 1D 10A 1B 1a 9A 1E 10A 1B 1a 9A
-diff -u aref a
+diff aref a
--- a/tests/test-simplemerge.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-simplemerge.py Thu Jan 28 23:13:45 2010 -0600
@@ -89,7 +89,8 @@
""")
-MERGED_RESULT = split_lines(""" The Way that can be told of is not the eternal Way;
+MERGED_RESULT = split_lines("""\
+ The Way that can be told of is not the eternal Way;
The name that can be named is not the eternal name.
The Nameless is the origin of Heaven and Earth;
The Named is the mother of all things.
@@ -125,7 +126,7 @@
[(0, 2,
0, 2,
0, 2),
- (2,2, 2,2, 2,2)])
+ (2, 2, 2, 2, 2, 2)])
self.assertEquals(list(m3.merge_regions()),
[('unchanged', 0, 2)])
@@ -141,8 +142,8 @@
# todo: should use a sentinal at end as from get_matching_blocks
# to match without zz
self.assertEquals(list(m3.find_sync_regions()),
- [(0,1, 2,3, 0,1),
- (1,1, 3,3, 1,1),])
+ [(0, 1, 2, 3, 0, 1),
+ (1, 1, 3, 3, 1, 1),])
self.assertEquals(list(m3.merge_regions()),
[('a', 0, 2),
@@ -159,7 +160,7 @@
# todo: should use a sentinal at end as from get_matching_blocks
# to match without zz
self.assertEquals(list(m3.find_sync_regions()),
- [(0,0, 2,2, 0,0)])
+ [(0, 0, 2, 2, 0, 0)])
self.assertEquals(list(m3.merge_regions()),
[('a', 0, 2)])
@@ -177,9 +178,9 @@
[(0, 1), (1, 2)])
self.assertEquals(list(m3.find_sync_regions()),
- [(0,1, 0,1, 0,1),
- (1,2, 2,3, 1,2),
- (2,2, 3,3, 2,2),])
+ [(0, 1, 0, 1, 0, 1),
+ (1, 2, 2, 3, 1, 2),
+ (2, 2, 3, 3, 2, 2),])
self.assertEquals(list(m3.merge_regions()),
[('unchanged', 0, 1),
@@ -253,14 +254,14 @@
[(0, 1), (1, 2)])
self.assertEquals(list(m3.find_sync_regions()),
- [(0,1, 0,1, 0,1),
- (1,2, 2,3, 2,3),
- (2,2, 3,3, 3,3),])
+ [(0, 1, 0, 1, 0, 1),
+ (1, 2, 2, 3, 2, 3),
+ (2, 2, 3, 3, 3, 3),])
self.assertEquals(list(m3.merge_regions()),
- [('unchanged', 0,1),
- ('conflict', 1,1, 1,2, 1,2),
- ('unchanged', 1,2)])
+ [('unchanged', 0, 1),
+ ('conflict', 1, 1, 1, 2, 1, 2),
+ ('unchanged', 1, 2)])
self.assertEquals(list(m3.merge_groups()),
[('unchanged', ['aaa\n']),
@@ -293,9 +294,9 @@
[(0, 1), (2, 3)])
self.assertEquals(list(m3.find_sync_regions()),
- [(0,1, 0,1, 0,1),
- (2,3, 2,3, 2,3),
- (3,3, 3,3, 3,3),])
+ [(0, 1, 0, 1, 0, 1),
+ (2, 3, 2, 3, 2, 3),
+ (3, 3, 3, 3, 3, 3),])
def test_replace_multi(self):
"""Replacement with regions of different size."""
@@ -308,9 +309,9 @@
self.assertEquals(list(m3.find_sync_regions()),
- [(0,1, 0,1, 0,1),
- (3,4, 4,5, 5,6),
- (4,4, 5,5, 6,6),])
+ [(0, 1, 0, 1, 0, 1),
+ (3, 4, 4, 5, 5, 6),
+ (4, 4, 5, 5, 6, 6)])
def test_merge_poem(self):
"""Test case from diff3 manual"""
--- a/tests/test-subrepo-svn Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-subrepo-svn Thu Jan 28 23:13:45 2010 -0600
@@ -19,13 +19,23 @@
echo % create subversion repo
SVNREPO="file://$escapedwd/svn-repo"
-WCROOT="$(pwd)/svn-wc"
+WCROOT="`pwd`/svn-wc"
svnadmin create svn-repo
svn co $SVNREPO svn-wc
cd svn-wc
-echo alpha > alpha
-svn add alpha
+mkdir src
+echo alpha > src/alpha
+svn add src
+mkdir externals
+echo other > externals/other
+svn add externals
svn ci -m 'Add alpha'
+svn up
+cat > extdef <<EOF
+externals -r1 $SVNREPO/externals
+EOF
+svn propset -F extdef svn:externals src
+svn ci -m 'Setting externals'
cd ..
echo % create hg repo
@@ -39,8 +49,8 @@
hg ci -Am0
echo % add first svn sub
-echo "s = [svn]$SVNREPO" >> .hgsub
-svn co --quiet $SVNREPO s
+echo "s = [svn]$SVNREPO/src" >> .hgsub
+svn co --quiet $SVNREPO/src s
hg add .hgsub
hg ci -m1
echo % debugsub
@@ -60,14 +70,32 @@
echo
echo % add a commit from svn
-cd "$WCROOT"
+cd "$WCROOT"/src
svn up
echo xyz >> alpha
+svn propset svn:mime-type 'text/xml' alpha
svn ci -m 'amend a from svn'
-cd ../sub/t
+cd ../../sub/t
+
echo % this commit from hg will fail
echo zzz >> s/alpha
hg ci -m 'amend alpha from hg'
+svn revert -q s/alpha
+
+echo % this commit fails because of meta changes
+svn propset svn:mime-type 'text/html' s/alpha
+hg ci -m 'amend alpha from hg'
+svn revert -q s/alpha
+
+echo % this commit fails because of externals changes
+echo zzz > s/externals/other
+hg ci -m 'amend externals from hg'
+svn revert -q s/externals/other
+
+echo % this commit fails because of externals meta changes
+svn propset svn:mime-type 'text/html' s/externals/other
+hg ci -m 'amend externals from hg'
+svn revert -q s/externals/other
echo
echo % clone
--- a/tests/test-subrepo-svn.out Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/test-subrepo-svn.out Thu Jan 28 23:13:45 2010 -0600
@@ -1,9 +1,20 @@
% create subversion repo
Checked out revision 0.
-A alpha
-Adding alpha
-Transmitting file data .
+A src
+A src/alpha
+A externals
+A externals/other
+Adding externals
+Adding externals/other
+Adding src
+Adding src/alpha
+Transmitting file data ..
Committed revision 1.
+At revision 1.
+property 'svn:externals' set on 'src'
+Sending src
+
+Committed revision 2.
% create hg repo
% first revision, no sub
adding a
@@ -11,38 +22,66 @@
committing subrepository s
% debugsub
path s
- source file:///root/svn-repo
- revision 1
+ source file:///root/svn-repo/src
+ revision 2
% change file in svn and hg, commit
committing subrepository s
Sending s/alpha
Transmitting file data .
-Committed revision 2.
-At revision 2.
+Committed revision 3.
+
+Fetching external item into 's/externals'
+External at revision 1.
+
+At revision 3.
path s
- source file:///root/svn-repo
- revision 2
+ source file:///root/svn-repo/src
+ revision 3
% should be empty despite change to s/a
% add a commit from svn
U alpha
-Updated to revision 2.
-Sending alpha
+
+Fetching external item into 'externals'
+A externals/other
+Updated external to revision 1.
+
+Updated to revision 3.
+property 'svn:mime-type' set on 'alpha'
+Sending src/alpha
Transmitting file data .
-Committed revision 3.
+Committed revision 4.
% this commit from hg will fail
committing subrepository s
abort: svn: Commit failed (details follow):
-svn: File '/alpha' is out of date
+svn: File '/src/alpha' is out of date
+% this commit fails because of meta changes
+property 'svn:mime-type' set on 's/alpha'
+committing subrepository s
+abort: svn: Commit failed (details follow):
+svn: File '/src/alpha' is out of date
+% this commit fails because of externals changes
+committing subrepository s
+abort: cannot commit svn externals
+% this commit fails because of externals meta changes
+property 'svn:mime-type' set on 's/externals/other'
+committing subrepository s
+abort: cannot commit svn externals
% clone
updating to branch default
A s/alpha
-Checked out revision 2.
+ U s
+
+Fetching external item into 's/externals'
+A s/externals/other
+Checked out external at revision 1.
+
+Checked out revision 3.
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% debugsub in clone
path s
- source file:///root/svn-repo
- revision 2
+ source file:///root/svn-repo/src
+ revision 3
--- a/tests/tinyproxy.py Mon Jan 18 19:57:36 2010 +0100
+++ b/tests/tinyproxy.py Thu Jan 28 23:13:45 2010 -0600
@@ -25,14 +25,15 @@
(ip, port) = self.client_address
if hasattr(self, 'allowed_clients') and ip not in self.allowed_clients:
self.raw_requestline = self.rfile.readline()
- if self.parse_request(): self.send_error(403)
+ if self.parse_request():
+ self.send_error(403)
else:
self.__base_handle()
def _connect_to(self, netloc, soc):
i = netloc.find(':')
if i >= 0:
- host_port = netloc[:i], int(netloc[i+1:])
+ host_port = netloc[:i], int(netloc[i + 1:])
else:
host_port = netloc, 80
print "\t" "connect to %s:%d" % host_port
@@ -91,7 +92,8 @@
while 1:
count += 1
(ins, _, exs) = select.select(iw, ow, iw, 3)
- if exs: break
+ if exs:
+ break
if ins:
for i in ins:
if i is soc:
@@ -104,12 +106,13 @@
count = 0
else:
print "\t" "idle", count
- if count == max_idling: break
+ if count == max_idling:
+ break
do_HEAD = do_GET
do_POST = do_GET
do_PUT = do_GET
- do_DELETE=do_GET
+ do_DELETE = do_GET
class ThreadingHTTPServer (SocketServer.ThreadingMixIn,
BaseHTTPServer.HTTPServer): pass