[MERGE] build support for pyrex/C modules

Robert Collins robertc at robertcollins.net
Tue Mar 13 02:38:31 GMT 2007


This adds support for building pyrex or C modules. It deliberately does
not add any such modules: but other branches can trivially do so once
this is merged. So far I've had one failure report (fixed) of using this
with 'make'.



Cheers,
Rob

# Bazaar revision bundle v0.9
#
# message:
#   Fix building of C modules without pyrex installed.
# committer: Robert Collins <robertc at robertcollins.net>
# date: Mon 2007-03-12 10:34:27.707999945 +1100

=== modified file HACKING // last-changed:robertc at robertcollins.net-20070308040
... 606-84gsniv56huiyjt4
--- HACKING
+++ HACKING
@@ -632,6 +632,41 @@
 so, please reply and say so.)
 
 
+C Extension Modules
+===================
+
+We write some extensions in C using pyrex. We design these to work in
+three scenarios:
+ * User with no C compiler
+ * User with C compiler
+ * Developers
+
+The recommended way to install bzr is to have a C compiler so that the
+extensions can be built, but if no C compiler is present, the pure python
+versions we supply will work, though more slowly.
+
+For developers we recommend that pyrex be installed, so that the C
+extensions can be changed if needed.
+
+For the C extensions, the extension module should always match the
+original python one in all respects (modulo speed). This should be
+maintained over time.
+
+To create an extension, add rules to setup.py for building it with pyrex,
+and with distutils. Now start with an empty .pyx file. At the top add
+"include 'yourmodule.py'". This will import the contents of foo.py into this 
+file at build time - remember that only one module will be loaded at
+runtime. Now you can subclass classes, or replace functions, and only your
+changes need to be present in the .pyx file.
+
+Note that pyrex does not support all 2.4 programming idioms, so some
+syntax changes may be required. I.e. 
+ - 'from foo import (bar, gam)' needs to change to not use the brackets. 
+ - 'import foo.bar as bar' needs to be 'import foo.bar; bar = foo.bar' 
+If the changes are too dramatic, consider
+maintaining the python code twice - once in the .pyx, and once in the .py,
+and no longer including the .py file.
+
 Making installers for OS Windows
 ================================
 To build a win32 installer, see the instructions on the wiki page:

=== modified file Makefile // last-changed:robertc at robertcollins.net-2007030804
... 0606-84gsniv56huiyjt4
--- Makefile
+++ Makefile
@@ -1,6 +1,8 @@
-all:
+all: 
+	@echo "building extension modules."
+	./setup.py build_ext -i
 
-check:
+check: all
 	python -Werror ./bzr selftest -v $(tests)
 	@echo "Running all tests with no locale."
 	LC_CTYPE= LANG=C LC_ALL= ./bzr selftest -v $(tests)

=== modified file setup.py // executable:yes
--- setup.py
+++ setup.py
@@ -147,6 +147,25 @@
 ## Setup
 ########################
 
+command_classes = {'install_scripts': my_install_scripts,
+                  'build': bzr_build}
+ext_modules = []
+try:
+    from Pyrex.Distutils import build_ext
+except ImportError:
+    # try to build the extension from the prior generated source.
+    print ("Pyrex not available, while bzr will build, "
+           "you cannot modify the C extensions.")
+    from distutils.command.build_ext import build_ext
+    from distutils.extension import Extension
+    #ext_modules.append(
+    #    Extension("bzrlib.modulename", ["bzrlib/foo.c"], libraries = []))
+else:
+    from distutils.extension import Extension
+    #ext_modules.append(
+    #    Extension("bzrlib.modulename", ["bzrlib/foo.pyx"], libraries = []))
+command_classes['build_ext'] = build_ext
+
 if 'bdist_wininst' in sys.argv:
     import glob
     # doc files
@@ -218,9 +237,8 @@
     # std setup
     ARGS = {'scripts': ['bzr'],
             'data_files': [('man/man1', ['bzr.1'])],
-            'cmdclass': {'build': bzr_build,
-                         'install_scripts': my_install_scripts,
-                        },
+            'cmdclass': command_classes,
+            'ext_modules': ext_modules,
            }
     
     ARGS.update(META_INFO)

=== modified directory  // last-changed:robertc at robertcollins.net-2007031123342
... 7-z8skxqrx8shqy1de
# revision id: robertc at robertcollins.net-20070311233427-z8skxqrx8shqy1de
# sha1: 0f4e289146165f9aa7460e592e75118b4c134eda
# inventory sha1: 55efc5bd88871d505b35a6b3e3a52dcb7e4ce7cd
# parent ids:
#   robertc at robertcollins.net-20070308040606-84gsniv56huiyjt4
# base id: robertc at robertcollins.net-20070307120012-cgx5yk2cob9v0i92
# properties:
#   branch-nick: pyrex

# message:
#   Merge bzr.dev.
# committer: Robert Collins <robertc at robertcollins.net>
# date: Thu 2007-03-08 15:06:06.559999943 +1100

=== modified file HACKING // encoding:base64
LS0tIEhBQ0tJTkcKKysrIEhBQ0tJTkcKQEAgLTYzMiw2ICs2MzIsNDEgQEAKIHNvLCBwbGVhc2Ug
cmVwbHkgYW5kIHNheSBzby4pCiAKIAorQyBFeHRlbnNpb24gTW9kdWxlcworPT09PT09PT09PT09
PT09PT09PQorCitXZSB3cml0ZSBzb21lIGV4dGVuc2lvbnMgaW4gQyB1c2luZyBweXJleC4gV2Ug
ZGVzaWduIHRoZXNlIHRvIHdvcmsgaW4KK3RocmVlIHNjZW5hcmlvczoKKyAqIFVzZXIgd2l0aCBu
byBDIGNvbXBpbGVyCisgKiBVc2VyIHdpdGggQyBjb21waWxlcgorICogRGV2ZWxvcGVycworCitU
aGUgcmVjb21tZW5kZWQgd2F5IHRvIGluc3RhbGwgYnpyIGlzIHRvIGhhdmUgYSBDIGNvbXBpbGVy
IHNvIHRoYXQgdGhlCitleHRlbnNpb25zIGNhbiBiZSBidWlsdCwgYnV0IGlmIG5vIEMgY29tcGls
ZXIgaXMgcHJlc2VudCwgdGhlIHB1cmUgcHl0aG9uCit2ZXJzaW9ucyB3ZSBzdXBwbHkgd2lsbCB3
b3JrLCB0aG91Z2ggbW9yZSBzbG93bHkuCisKK0ZvciBkZXZlbG9wZXJzIHdlIHJlY29tbWVuZCB0
aGF0IHB5cmV4IGJlIGluc3RhbGxlZCwgc28gdGhhdCB0aGUgQworZXh0ZW5zaW9ucyBjYW4gYmUg
Y2hhbmdlZCBpZiBuZWVkZWQuCisKK0ZvciB0aGUgQyBleHRlbnNpb25zLCB0aGUgZXh0ZW5zaW9u
IG1vZHVsZSBzaG91bGQgYWx3YXlzIG1hdGNoIHRoZQorb3JpZ2luYWwgcHl0aG9uIG9uZSBpbiBh
bGwgcmVzcGVjdHMgKG1vZHVsbyBzcGVlZCkuIFRoaXMgc2hvdWxkIGJlCittYWludGFpbmVkIG92
ZXIgdGltZS4KKworVG8gY3JlYXRlIGFuIGV4dGVuc2lvbiwgYWRkIHJ1bGVzIHRvIHNldHVwLnB5
IGZvciBidWlsZGluZyBpdCB3aXRoIHB5cmV4LAorYW5kIHdpdGggZGlzdHV0aWxzLiBOb3cgc3Rh
cnQgd2l0aCBhbiBlbXB0eSAucHl4IGZpbGUuIEF0IHRoZSB0b3AgYWRkCisiaW5jbHVkZSAneW91
cm1vZHVsZS5weSciLiBUaGlzIHdpbGwgaW1wb3J0IHRoZSBjb250ZW50cyBvZiBmb28ucHkgaW50
byB0aGlzIAorZmlsZSBhdCBidWlsZCB0aW1lIC0gcmVtZW1iZXIgdGhhdCBvbmx5IG9uZSBtb2R1
bGUgd2lsbCBiZSBsb2FkZWQgYXQKK3J1bnRpbWUuIE5vdyB5b3UgY2FuIHN1YmNsYXNzIGNsYXNz
ZXMsIG9yIHJlcGxhY2UgZnVuY3Rpb25zLCBhbmQgb25seSB5b3VyCitjaGFuZ2VzIG5lZWQgdG8g
YmUgcHJlc2VudCBpbiB0aGUgLnB5eCBmaWxlLgorCitOb3RlIHRoYXQgcHlyZXggZG9lcyBub3Qg
c3VwcG9ydCBhbGwgMi40IHByb2dyYW1taW5nIGlkaW9tcywgc28gc29tZQorc3ludGF4IGNoYW5n
ZXMgbWF5IGJlIHJlcXVpcmVkLiBJLmUuIAorIC0gJ2Zyb20gZm9vIGltcG9ydCAoYmFyLCBnYW0p
JyBuZWVkcyB0byBjaGFuZ2UgdG8gbm90IHVzZSB0aGUgYnJhY2tldHMuIAorIC0gJ2ltcG9ydCBm
b28uYmFyIGFzIGJhcicgbmVlZHMgdG8gYmUgJ2ltcG9ydCBmb28uYmFyOyBiYXIgPSBmb28uYmFy
JyAKK0lmIHRoZSBjaGFuZ2VzIGFyZSB0b28gZHJhbWF0aWMsIGNvbnNpZGVyCittYWludGFpbmlu
ZyB0aGUgcHl0aG9uIGNvZGUgdHdpY2UgLSBvbmNlIGluIHRoZSAucHl4LCBhbmQgb25jZSBpbiB0
aGUgLnB5LAorYW5kIG5vIGxvbmdlciBpbmNsdWRpbmcgdGhlIC5weSBmaWxlLgorCiBNYWtpbmcg
aW5zdGFsbGVycyBmb3IgT1MgV2luZG93cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KIFRvIGJ1aWxkIGEgd2luMzIgaW5zdGFsbGVyLCBzZWUgdGhlIGluc3RydWN0aW9ucyBvbiB0
aGUgd2lraSBwYWdlOgoK

=== modified file Makefile // encoding:base64
LS0tIE1ha2VmaWxlCisrKyBNYWtlZmlsZQpAQCAtMSw2ICsxLDggQEAKLWFsbDoKK2FsbDogCisJ
QGVjaG8gImJ1aWxkaW5nIGV4dGVuc2lvbiBtb2R1bGVzLiIKKwkuL3NldHVwLnB5IGJ1aWxkX2V4
dCAtaQogCi1jaGVjazoKK2NoZWNrOiBhbGwKIAlweXRob24gLVdlcnJvciAuL2J6ciBzZWxmdGVz
dCAtdiAkKHRlc3RzKQogCUBlY2hvICJSdW5uaW5nIGFsbCB0ZXN0cyB3aXRoIG5vIGxvY2FsZS4i
CiAJTENfQ1RZUEU9IExBTkc9QyBMQ19BTEw9IC4vYnpyIHNlbGZ0ZXN0IC12ICQodGVzdHMpCgo=

=== modified file setup.py // executable:yes // encoding:base64
LS0tIHNldHVwLnB5CisrKyBzZXR1cC5weQpAQCAtMTQ3LDYgKzE0NywyNSBAQAogIyMgU2V0dXAK
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitjb21tYW5kX2NsYXNzZXMgPSB7J2luc3RhbGxf
c2NyaXB0cyc6IG15X2luc3RhbGxfc2NyaXB0cywKKyAgICAgICAgICAgICAgICAgICdidWlsZCc6
IGJ6cl9idWlsZH0KK2V4dF9tb2R1bGVzID0gW10KK3RyeToKKyAgICBmcm9tIFB5cmV4LkRpc3R1
dGlscyBpbXBvcnQgYnVpbGRfZXh0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyB0cnkgdG8g
YnVpbGQgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZSBwcmlvciBnZW5lcmF0ZWQgc291cmNlLgorICAg
IHByaW50ICgiUHlyZXggbm90IGF2YWlsYWJsZSwgd2hpbGUgYnpyIHdpbGwgYnVpbGQiCisgICAg
ICAgICAgICIsIHlvdSBjYW5ub3QgbW9kaWZ5IHRoZSBDIGV4dGVuc2lvbnMuIikKKyAgICBmcm9t
IGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKKyAgICBmcm9tIGRpc3R1dGlscy5l
eHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbgorICAgICNleHRfbW9kdWxlcy5hcHBlbmQoCisgICAg
IyAgICBFeHRlbnNpb24oImJ6cmxpYi5tb2R1bGVuYW1lIiwgWyJienJsaWIvZm9vLmMiXSwgbGli
cmFyaWVzID0gW10pKQorZWxzZToKKyAgICBmcm9tIGRpc3R1dGlscy5leHRlbnNpb24gaW1wb3J0
IEV4dGVuc2lvbgorICAgICNleHRfbW9kdWxlcy5hcHBlbmQoCisgICAgIyAgICBFeHRlbnNpb24o
ImJ6cmxpYi5tb2R1bGVuYW1lIiwgWyJienJsaWIvZm9vLnB5eCJdLCBsaWJyYXJpZXMgPSBbXSkp
Citjb21tYW5kX2NsYXNzZXNbJ2J1aWxkX2V4dCddID0gYnVpbGRfZXh0CisKIGlmICdiZGlzdF93
aW5pbnN0JyBpbiBzeXMuYXJndjoKICAgICBpbXBvcnQgZ2xvYgogICAgICMgZG9jIGZpbGVzCkBA
IC0yMTgsOSArMjM3LDggQEAKICAgICAjIHN0ZCBzZXR1cAogICAgIEFSR1MgPSB7J3NjcmlwdHMn
OiBbJ2J6ciddLAogICAgICAgICAgICAgJ2RhdGFfZmlsZXMnOiBbKCdtYW4vbWFuMScsIFsnYnpy
LjEnXSldLAotICAgICAgICAgICAgJ2NtZGNsYXNzJzogeydidWlsZCc6IGJ6cl9idWlsZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGFsbF9zY3JpcHRzJzogbXlfaW5zdGFsbF9zY3Jp
cHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdjbWRjbGFzcyc6
IGNvbW1hbmRfY2xhc3NlcywKKyAgICAgICAgICAgICdleHRfbW9kdWxlcyc6IGV4dF9tb2R1bGVz
LAogICAgICAgICAgICB9CiAgICAgCiAgICAgQVJHUy51cGRhdGUoTUVUQV9JTkZPKQoK

=== modified directory  // last-changed:robertc at robertcollins.net-2007030804060
... 6-84gsniv56huiyjt4
# revision id: robertc at robertcollins.net-20070308040606-84gsniv56huiyjt4
# sha1: c379843072c9089ecbfeb823c491e4e65e5167dd
# inventory sha1: 9eb3f51b63c1c73c99fe5c27aee455a114df2701
# parent ids:
#   robertc at robertcollins.net-20060609141337-4ea84d88e8d4dc0f
#   robertc at robertcollins.net-20070307120012-cgx5yk2cob9v0i92
# properties:
#   branch-nick: pyrex

# message:
#   More pyrex finesse, documentation.
# committer: Robert Collins <robertc at robertcollins.net>
# date: Sat 2006-06-10 00:13:37.903961897 +1000

=== modified file HACKING // encoding:base64
LS0tIEhBQ0tJTkcKKysrIEhBQ0tJTkcKQEAgLTM4Nyw0ICszODcsMzkgQEAKIHNvLCBwbGVhc2Ug
cmVwbHkgYW5kIHNheSBzby4pCiAKIAorQyBFeHRlbnNpb24gTW9kdWxlcworPT09PT09PT09PT09
PT09PT09PQorCitXZSB3cml0ZSBzb21lIGV4dGVuc2lvbnMgaW4gQyB1c2luZyBweXJleC4gV2Ug
ZGVzaWduIHRoZXNlIHRvIHdvcmsgaW4KK3RocmVlIHNjZW5hcmlvczoKKyAqIFVzZXIgd2l0aCBu
byBDIGNvbXBpbGVyCisgKiBVc2VyIHdpdGggQyBjb21waWxlcgorICogRGV2ZWxvcGVycworCitU
aGUgcmVjb21tZW5kZWQgd2F5IHRvIGluc3RhbGwgYnpyIGlzIHRvIGhhdmUgYSBDIGNvbXBpbGVy
IHNvIHRoYXQgdGhlCitleHRlbnNpb25zIGNhbiBiZSBidWlsdCwgYnV0IGlmIG5vIEMgY29tcGls
ZXIgaXMgcHJlc2VudCwgdGhlIHB1cmUgcHl0aG9uCit2ZXJzaW9ucyB3ZSBzdXBwbHkgd2lsbCB3
b3JrLCB0aG91Z2ggbW9yZSBzbG93bHkuCisKK0ZvciBkZXZlbG9wZXJzIHdlIHJlY29tbWVuZCB0
aGF0IHB5cmV4IGJlIGluc3RhbGxlZCwgc28gdGhhdCB0aGUgQworZXh0ZW5zaW9ucyBjYW4gYmUg
Y2hhbmdlZCBpZiBuZWVkZWQuCisKK0ZvciB0aGUgQyBleHRlbnNpb25zLCB0aGUgZXh0ZW5zaW9u
IG1vZHVsZSBzaG91bGQgYWx3YXlzIG1hdGNoIHRoZQorb3JpZ2luYWwgcHl0aG9uIG9uZSBpbiBh
bGwgcmVzcGVjdHMgKG1vZHVsbyBzcGVlZCkuIFRoaXMgc2hvdWxkIGJlCittYWludGFpbmVkIG92
ZXIgdGltZS4KKworVG8gY3JlYXRlIGFuIGV4dGVuc2lvbiwgYWRkIHJ1bGVzIHRvIHNldHVwLnB5
IGZvciBidWlsZGluZyBpdCB3aXRoIHB5cmV4LAorYW5kIHdpdGggZGlzdHV0aWxzLiBOb3cgc3Rh
cnQgd2l0aCBhbiBlbXB0eSAucHl4IGZpbGUuIEF0IHRoZSB0b3AgYWRkCisiaW5jbHVkZSAneW91
cm1vZHVsZS5weSciLiBUaGlzIHdpbGwgaW1wb3J0IHRoZSBjb250ZW50cyBvZiBmb28ucHkgaW50
byB0aGlzIAorZmlsZSBhdCBidWlsZCB0aW1lIC0gcmVtZW1iZXIgdGhhdCBvbmx5IG9uZSBtb2R1
bGUgd2lsbCBiZSBsb2FkZWQgYXQKK3J1bnRpbWUuIE5vdyB5b3UgY2FuIHN1YmNsYXNzIGNsYXNz
ZXMsIG9yIHJlcGxhY2UgZnVuY3Rpb25zLCBhbmQgb25seSB5b3VyCitjaGFuZ2VzIG5lZWQgdG8g
YmUgcHJlc2VudCBpbiB0aGUgLnB5eCBmaWxlLgorCitOb3RlIHRoYXQgcHlyZXggZG9lcyBub3Qg
c3VwcG9ydCBhbGwgMi40IHByb2dyYW1taW5nIGlkaW9tcywgc28gc29tZQorc3ludGF4IGNoYW5n
ZXMgbWF5IGJlIHJlcXVpcmVkLiBJLmUuIAorIC0gJ2Zyb20gZm9vIGltcG9ydCAoYmFyLCBnYW0p
JyBuZWVkcyB0byBjaGFuZ2UgdG8gbm90IHVzZSB0aGUgYnJhY2tldHMuIAorIC0gJ2ltcG9ydCBm
b28uYmFyIGFzIGJhcicgbmVlZHMgdG8gYmUgJ2ltcG9ydCBmb28uYmFyOyBiYXIgPSBmb28uYmFy
JyAKK0lmIHRoZSBjaGFuZ2VzIGFyZSB0b28gZHJhbWF0aWMsIGNvbnNpZGVyCittYWludGFpbmlu
ZyB0aGUgcHl0aG9uIGNvZGUgdHdpY2UgLSBvbmNlIGluIHRoZSAucHl4LCBhbmQgb25jZSBpbiB0
aGUgLnB5LAorYW5kIG5vIGxvbmdlciBpbmNsdWRpbmcgdGhlIC5weSBmaWxlLgorCiA6OiB2aW06
dHc9NzQ6YWkKCg==

=== modified file Makefile // encoding:base64
LS0tIE1ha2VmaWxlCisrKyBNYWtlZmlsZQpAQCAtNSw2ICs1LDkgQEAKIAkuL2J6ciBzZWxmdGVz
dCAtdiAkKHRlc3RzKQogCUBlY2hvICJSdW5uaW5nIGFsbCB0ZXN0cyB3aXRoIG5vIGxvY2FsZS4i
CiAJTENfQ1RZUEU9IExBTkc9QyBMQ19BTEw9IC4vYnpyIHNlbGZ0ZXN0IC12ICQodGVzdHMpCisJ
QGVjaG8gImJ1aWxkaW5nIGV4dGVuc2lvbiBtb2R1bGVzLiIKKwlAbWFrZSBhbGwKKwkuL2J6ciBz
ZWxmdGVzdCAtdiAkKHRlc3RzKQogCiBjaGVjay1tc2dlZGl0b3I6CiAJLi9ienIgLS1uby1wbHVn
aW5zIHNlbGZ0ZXN0IC12IG1zZ2VkaXRvcgoK

=== modified directory  // last-changed:robertc at robertcollins.net-2006060914133
... 7-4ea84d88e8d4dc0f
# revision id: robertc at robertcollins.net-20060609141337-4ea84d88e8d4dc0f
# sha1: fb2df6f83979fe02c90da473b3a4e14b5c75f51a
# inventory sha1: e18233b25d8b2a8a98f92a759329b0323aceccc9
# parent ids:
#   robertc at robertcollins.net-20060604173418-51fbd7c12775039e
# properties:
#   branch-nick: pyrex

# message:
#   First cut at adding pyrex facilities.
# committer: Robert Collins <robertc at robertcollins.net>
# date: Mon 2006-06-05 03:34:18.697633028 +1000

=== modified file Makefile // encoding:base64
LS0tIE1ha2VmaWxlCisrKyBNYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIGFsbDogCisJLi9zZXR1
cC5weSBidWlsZF9leHQgLWkKIAogY2hlY2s6CiAJLi9ienIgc2VsZnRlc3QgLXYgJCh0ZXN0cykK
Cg==

=== modified file setup.py // encoding:base64
LS0tIHNldHVwLnB5CisrKyBzZXR1cC5weQpAQCAtODAsNiArODAsMjYgQEAKICMjIFNldHVwCiAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorY29tbWFuZF9jbGFzc2VzID0geydpbnN0YWxsX3Nj
cmlwdHMnOiBteV9pbnN0YWxsX3NjcmlwdHMsCisgICAgICAgICAgICAgICAgICAnYnVpbGQnOiBi
enJfYnVpbGR9CitleHRfbW9kdWxlcyA9IFtdCit0cnk6CisgICAgZnJvbSBQeXJleC5EaXN0dXRp
bHMgaW1wb3J0IGJ1aWxkX2V4dAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgdHJ5IHRvIGJ1
aWxkIHRoZSBleHRlbnNpb24gZnJvbSB0aGUgcHJpb3IgZ2VuZXJhdGVkIHNvdXJjZS4KKyAgICBw
cmludCAoIlB5cmV4IG5vdCBhdmFpbGFibGUsIHdoaWxlIGJ6ciB3aWxsIGJ1aWxkIgorICAgICAg
ICAgICAiLCB5b3UgY2Fubm90IG1vZGlmeSB0aGUgQyBleHRlbnNpb25zLiIpCisgICAgZnJvbSBk
aXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgYnVpbGRfZXh0CisgICAgZnJvbSBkaXN0dXRpbHMuZXh0
ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KKyAgICAjZXh0X21vZHVsZXMuYXBwZW5kKAorICAgICMg
ICAgRXh0ZW5zaW9uKCJienJsaWIubW9kdWxlbmFtZSIsIFsiYnpybGliL2Zvby5jIl0sIGxpYnJh
cmllcyA9IFtdKSkKK2Vsc2U6CisgICAgZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBF
eHRlbnNpb24KKyAgICAjZXh0X21vZHVsZXMuYXBwZW5kKAorICAgICMgICAgRXh0ZW5zaW9uKCJi
enJsaWIubW9kdWxlbmFtZSIsIFsiYnpybGliL2Zvby5weXgiXSwgbGlicmFyaWVzID0gW10pKQor
Y29tbWFuZF9jbGFzc2VzWydidWlsZF9leHQnXSA9IGJ1aWxkX2V4dAorCisKIHNldHVwKG5hbWU9
J2J6cicsCiAgICAgICB2ZXJzaW9uPScwLjhwcmUnLAogICAgICAgYXV0aG9yPSdNYXJ0aW4gUG9v
bCcsCkBAIC0xMTYsNyArMTM2LDggQEAKICAgICAgICAgICAgICAgICAnYnpybGliLmJ1bmRsZS5z
ZXJpYWxpemVyJwogICAgICAgICAgICAgICAgIF0sCiAgICAgICBzY3JpcHRzPVsnYnpyJ10sCi0g
ICAgICBjbWRjbGFzcz17J2luc3RhbGxfc2NyaXB0cyc6IG15X2luc3RhbGxfc2NyaXB0cywgJ2J1
aWxkJzogYnpyX2J1aWxkfSwKKyAgICAgIGNtZGNsYXNzPWNvbW1hbmRfY2xhc3NlcywKICAgICAg
IGRhdGFfZmlsZXM9WygnbWFuL21hbjEnLCBbJ2J6ci4xJ10pXSwKKyAgICAgIGV4dF9tb2R1bGVz
PWV4dF9tb2R1bGVzLAogICAgICMgICB0b2RvOiBpbnN0YWxsIHRoZSB0eHQgZmlsZXMgZnJvbSBi
enJsaWIuZG9jLmFwaS4KICAgICAgKQoK

=== modified directory  // last-changed:robertc at robertcollins.net-2006060417341
... 8-51fbd7c12775039e
# revision id: robertc at robertcollins.net-20060604173418-51fbd7c12775039e
# sha1: dbe2942afcc9dae4472966fa06fab43c2d682de2
# inventory sha1: 85fa3cbfaaa85ea0a4fb755f8e14d7d7cc54b75e
# parent ids:
#   pqm at pqm.ubuntu.com-20060603212040-9ec7af97aa11d4d7
# properties:
#   branch-nick: pyrex




-- 
GPG key available at: <http://www.robertcollins.net/keys.txt>.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070313/ca4c51a4/attachment.pgp 


More information about the bazaar mailing list