diff options
42 files changed, 987 insertions, 538 deletions
diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff/values new file mode 100644 index 0000000..b8b7b4f --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Mon, 02 Feb 2009 00:39:43 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/values new file mode 100644 index 0000000..f960085 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/04edb940-06dd-4ded-8697-156d54a1d875/values @@ -0,0 +1,22 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Assignee default selection is broken if two people have the same name but + different emails. + + +time: Mon, 02 Feb 2009 00:38:49 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0a234f51-2fdf-4001-a04f-b7e02c2fa47b/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0a234f51-2fdf-4001-a04f-b7e02c2fa47b/values new file mode 100644 index 0000000..143428a --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0a234f51-2fdf-4001-a04f-b7e02c2fa47b/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Humanize empty result pages. + + +time: Sat, 31 Jan 2009 03:03:52 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0be47243-c172-4de9-b71b-d5dea60f91d5/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0be47243-c172-4de9-b71b-d5dea60f91d5/values new file mode 100644 index 0000000..2d571b9 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/0be47243-c172-4de9-b71b-d5dea60f91d5/values @@ -0,0 +1,22 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Fix the null creation date bug. See bug ee6 in the BE repo for an example + that breaks things. + + +time: Sun, 01 Feb 2009 21:26:49 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/171819aa-c092-4ddf-ace3-797635fa2572/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/171819aa-c092-4ddf-ace3-797635fa2572/values new file mode 100644 index 0000000..44de8f5 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/171819aa-c092-4ddf-ace3-797635fa2572/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: fatal + + +status: closed + + +summary: CFBE. Get a basic template mocked up for the list page. Go further from there. + + +time: Fri, 30 Jan 2009 03:16:26 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/24555ea1-76b5-40a8-918f-115a28f5f36a/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/24555ea1-76b5-40a8-918f-115a28f5f36a/values new file mode 100644 index 0000000..d6d23c2 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/24555ea1-76b5-40a8-918f-115a28f5f36a/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: critical + + +status: wontfix + + +summary: CFBE. Fix the extra severity problem. + + +time: Thu, 25 Jun 2009 21:39:38 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/312fb152-0155-45c1-9d4d-f49dd5816fbb/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/312fb152-0155-45c1-9d4d-f49dd5816fbb/values new file mode 100644 index 0000000..a4beb67 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/312fb152-0155-45c1-9d4d-f49dd5816fbb/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: serious + + +status: fixed + + +summary: CFBE. Revamp the layout/design. + + +time: Thu, 25 Jun 2009 21:38:38 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35b962a0-a64a-4b5c-82c5-ea740e8a6322/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35b962a0-a64a-4b5c-82c5-ea740e8a6322/values new file mode 100644 index 0000000..d492883 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/35b962a0-a64a-4b5c-82c5-ea740e8a6322/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Document the code for the alpha release. + + +time: Sat, 31 Jan 2009 05:17:34 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/42716dc2-6201-4537-b5fd-e1280812a53d/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/42716dc2-6201-4537-b5fd-e1280812a53d/values new file mode 100644 index 0000000..17a19a8 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/42716dc2-6201-4537-b5fd-e1280812a53d/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Document the packaging and install. + + +time: Sat, 31 Jan 2009 05:17:45 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4286c0f8-5703-4bc1-b256-414dc408f067/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4286c0f8-5703-4bc1-b256-414dc408f067/values new file mode 100644 index 0000000..88f1a69 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/4286c0f8-5703-4bc1-b256-414dc408f067/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Get the layout rhythm right. + + +time: Sat, 31 Jan 2009 00:14:34 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/528b2e84-a944-4628-a18f-cc1def1c7e16/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/528b2e84-a944-4628-a18f-cc1def1c7e16/values new file mode 100644 index 0000000..656641a --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/528b2e84-a944-4628-a18f-cc1def1c7e16/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement viewing of a single bug (with comments). + + +time: Sat, 31 Jan 2009 02:59:28 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52a15454-196c-4990-b55d-be2e37d575c3/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52a15454-196c-4990-b55d-be2e37d575c3/values new file mode 100644 index 0000000..8fb6ef3 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/52a15454-196c-4990-b55d-be2e37d575c3/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Fix the overflow problem in the comments. + + +time: Sat, 07 Feb 2009 21:32:51 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/comments/88d54d29-7312-4bb3-bc50-1970bdb2bb0e/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/comments/88d54d29-7312-4bb3-bc50-1970bdb2bb0e/values new file mode 100644 index 0000000..f8bbdae --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/comments/88d54d29-7312-4bb3-bc50-1970bdb2bb0e/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sun, 01 Feb 2009 22:49:29 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/values new file mode 100644 index 0000000..bf3f92e --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/545311df-8c88-4504-9f83-11d7c5d8aa50/values @@ -0,0 +1,22 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement bug updating (not comments). Check on the whitespace of the summary + field while you're at it. + + +time: Sat, 31 Jan 2009 02:59:54 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/55e76f74-37fb-4254-8498-54b703ba54f6/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/55e76f74-37fb-4254-8498-54b703ba54f6/values new file mode 100644 index 0000000..d1c3145 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/55e76f74-37fb-4254-8498-54b703ba54f6/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Fix the footer width. + + +time: Sat, 31 Jan 2009 03:01:09 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/615ad650-9fb9-4026-9779-58d42b4e528e/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/615ad650-9fb9-4026-9779-58d42b4e528e/values new file mode 100644 index 0000000..b39d6ec --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/615ad650-9fb9-4026-9779-58d42b4e528e/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Figure out how to best fix the column widths. + + +time: Sat, 31 Jan 2009 03:07:32 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/63619cf7-89eb-4e64-91e9-b8a73d2a6c72/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/63619cf7-89eb-4e64-91e9-b8a73d2a6c72/values new file mode 100644 index 0000000..245c393 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/63619cf7-89eb-4e64-91e9-b8a73d2a6c72/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Implement sorting. + + +time: Sat, 31 Jan 2009 02:59:11 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/700cd3f1-70b6-4887-89a2-c1d039732add/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/700cd3f1-70b6-4887-89a2-c1d039732add/values new file mode 100644 index 0000000..a6f24ea --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/700cd3f1-70b6-4887-89a2-c1d039732add/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Implement pagination. + + +time: Sat, 31 Jan 2009 03:00:35 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/76a6140e-0800-453c-9720-29cc161663d1/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/76a6140e-0800-453c-9720-29cc161663d1/values new file mode 100644 index 0000000..3afa6b4 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/76a6140e-0800-453c-9720-29cc161663d1/values @@ -0,0 +1,28 @@ +extra_strings: +- BLOCKED-BY:04edb940-06dd-4ded-8697-156d54a1d875 +- BLOCKED-BY:0a234f51-2fdf-4001-a04f-b7e02c2fa47b +- BLOCKED-BY:0be47243-c172-4de9-b71b-d5dea60f91d5 +- BLOCKED-BY:24555ea1-76b5-40a8-918f-115a28f5f36a +- BLOCKED-BY:312fb152-0155-45c1-9d4d-f49dd5816fbb +- BLOCKED-BY:52a15454-196c-4990-b55d-be2e37d575c3 +- BLOCKED-BY:615ad650-9fb9-4026-9779-58d42b4e528e +- BLOCKED-BY:63619cf7-89eb-4e64-91e9-b8a73d2a6c72 +- BLOCKED-BY:700cd3f1-70b6-4887-89a2-c1d039732add +- BLOCKED-BY:81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9 +- BLOCKED-BY:866cba32-4347-4f51-9b1d-69454638ca78 +- BLOCKED-BY:9bc14860-b2bb-4442-85ea-0b8e7083457b +- BLOCKED-BY:cfb52b6c-d1a6-4018-a255-27cc1c878193 +- BLOCKED-BY:dd7aa57c-f184-495a-8520-2676c1066fb4 + + +severity: target + + +status: open + + +summary: CFBE. beta + + +time: Tue, 22 Jun 2010 18:12:21 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9/values new file mode 100644 index 0000000..c37200d --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/81f69fbd-1ca5-4f89-a6e1-79ea1e6bf4d9/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. The CherryPy server seems to drop connections randomly. + + +time: Mon, 02 Feb 2009 01:12:37 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/comments/738f9826-57b6-43d6-a0cb-0dfeeb185b96/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/comments/738f9826-57b6-43d6-a0cb-0dfeeb185b96/values new file mode 100644 index 0000000..85c1c15 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/comments/738f9826-57b6-43d6-a0cb-0dfeeb185b96/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sat, 07 Feb 2009 21:32:19 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/values new file mode 100644 index 0000000..ab0ddfc --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/866cba32-4347-4f51-9b1d-69454638ca78/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: serious + + +status: open + + +summary: CFBE. Implement adding new assignees/targets. + + +time: Sat, 07 Feb 2009 21:31:26 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/870d5dbe-6449-4ec4-ae6f-e84bebadbce0/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/870d5dbe-6449-4ec4-ae6f-e84bebadbce0/values new file mode 100644 index 0000000..36b5e48 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/870d5dbe-6449-4ec4-ae6f-e84bebadbce0/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Refine graphic design for the alpha version. + + +time: Sat, 31 Jan 2009 05:17:08 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8cb9045c-7266-4c40-9a76-65f3c5d5bb60/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8cb9045c-7266-4c40-9a76-65f3c5d5bb60/values new file mode 100644 index 0000000..e869983 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/8cb9045c-7266-4c40-9a76-65f3c5d5bb60/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Refactor the web interface into its own file. + + +time: Sat, 07 Feb 2009 17:27:48 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/984472f6-98f5-48fc-b521-70a1e5f60614/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/984472f6-98f5-48fc-b521-70a1e5f60614/values new file mode 100644 index 0000000..fad8cec --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/984472f6-98f5-48fc-b521-70a1e5f60614/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement the status filters. + + +time: Sat, 31 Jan 2009 00:22:40 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9bc14860-b2bb-4442-85ea-0b8e7083457b/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9bc14860-b2bb-4442-85ea-0b8e7083457b/values new file mode 100644 index 0000000..efebd37 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/9bc14860-b2bb-4442-85ea-0b8e7083457b/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Create a project page. + + +time: Sat, 31 Jan 2009 05:18:56 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ac72991a-72e5-4b14-b53c-0fa38d0f31bb/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ac72991a-72e5-4b14-b53c-0fa38d0f31bb/values new file mode 100644 index 0000000..e780bef --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/ac72991a-72e5-4b14-b53c-0fa38d0f31bb/values @@ -0,0 +1,17 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +severity: minor + + +status: open + + +summary: CFBE. The bug editing/comment forms break the rhythm. + + +time: Sun, 01 Feb 2009 23:59:17 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bef126a0-27be-402f-84fa-85f6342c97c0/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bef126a0-27be-402f-84fa-85f6342c97c0/values new file mode 100644 index 0000000..b81ebf7 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/bef126a0-27be-402f-84fa-85f6342c97c0/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement bug creation. + + +time: Sat, 31 Jan 2009 02:59:35 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/values new file mode 100644 index 0000000..9336a72 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/c7251ff9-24e4-402d-8d4e-605a78b9a91d/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: critical + + +status: assigned + + +summary: CFBE. Document the installation. + + +time: Thu, 25 Jun 2009 21:41:02 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cfb52b6c-d1a6-4018-a255-27cc1c878193/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cfb52b6c-d1a6-4018-a255-27cc1c878193/values new file mode 100644 index 0000000..3d9b782 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/cfb52b6c-d1a6-4018-a255-27cc1c878193/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. Change the write operations to be inline/AJAJ operations. + + +time: Sun, 01 Feb 2009 21:15:35 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4/values new file mode 100644 index 0000000..e003bfa --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Reset the state of the values when choosing "Discard Changes." + + +time: Sun, 01 Feb 2009 22:55:13 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/comments/24aab4bf-b525-48d6-9666-626e3ddcecf7/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/comments/24aab4bf-b525-48d6-9666-626e3ddcecf7/values new file mode 100644 index 0000000..693ea50 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/comments/24aab4bf-b525-48d6-9666-626e3ddcecf7/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sat, 07 Feb 2009 18:36:56 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/values new file mode 100644 index 0000000..4a2ea99 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/dd7aa57c-f184-495a-8520-2676c1066fb4/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:76a6140e-0800-453c-9720-29cc161663d1 + + +severity: minor + + +status: open + + +summary: CFBE. The external pane sometimes loads in the wrong place. + + +time: Mon, 02 Feb 2009 01:11:47 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d/values new file mode 100644 index 0000000..a1457c9 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement the target filters. + + +time: Sat, 31 Jan 2009 02:58:44 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e22a9048-9a97-41b1-91a2-d4178c674b37/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e22a9048-9a97-41b1-91a2-d4178c674b37/values new file mode 100644 index 0000000..29ee806 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e22a9048-9a97-41b1-91a2-d4178c674b37/values @@ -0,0 +1,17 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +severity: minor + + +status: unconfirmed + + +summary: CFBE. Think about authentication. + + +time: Sat, 31 Jan 2009 03:02:19 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e23d7982-7e32-4c78-b62e-83ecc42b4cd7/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e23d7982-7e32-4c78-b62e-83ecc42b4cd7/values new file mode 100644 index 0000000..9a3f4b4 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e23d7982-7e32-4c78-b62e-83ecc42b4cd7/values @@ -0,0 +1,30 @@ +extra_strings: +- BLOCKED-BY:171819aa-c092-4ddf-ace3-797635fa2572 +- BLOCKED-BY:35b962a0-a64a-4b5c-82c5-ea740e8a6322 +- BLOCKED-BY:42716dc2-6201-4537-b5fd-e1280812a53d +- BLOCKED-BY:4286c0f8-5703-4bc1-b256-414dc408f067 +- BLOCKED-BY:528b2e84-a944-4628-a18f-cc1def1c7e16 +- BLOCKED-BY:545311df-8c88-4504-9f83-11d7c5d8aa50 +- BLOCKED-BY:55e76f74-37fb-4254-8498-54b703ba54f6 +- BLOCKED-BY:870d5dbe-6449-4ec4-ae6f-e84bebadbce0 +- BLOCKED-BY:8cb9045c-7266-4c40-9a76-65f3c5d5bb60 +- BLOCKED-BY:984472f6-98f5-48fc-b521-70a1e5f60614 +- BLOCKED-BY:bef126a0-27be-402f-84fa-85f6342c97c0 +- BLOCKED-BY:c7251ff9-24e4-402d-8d4e-605a78b9a91d +- BLOCKED-BY:d63d0bdd-e025-4f7c-9fcf-47a71de6d4d4 +- BLOCKED-BY:decc6e78-a3db-4cd3-ad23-2bf8ed77cb0d +- BLOCKED-BY:e645d562-6f84-4df2-b8ee-86ef42546c16 +- BLOCKED-BY:fd96c69d-6f78-4c0c-af6e-e01e9b8516d3 + + +severity: target + + +status: open + + +summary: CFBE. alpha + + +time: Tue, 22 Jun 2010 18:12:20 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/aea21508-69c2-4d6b-ada1-4fbadac14c56/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/aea21508-69c2-4d6b-ada1-4fbadac14c56/values new file mode 100644 index 0000000..afc0e31 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/aea21508-69c2-4d6b-ada1-4fbadac14c56/values @@ -0,0 +1,11 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sat, 31 Jan 2009 06:31:12 +0000 + + +In-reply-to: d5ffa1c4-f435-4a9a-99f3-2a7bc3072051 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/d5ffa1c4-f435-4a9a-99f3-2a7bc3072051/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/d5ffa1c4-f435-4a9a-99f3-2a7bc3072051/values new file mode 100644 index 0000000..2b41cc9 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/d5ffa1c4-f435-4a9a-99f3-2a7bc3072051/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sat, 31 Jan 2009 06:00:40 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9/values new file mode 100644 index 0000000..ae96a58 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/comments/f1fd8249-ded3-4e3c-a6ef-967d0a0edcd9/values @@ -0,0 +1,8 @@ +Author: Steve Losh <steve@stevelosh.com> + + +Content-type: text/plain + + +Date: Sat, 31 Jan 2009 06:48:21 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/values new file mode 100644 index 0000000..73ed336 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/e645d562-6f84-4df2-b8ee-86ef42546c16/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Package everything into something easy to download and use. + + +time: Fri, 30 Jan 2009 03:19:19 +0000 + diff --git a/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/fd96c69d-6f78-4c0c-af6e-e01e9b8516d3/values b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/fd96c69d-6f78-4c0c-af6e-e01e9b8516d3/values new file mode 100644 index 0000000..3cdfc63 --- /dev/null +++ b/.be/bea86499-824e-4e77-b085-2d581fa9ccab/bugs/fd96c69d-6f78-4c0c-af6e-e01e9b8516d3/values @@ -0,0 +1,21 @@ +assigned: Steve Losh <steve@stevelosh.com> + + +creator: Steve Losh <steve@stevelosh.com> + + +extra_strings: +- BLOCKS:e23d7982-7e32-4c78-b62e-83ecc42b4cd7 + + +severity: minor + + +status: closed + + +summary: CFBE. Implement adding comments. + + +time: Sat, 31 Jan 2009 03:00:08 +0000 + diff --git a/update_copyright.py b/update_copyright.py index a600eac..2490ba9 100755 --- a/update_copyright.py +++ b/update_copyright.py @@ -1,352 +1,79 @@ #!/usr/bin/python # -# Copyright (C) 2009-2010 W. Trevor King <wking@drexel.edu> +# Copyright (C) 2009 W. Trevor King <wking@drexel.edu> # -# This file is part of Bugs Everywhere. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# Bugs Everywhere is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 2 of the License, or (at your -# option) any later version. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# Bugs Everywhere is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Bugs Everywhere. If not, see <http://www.gnu.org/licenses/>. - -"""Automatically update copyright boilerplate. - -This script is adapted from one written for `Bugs Everywhere`_. and -later modified for `Hooke`_ before returning to `Bugs Everywhere`_. - -.. _Bugs Everywhere: http://bugseverywhere.org/ -.. _Hooke: http://code.google.com/p/hooke/ -""" +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import difflib -import email.utils -import os import os.path import re import sys import time +import os +import sys +import select +from threading import Thread -PROJECT_INFO = { - 'project': 'Bugs Everywhere', - 'vcs': 'Git', - } - -# Break "copyright" into "copy" and "right" to avoid matching the -# REGEXP. -COPY_RIGHT_TEXT=""" -This file is part of %(project)s. - -%(project)s is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation, either version 2 of the License, or (at your -option) any later version. - -%(project)s is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with %(project)s. If not, see <http://www.gnu.org/licenses/>. -""".strip() - -COPY_RIGHT_TAG='-xyz-COPY' + '-RIGHT-zyx-' # unlikely to occur in the wild :p - -# Convert author names to canonical forms. -# ALIASES[<canonical name>] = <list of aliases> -# for example, -# ALIASES = { -# 'John Doe <jdoe@a.com>': -# ['John Doe', 'jdoe', 'J. Doe <j@doe.net>'], -# } -# Git-based projects are encouraged to use .mailmap instead of -# ALIASES. See git-shortlog(1) for details. -ALIASES = { - 'Aaron Bentley <abentley@panoramicfeedback.com>': - ['Aaron Bentley <aaron.bentley@utoronto.ca>'], - 'Panometrics, Inc.': - ['Aaron Bentley and Panometrics, Inc.'], - 'Ben Finney <benf@cybersource.com.au>': - ['Ben Finney <ben+python@benfinney.id.au>', - 'John Doe <jdoe@example.com>'], - 'Chris Ball <cjb@laptop.org>': - ['Chris Ball <cjb@thunk.printf.net>'], - 'Gianluca Montecchi <gian@grys.it>': - ['gian <gian@li82-39>', - 'gianluca <gian@galactica>'], - 'W. Trevor King <wking@drexel.edu>': - ['wking <wking@mjolnir>', - 'wking <wking@thialfi>'], - None: - ['j^ <j@oil21.org>'], - } - -# List of paths that should not be scanned for copyright updates. -# IGNORED_PATHS = ['./.git/'] -IGNORED_PATHS = ['./.be/', './.git/', './build/', './doc/.build/'] -# List of files that should not be scanned for copyright updates. -# IGNORED_FILES = ['COPYING'] -IGNORED_FILES = ['COPYING', 'catmutt'] - -# Work around missing author holes in the VCS history. -# AUTHOR_HACKS[<path tuple>] = [<missing authors] -# for example, if John Doe contributed to module.py but wasn't listed -# in the VCS history of that file: -# AUTHOR_HACKS = { -# ('path', 'to', 'module.py'):['John Doe'], -# } -AUTHOR_HACKS = {} - -# Work around missing year holes in the VCS history. -# YEAR_HACKS[<path tuple>] = <original year> -# for example, if module.py was published in 2008 but the VCS history -# only goes back to 2010: -# YEAR_HACKS = { -# ('path', 'to', 'module.py'):2008, -# } -YEAR_HACKS = {} - -# Helpers for VCS-specific commands - -def splitpath(path): - """Recursively split a path into elements. - - Examples - -------- - - >>> splitpath(os.path.join('a', 'b', 'c')) - ('a', 'b', 'c') - >>> splitpath(os.path.join('.', 'a', 'b', 'c')) - ('a', 'b', 'c') - """ - path = os.path.normpath(path) - elements = [] - while True: - dirname,basename = os.path.split(path) - elements.insert(0,basename) - if dirname in ['', '.']: - break - path = dirname - return tuple(elements) - -# VCS-specific commands - -if PROJECT_INFO['vcs'] == 'Git': - - import subprocess - - _MSWINDOWS = sys.platform == 'win32' - _POSIX = not _MSWINDOWS - - def invoke(args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, expect=(0,)): - """ - expect should be a tuple of allowed exit codes. - """ - try : - if _POSIX: - q = subprocess.Popen(args, stdin=subprocess.PIPE, - stdout=stdout, stderr=stderr) - else: - assert _MSWINDOWS == True, 'invalid platform' - # win32 don't have os.execvp() so run the command in a shell - q = subprocess.Popen(args, stdin=subprocess.PIPE, - stdout=stdout, stderr=stderr, shell=True) - except OSError, e: - raise ValueError([args, e]) - stdout,stderr = q.communicate(input=stdin) - status = q.wait() - if status not in expect: - raise ValueError([args, status, stdout, stderr]) - return status, stdout, stderr - - def git_cmd(*args): - status,stdout,stderr = invoke(['git'] + list(args)) - return stdout.rstrip('\n') - - version = git_cmd('--version').split(' ')[-1] - if version.startswith('1.5.'): - # Author name <author email> - author_format = '--pretty=format:%an <%ae>' - year_format = ['--pretty=format:%ai'] # Author date - # YYYY-MM-DD HH:MM:SS Z - # Earlier versions of Git don't seem to recognize --date=short - else: - author_format = '--pretty=format:%aN <%aE>' - year_format = ['--pretty=format:%ad', # Author date - '--date=short'] # YYYY-MM-DD - - def original_year(filename, year_hacks=YEAR_HACKS): - output = git_cmd(*(['log', '--follow'] - + year_format - + [filename])) - if version.startswith('1.5.'): - output = '\n'.join([x.split()[0] for x in output.splitlines()]) - years = [int(line.split('-', 1)[0]) for line in output.splitlines()] - if splitpath(filename) in year_hacks: - years.append(year_hacks[splitpath(filename)]) - years.sort() - return years[0] - - def authors(filename, author_hacks=AUTHOR_HACKS): - output = git_cmd('log', '--follow', author_format, - filename) - ret = list(set(output.splitlines())) - if splitpath(filename) in author_hacks: - ret.extend(author_hacks[splitpath(filename)]) - return ret - - def authors_list(author_hacks=AUTHOR_HACKS): - output = git_cmd('log', author_format) - ret = list(set(output.splitlines())) - for path,authors in author_hacks.items(): - ret.extend(authors) - return ret - - def is_versioned(filename): - output = git_cmd('log', '--follow', filename) - if len(output) == 0: - return False - return True - -elif PROJECT_INFO['vcs'] == 'Mercurial': - - import StringIO - import mercurial - import mercurial.dispatch - - def mercurial_cmd(*args): - cwd = os.getcwd() - stdout = sys.stdout - stderr = sys.stderr - tmp_stdout = StringIO.StringIO() - tmp_stderr = StringIO.StringIO() - sys.stdout = tmp_stdout - sys.stderr = tmp_stderr - try: - mercurial.dispatch.dispatch(list(args)) - finally: - os.chdir(cwd) - sys.stdout = stdout - sys.stderr = stderr - return (tmp_stdout.getvalue().rstrip('\n'), - tmp_stderr.getvalue().rstrip('\n')) - - def original_year(filename, year_hacks=YEAR_HACKS): - # shortdate filter: YEAR-MONTH-DAY - output,error = mercurial_cmd('log', '--follow', - '--template', '{date|shortdate}\n', - filename) - years = [int(line.split('-', 1)[0]) for line in output.splitlines()] - if splitpath(filename) in year_hacks: - years.append(year_hacks[splitpath(filename)]) - years.sort() - return years[0] - - def authors(filename, author_hacks=AUTHOR_HACKS): - output,error = mercurial_cmd('log', '--follow', - '--template', '{author}\n', - filename) - ret = list(set(output.splitlines())) - if splitpath(filename) in author_hacks: - ret.extend(author_hacks[splitpath(filename)]) - return ret - - def authors_list(author_hacks=AUTHOR_HACKS): - output,error = mercurial_cmd('log', '--template', '{author}\n') - ret = list(set(output.splitlines())) - for path,authors in author_hacks.items(): - ret.extend(authors) - return ret - - def is_versioned(filename): - output,error = mercurial_cmd('log', '--follow', filename) - if len(error) > 0: - return False - return True - -elif PROJECT_INFO['vcs'] == 'Bazaar': - - import StringIO - import bzrlib - import bzrlib.builtins - import bzrlib.log - - class LogFormatter (bzrlib.log.LogFormatter): - supports_merge_revisions = True - preferred_levels = 0 - supports_deta = False - supports_tags = False - supports_diff = False - - def log_revision(self, revision): - raise NotImplementedError - - class YearLogFormatter (LogFormatter): - def log_revision(self, revision): - self.to_file.write( - time.strftime('%Y', time.gmtime(revision.rev.timestamp)) - +'\n') - - class AuthorLogFormatter (LogFormatter): - def log_revision(self, revision): - authors = revision.rev.get_apparent_authors() - self.to_file.write('\n'.join(authors)+'\n') - - def original_year(filename, year_hacks=YEAR_HACKS): - cmd = bzrlib.builtins.cmd_log() - cmd.outf = StringIO.StringIO() - cmd.run(file_list=[filename], log_format=YearLogFormatter, levels=0) - years = [int(year) for year in set(cmd.outf.getvalue().splitlines())] - if splitpath(filename) in year_hacks: - years.append(year_hacks[splitpath(filename)]) - years.sort() - return years[0] - - def authors(filename, author_hacks=AUTHOR_HACKS): - cmd = bzrlib.builtins.cmd_log() - cmd.outf = StringIO.StringIO() - cmd.run(file_list=[filename], log_format=AuthorLogFormatter, levels=0) - ret = list(set(cmd.outf.getvalue().splitlines())) - if splitpath(filename) in author_hacks: - ret.extend(author_hacks[splitpath(filename)]) - return ret - - def authors_list(author_hacks=AUTHOR_HACKS): - cmd = bzrlib.builtins.cmd_log() - cmd.outf = StringIO.StringIO() - cmd.run(log_format=AuthorLogFormatter, levels=0) - output = cmd.outf.getvalue() - ret = list(set(cmd.outf.getvalue().splitlines())) - for path,authors in author_hacks.items(): - ret.extend(authors) - return ret - - def is_versioned(filename): - cmd = bzrlib.builtins.cmd_log() - cmd.outf = StringIO.StringIO() - cmd.run(file_list=[filename]) - return True - -else: - raise NotImplementedError('Unrecognized VCS: %(vcs)s' % PROJECT_INFO) +from libbe.util.subproc import Pipe -# General utility commands +COPYRIGHT_TEXT="""# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.""" + +COPYRIGHT_TAG='-xyz-COPYRIGHT-zyx-' # unlikely to occur in the wild :p + +ALIASES = [ + ['Ben Finney <benf@cybersource.com.au>', + 'Ben Finney <ben+python@benfinney.id.au>', + 'John Doe <jdoe@example.com>'], + ['Chris Ball <cjb@laptop.org>', + 'Chris Ball <cjb@thunk.printf.net>'], + ['Gianluca Montecchi <gian@grys.it>', + 'gian <gian@li82-39>', + 'gianluca <gian@galactica>'], + ['W. Trevor King <wking@drexel.edu>', + 'wking <wking@mjolnir>'], + [None, + 'j^ <j@oil21.org>'], + ] +COPYRIGHT_ALIASES = [ + ['Aaron Bentley and Panometrics, Inc.', + 'Aaron Bentley <abentley@panoramicfeedback.com>'], + ] +EXCLUDES = [ + ['Aaron Bentley and Panometrics, Inc.', + 'Aaron Bentley <aaron.bentley@utoronto.ca>',] + ] + + +IGNORED_PATHS = ['./.be/', './.bzr/', './build/'] +IGNORED_FILES = ['COPYING', 'update_copyright.py', 'catmutt'] def _strip_email(*args): - """Remove email addresses from a series of names. - - Examples - -------- - + """ >>> _strip_email('J Doe <jdoe@a.com>') ['J Doe'] >>> _strip_email('J Doe <jdoe@a.com>', 'JJJ Smith <jjjs@a.com>') @@ -356,109 +83,127 @@ def _strip_email(*args): for i,arg in enumerate(args): if arg == None: continue - author,addr = email.utils.parseaddr(arg) - args[i] = author + index = arg.find('<') + if index > 0: + args[i] = arg[:index].rstrip() return args -def _reverse_aliases(aliases): - """Reverse an `aliases` dict. - - Input: key: canonical name, value: list of aliases - Output: key: alias, value: canonical name - - Examples - -------- - - >>> aliases = { - ... 'J Doe <jdoe@a.com>':['Johnny <jdoe@b.edu>', 'J'], - ... 'JJJ Smith <jjjs@a.com>':['Jingly <jjjs@b.edu>'], - ... None:['Anonymous <a@a.com>'], - ... } - >>> r = _reverse_aliases(aliases) - >>> for item in sorted(r.items()): - ... print item - ('Anonymous <a@a.com>', None) - ('J', 'J Doe <jdoe@a.com>') - ('Jingly <jjjs@b.edu>', 'JJJ Smith <jjjs@a.com>') - ('Johnny <jdoe@b.edu>', 'J Doe <jdoe@a.com>') +def _replace_aliases(authors, with_email=True, aliases=None, + excludes=None): """ - output = {} - for canonical_name,_aliases in aliases.items(): - for alias in _aliases: - output[alias] = canonical_name - return output - -def _replace_aliases(authors, with_email=True, aliases=None): - """Consolidate and sort `authors`. - - Make the replacements listed in the `aliases` dict (key: canonical - name, value: list of aliases). If `aliases` is ``None``, default - to ``ALIASES``. - - >>> aliases = { - ... 'J Doe <jdoe@a.com>':['Johnny <jdoe@b.edu>'], - ... 'JJJ Smith <jjjs@a.com>':['Jingly <jjjs@b.edu>'], - ... None:['Anonymous <a@a.com>'], - ... } + >>> aliases = [['J Doe and C, Inc.', 'J Doe <jdoe@c.com>'], + ... ['J Doe <jdoe@a.com>', 'Johnny <jdoe@b.edu>'], + ... ['JJJ Smith <jjjs@a.com>', 'Jingly <jjjs@b.edu>'], + ... [None, 'Anonymous <a@a.com>']] + >>> excludes = [['J Doe and C, Inc.', 'J Doe <jdoe@a.com>']] >>> _replace_aliases(['JJJ Smith <jjjs@a.com>', 'Johnny <jdoe@b.edu>', ... 'Jingly <jjjs@b.edu>', 'Anonymous <a@a.com>'], - ... with_email=True, aliases=aliases) + ... with_email=True, aliases=aliases, excludes=excludes) ['J Doe <jdoe@a.com>', 'JJJ Smith <jjjs@a.com>'] >>> _replace_aliases(['JJJ Smith', 'Johnny', 'Jingly', 'Anonymous'], - ... with_email=False, aliases=aliases) + ... with_email=False, aliases=aliases, excludes=excludes) ['J Doe', 'JJJ Smith'] >>> _replace_aliases(['JJJ Smith <jjjs@a.com>', 'Johnny <jdoe@b.edu>', - ... 'Jingly <jjjs@b.edu>', 'J Doe <jdoe@a.com>'], - ... with_email=True, aliases=aliases) - ['J Doe <jdoe@a.com>', 'JJJ Smith <jjjs@a.com>'] + ... 'Jingly <jjjs@b.edu>', 'J Doe <jdoe@c.com>'], + ... with_email=True, aliases=aliases, excludes=excludes) + ['J Doe and C, Inc.', 'JJJ Smith <jjjs@a.com>'] """ if aliases == None: aliases = ALIASES + if excludes == None: + excludes = EXCLUDES if with_email == False: - aliases = dict([(_strip_email(author)[0], _strip_email(*_aliases)) - for author,_aliases in aliases.items()]) - rev_aliases = _reverse_aliases(aliases) + aliases = [_strip_email(*alias) for alias in aliases] + exclude = [_strip_email(*exclude) for exclude in excludes] for i,author in enumerate(authors): - if author in rev_aliases: - authors[i] = rev_aliases[author] - authors = sorted(list(set(authors))) + for alias in aliases: + if author in alias[1:]: + authors[i] = alias[0] + break + for i,author in enumerate(authors): + for exclude in excludes: + if author in exclude[1:] and exclude[0] in authors: + authors[i] = None + authors = sorted(set(authors)) if None in authors: authors.remove(None) return authors -def _copyright_string(original_year, final_year, authors, prefix=''): +def authors_list(): + p = Pipe([['bzr', 'log', '-n0'], + ['grep', '^ *committer\|^ *author'], + ['cut', '-d:', '-f2'], + ['sed', 's/ <.*//;s/^ *//'], + ['sort'], + ['uniq']]) + assert p.status == 0, p.statuses + authors = p.stdout.rstrip().split('\n') + return _replace_aliases(authors, with_email=False) + +def update_authors(verbose=True): + print "updating AUTHORS" + f = file('AUTHORS', 'w') + authors_text = 'Bugs Everywhere was written by:\n%s\n' % '\n'.join(authors_list()) + f.write(authors_text) + f.close() + +def ignored_file(filename, ignored_paths=None, ignored_files=None): + """ + >>> ignored_paths = ['./a/', './b/'] + >>> ignored_files = ['x', 'y'] + >>> ignored_file('./a/z', ignored_paths, ignored_files) + True + >>> ignored_file('./ab/z', ignored_paths, ignored_files) + False + >>> ignored_file('./ab/x', ignored_paths, ignored_files) + True + >>> ignored_file('./ab/xy', ignored_paths, ignored_files) + False + >>> ignored_file('./z', ignored_paths, ignored_files) + False + """ + if ignored_paths == None: + ignored_paths = IGNORED_PATHS + if ignored_files == None: + ignored_files = IGNORED_FILES + for path in ignored_paths: + if filename.startswith(path): + return True + if os.path.basename(filename) in ignored_files: + return True + if os.path.abspath(filename) != os.path.realpath(filename): + return True # symink somewhere in path... + return False + +def _copyright_string(orig_year, final_year, authors): """ - >>> print _copyright_string(original_year=2005, + >>> print _copyright_string(orig_year=2005, ... final_year=2005, - ... authors=['A <a@a.com>', 'B <b@b.edu>'], - ... prefix='# ' + ... authors=['A <a@a.com>', 'B <b@b.edu>'] ... ) # doctest: +ELLIPSIS # Copyright (C) 2005 A <a@a.com> # B <b@b.edu> # - # This file... - >>> print _copyright_string(original_year=2005, + # This program... + >>> print _copyright_string(orig_year=2005, ... final_year=2009, ... authors=['A <a@a.com>', 'B <b@b.edu>'] ... ) # doctest: +ELLIPSIS - Copyright (C) 2005-2009 A <a@a.com> - B <b@b.edu> - <BLANKLINE> - This file... + # Copyright (C) 2005-2009 A <a@a.com> + # B <b@b.edu> + # + # This program... """ - if original_year == final_year: - date_range = '%s' % original_year + if orig_year == final_year: + date_range = '%s' % orig_year else: - date_range = '%s-%s' % (original_year, final_year) - lines = ['Copyright (C) %s %s' % (date_range, authors[0])] + date_range = '%s-%s' % (orig_year, final_year) + lines = ['# Copyright (C) %s %s' % (date_range, authors[0])] for author in authors[1:]: - lines.append(' '*(len('Copyright (C) ')+len(date_range)+1) + + lines.append('#' + + ' '*(len(' Copyright (C) ')+len(date_range)+1) + author) - lines.append('') - lines.extend((COPY_RIGHT_TEXT % PROJECT_INFO).splitlines()) - for i,line in enumerate(lines): - lines[i] = (prefix + line).rstrip() - return '\n'.join(lines) + return '%s\n%s' % ('\n'.join(lines), COPYRIGHT_TEXT) def _tag_copyright(contents): """ @@ -470,184 +215,104 @@ def _tag_copyright(contents): ... (copyright ends) ... bla bla bla ... ''' - >>> print _tag_copyright(contents).replace('COPY-RIGHT', 'CR') + >>> print _tag_copyright(contents), Some file bla bla - -xyz-CR-zyx- + -xyz-COPYRIGHT-zyx- (copyright ends) bla bla bla - <BLANKLINE> """ lines = [] incopy = False for line in contents.splitlines(): if incopy == False and line.startswith('# Copyright'): incopy = True - lines.append(COPY_RIGHT_TAG) + lines.append(COPYRIGHT_TAG) elif incopy == True and not line.startswith('#'): incopy = False if incopy == False: lines.append(line.rstrip('\n')) return '\n'.join(lines)+'\n' -def _update_copyright(contents, original_year, authors): - """ - >>> contents = '''Some file - ... bla bla - ... # Copyright (copyright begins) - ... # (copyright continues) - ... # bla bla bla - ... (copyright ends) - ... bla bla bla - ... ''' - >>> print _update_copyright(contents, 2008, ['Jack', 'Jill'] - ... ) # doctest: +ELLIPSIS, +REPORT_UDIFF - Some file - bla bla - # Copyright (C) 2008-... Jack - # Jill - # - # This file... - (copyright ends) - bla bla bla - <BLANKLINE> - """ +def _update_copyright(contents, orig_year, authors): current_year = time.gmtime()[0] - copyright_string = _copyright_string( - original_year, current_year, authors, prefix='# ') + copyright_string = _copyright_string(orig_year, current_year, authors) contents = _tag_copyright(contents) - return contents.replace(COPY_RIGHT_TAG, copyright_string) - -def ignored_file(filename, ignored_paths=None, ignored_files=None, - check_disk=True, check_vcs=True): - """ - >>> ignored_paths = ['./a/', './b/'] - >>> ignored_files = ['x', 'y'] - >>> ignored_file('./a/z', ignored_paths, ignored_files, False, False) - True - >>> ignored_file('./ab/z', ignored_paths, ignored_files, False, False) - False - >>> ignored_file('./ab/x', ignored_paths, ignored_files, False, False) - True - >>> ignored_file('./ab/xy', ignored_paths, ignored_files, False, False) - False - >>> ignored_file('./z', ignored_paths, ignored_files, False, False) - False - """ - if ignored_paths == None: - ignored_paths = IGNORED_PATHS - if ignored_files == None: - ignored_files = IGNORED_FILES - if check_disk == True and os.path.isfile(filename) == False: - return True - for path in ignored_paths: - if filename.startswith(path): - return True - if os.path.basename(filename) in ignored_files: - return True - if check_vcs == True and is_versioned(filename) == False: - return True - return False - -def _set_contents(filename, contents, original_contents=None, dry_run=False, - verbose=0): - if original_contents == None and os.path.isfile(filename): - f = open(filename, 'r') - original_contents = f.read() - f.close() - if verbose > 0: - print "checking %s ... " % filename, - if contents != original_contents: - if verbose > 0: - if original_contents == None: - print "[creating]" - else: - print "[updating]" - if verbose > 1 and original_contents != None: - print '\n'.join( - difflib.unified_diff( - original_contents.splitlines(), contents.splitlines(), - fromfile=os.path.normpath(os.path.join('a', filename)), - tofile=os.path.normpath(os.path.join('b', filename)), - n=3, lineterm='')) - if dry_run == False: - f = file(filename, 'w') - f.write(contents) - f.close() - elif verbose > 0: - print "[no change]" - -# Update commands - -def update_authors(authors_fn=authors_list, dry_run=False, verbose=0): - authors = authors_fn() - authors = _replace_aliases(authors, with_email=True, aliases=ALIASES) - new_contents = '%s was written by:\n%s\n' % ( - PROJECT_INFO['project'], - '\n'.join(authors) - ) - _set_contents('AUTHORS', new_contents, dry_run=dry_run, verbose=verbose) - -def update_file(filename, original_year_fn=original_year, authors_fn=authors, - dry_run=False, verbose=0): - f = file(filename, 'r') - contents = f.read() + return contents.replace(COPYRIGHT_TAG, copyright_string) + +def update_file(filename, verbose=True): + if verbose == True: + print "updating", filename + contents = file(filename, 'r').read() + + p = Pipe([['bzr', 'log', '-n0', filename], + ['grep', '^ *timestamp: '], + ['tail', '-n1'], + ['sed', 's/^ *//;'], + ['cut', '-b', '16-19']]) + if p.status != 0: + assert p.statuses[0] == 3, p.statuses + return # bzr doesn't version that file + assert p.status == 0, p.statuses + orig_year = int(p.stdout.strip()) + + p = Pipe([['bzr', 'log', '-n0', filename], + ['grep', '^ *author: \|^ *committer: '], + ['cut', '-d:', '-f2'], + ['sed', 's/^ *//;s/ *$//'], + ['sort'], + ['uniq']]) + assert p.status == 0, p.statuses + authors = p.stdout.rstrip().split('\n') + authors = _replace_aliases(authors, with_email=True, + aliases=ALIASES+COPYRIGHT_ALIASES) + + contents = _update_copyright(contents, orig_year, authors) + f = file(filename, 'w') + f.write(contents) f.close() - original_year = original_year_fn(filename) - authors = authors_fn(filename) - authors = _replace_aliases(authors, with_email=True, aliases=ALIASES) - - new_contents = _update_copyright(contents, original_year, authors) - _set_contents(filename, contents=new_contents, original_contents=contents, - dry_run=dry_run, verbose=verbose) - -def update_files(files=None, dry_run=False, verbose=0): +def update_files(files=None): if files == None or len(files) == 0: - files = [] - for dirpath,dirnames,filenames in os.walk('.'): - for filename in filenames: - files.append(os.path.join(dirpath, filename)) + p = Pipe([['grep', '-rc', '# Copyright', '.'], + ['grep', '-v', ':0$'], + ['cut', '-d:', '-f1']]) + assert p.status == 0 + files = p.stdout.rstrip().split('\n') for filename in files: if ignored_file(filename) == True: continue - update_file(filename, dry_run=dry_run, verbose=verbose) + update_file(filename) def test(): import doctest - doctest.testmod() + doctest.testmod() if __name__ == '__main__': import optparse - import sys - - usage = """%%prog [options] [file ...] + usage = """%prog [options] [file ...] Update copyright information in source code with information from -the %(vcs)s repository. Run from the %(project)s repository root. +the bzr repository. Run from the BE repository root. Replaces every line starting with '^# Copyright' and continuing with '^#' with an auto-generated copyright blurb. If you want to add #-commented material after a copyright blurb, please insert a blank -line between the blurb and your comment, so the next run of -``update_copyright.py`` doesn't clobber your comment. +line between the blurb and your comment (as in this file), so the +next run of update_copyright.py doesn't clobber your comment. If no files are given, a list of files to update is generated automatically. -""" % PROJECT_INFO +""" p = optparse.OptionParser(usage) p.add_option('--test', dest='test', default=False, action='store_true', help='Run internal tests and exit') - p.add_option('--dry-run', dest='dry_run', default=False, - action='store_true', help="Don't make any changes") - p.add_option('-v', '--verbose', dest='verbose', default=0, - action='count', help='Increment verbosity') options,args = p.parse_args() if options.test == True: test() sys.exit(0) - update_authors(dry_run=options.dry_run, verbose=options.verbose) - update_files(files=args, dry_run=options.dry_run, verbose=options.verbose) + update_authors() + update_files(files=args) |