amp 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.hgignore +26 -0
- data/AUTHORS +2 -0
- data/History.txt +6 -0
- data/LICENSE +37 -0
- data/MANIFESTO +7 -0
- data/Manifest.txt +294 -0
- data/README.md +129 -0
- data/Rakefile +102 -0
- data/SCHEDULE.markdown +12 -0
- data/STYLE +27 -0
- data/TODO.markdown +149 -0
- data/ampfile.rb +47 -0
- data/bin/amp +30 -0
- data/bin/amp1.9 +30 -0
- data/ext/amp/bz2/README.txt +39 -0
- data/ext/amp/bz2/bz2.c +1582 -0
- data/ext/amp/bz2/extconf.rb +77 -0
- data/ext/amp/bz2/mkmf.log +29 -0
- data/ext/amp/mercurial_patch/extconf.rb +5 -0
- data/ext/amp/mercurial_patch/mpatch.c +405 -0
- data/ext/amp/priority_queue/extconf.rb +5 -0
- data/ext/amp/priority_queue/priority_queue.c +947 -0
- data/ext/amp/support/extconf.rb +5 -0
- data/ext/amp/support/support.c +250 -0
- data/lib/amp.rb +200 -0
- data/lib/amp/commands/command.rb +507 -0
- data/lib/amp/commands/command_support.rb +137 -0
- data/lib/amp/commands/commands/config.rb +143 -0
- data/lib/amp/commands/commands/help.rb +29 -0
- data/lib/amp/commands/commands/init.rb +10 -0
- data/lib/amp/commands/commands/templates.rb +137 -0
- data/lib/amp/commands/commands/version.rb +7 -0
- data/lib/amp/commands/commands/workflow.rb +28 -0
- data/lib/amp/commands/commands/workflows/git/add.rb +65 -0
- data/lib/amp/commands/commands/workflows/git/copy.rb +27 -0
- data/lib/amp/commands/commands/workflows/git/mv.rb +23 -0
- data/lib/amp/commands/commands/workflows/git/rm.rb +60 -0
- data/lib/amp/commands/commands/workflows/hg/add.rb +53 -0
- data/lib/amp/commands/commands/workflows/hg/addremove.rb +86 -0
- data/lib/amp/commands/commands/workflows/hg/annotate.rb +46 -0
- data/lib/amp/commands/commands/workflows/hg/archive.rb +126 -0
- data/lib/amp/commands/commands/workflows/hg/branch.rb +28 -0
- data/lib/amp/commands/commands/workflows/hg/branches.rb +30 -0
- data/lib/amp/commands/commands/workflows/hg/bundle.rb +115 -0
- data/lib/amp/commands/commands/workflows/hg/clone.rb +95 -0
- data/lib/amp/commands/commands/workflows/hg/commit.rb +42 -0
- data/lib/amp/commands/commands/workflows/hg/copy.rb +31 -0
- data/lib/amp/commands/commands/workflows/hg/debug/dirstate.rb +32 -0
- data/lib/amp/commands/commands/workflows/hg/debug/index.rb +36 -0
- data/lib/amp/commands/commands/workflows/hg/default.rb +9 -0
- data/lib/amp/commands/commands/workflows/hg/diff.rb +30 -0
- data/lib/amp/commands/commands/workflows/hg/forget.rb +11 -0
- data/lib/amp/commands/commands/workflows/hg/heads.rb +25 -0
- data/lib/amp/commands/commands/workflows/hg/identify.rb +23 -0
- data/lib/amp/commands/commands/workflows/hg/import.rb +135 -0
- data/lib/amp/commands/commands/workflows/hg/incoming.rb +85 -0
- data/lib/amp/commands/commands/workflows/hg/info.rb +18 -0
- data/lib/amp/commands/commands/workflows/hg/log.rb +21 -0
- data/lib/amp/commands/commands/workflows/hg/manifest.rb +13 -0
- data/lib/amp/commands/commands/workflows/hg/merge.rb +53 -0
- data/lib/amp/commands/commands/workflows/hg/move.rb +28 -0
- data/lib/amp/commands/commands/workflows/hg/outgoing.rb +61 -0
- data/lib/amp/commands/commands/workflows/hg/pull.rb +74 -0
- data/lib/amp/commands/commands/workflows/hg/push.rb +20 -0
- data/lib/amp/commands/commands/workflows/hg/remove.rb +45 -0
- data/lib/amp/commands/commands/workflows/hg/resolve.rb +83 -0
- data/lib/amp/commands/commands/workflows/hg/revert.rb +53 -0
- data/lib/amp/commands/commands/workflows/hg/root.rb +13 -0
- data/lib/amp/commands/commands/workflows/hg/serve.rb +38 -0
- data/lib/amp/commands/commands/workflows/hg/status.rb +116 -0
- data/lib/amp/commands/commands/workflows/hg/tag.rb +69 -0
- data/lib/amp/commands/commands/workflows/hg/tags.rb +27 -0
- data/lib/amp/commands/commands/workflows/hg/tip.rb +13 -0
- data/lib/amp/commands/commands/workflows/hg/update.rb +27 -0
- data/lib/amp/commands/commands/workflows/hg/verify.rb +9 -0
- data/lib/amp/commands/commands/workflows/hg/view.rb +36 -0
- data/lib/amp/commands/dispatch.rb +181 -0
- data/lib/amp/commands/hooks.rb +81 -0
- data/lib/amp/dependencies/amp_support.rb +1 -0
- data/lib/amp/dependencies/amp_support/ruby_amp_support.rb +103 -0
- data/lib/amp/dependencies/minitar.rb +979 -0
- data/lib/amp/dependencies/priority_queue.rb +18 -0
- data/lib/amp/dependencies/priority_queue/c_priority_queue.rb +1 -0
- data/lib/amp/dependencies/priority_queue/poor_priority_queue.rb +46 -0
- data/lib/amp/dependencies/priority_queue/ruby_priority_queue.rb +525 -0
- data/lib/amp/dependencies/python_config.rb +211 -0
- data/lib/amp/dependencies/trollop.rb +713 -0
- data/lib/amp/dependencies/zip/ioextras.rb +155 -0
- data/lib/amp/dependencies/zip/stdrubyext.rb +111 -0
- data/lib/amp/dependencies/zip/tempfile_bugfixed.rb +186 -0
- data/lib/amp/dependencies/zip/zip.rb +1850 -0
- data/lib/amp/dependencies/zip/zipfilesystem.rb +609 -0
- data/lib/amp/dependencies/zip/ziprequire.rb +90 -0
- data/lib/amp/encoding/base85.rb +97 -0
- data/lib/amp/encoding/binary_diff.rb +82 -0
- data/lib/amp/encoding/difflib.rb +166 -0
- data/lib/amp/encoding/mercurial_diff.rb +378 -0
- data/lib/amp/encoding/mercurial_patch.rb +1 -0
- data/lib/amp/encoding/patch.rb +292 -0
- data/lib/amp/encoding/pure_ruby/ruby_mercurial_patch.rb +123 -0
- data/lib/amp/extensions/ditz.rb +41 -0
- data/lib/amp/extensions/lighthouse.rb +167 -0
- data/lib/amp/graphs/ancestor.rb +147 -0
- data/lib/amp/graphs/copies.rb +261 -0
- data/lib/amp/merges/merge_state.rb +164 -0
- data/lib/amp/merges/merge_ui.rb +322 -0
- data/lib/amp/merges/simple_merge.rb +450 -0
- data/lib/amp/profiling_hacks.rb +36 -0
- data/lib/amp/repository/branch_manager.rb +234 -0
- data/lib/amp/repository/dir_state.rb +950 -0
- data/lib/amp/repository/journal.rb +203 -0
- data/lib/amp/repository/lock.rb +207 -0
- data/lib/amp/repository/repositories/bundle_repository.rb +214 -0
- data/lib/amp/repository/repositories/http_repository.rb +377 -0
- data/lib/amp/repository/repositories/local_repository.rb +2661 -0
- data/lib/amp/repository/repository.rb +94 -0
- data/lib/amp/repository/store.rb +485 -0
- data/lib/amp/repository/tag_manager.rb +319 -0
- data/lib/amp/repository/updatable.rb +532 -0
- data/lib/amp/repository/verification.rb +431 -0
- data/lib/amp/repository/versioned_file.rb +475 -0
- data/lib/amp/revlogs/bundle_revlogs.rb +246 -0
- data/lib/amp/revlogs/changegroup.rb +217 -0
- data/lib/amp/revlogs/changelog.rb +338 -0
- data/lib/amp/revlogs/changeset.rb +521 -0
- data/lib/amp/revlogs/file_log.rb +165 -0
- data/lib/amp/revlogs/index.rb +493 -0
- data/lib/amp/revlogs/manifest.rb +195 -0
- data/lib/amp/revlogs/node.rb +18 -0
- data/lib/amp/revlogs/revlog.rb +1032 -0
- data/lib/amp/revlogs/revlog_support.rb +126 -0
- data/lib/amp/server/amp_user.rb +44 -0
- data/lib/amp/server/extension/amp_extension.rb +396 -0
- data/lib/amp/server/extension/authorization.rb +201 -0
- data/lib/amp/server/fancy_http_server.rb +252 -0
- data/lib/amp/server/fancy_views/_browser.haml +28 -0
- data/lib/amp/server/fancy_views/_diff_file.haml +13 -0
- data/lib/amp/server/fancy_views/_navbar.haml +17 -0
- data/lib/amp/server/fancy_views/changeset.haml +31 -0
- data/lib/amp/server/fancy_views/commits.haml +32 -0
- data/lib/amp/server/fancy_views/file.haml +35 -0
- data/lib/amp/server/fancy_views/file_diff.haml +23 -0
- data/lib/amp/server/fancy_views/harshcss/all_hallows_eve.css +72 -0
- data/lib/amp/server/fancy_views/harshcss/amy.css +147 -0
- data/lib/amp/server/fancy_views/harshcss/twilight.css +138 -0
- data/lib/amp/server/fancy_views/stylesheet.sass +175 -0
- data/lib/amp/server/http_server.rb +140 -0
- data/lib/amp/server/repo_user_management.rb +287 -0
- data/lib/amp/support/amp_config.rb +164 -0
- data/lib/amp/support/amp_ui.rb +287 -0
- data/lib/amp/support/docs.rb +54 -0
- data/lib/amp/support/generator.rb +78 -0
- data/lib/amp/support/ignore.rb +144 -0
- data/lib/amp/support/loaders.rb +93 -0
- data/lib/amp/support/logger.rb +103 -0
- data/lib/amp/support/match.rb +151 -0
- data/lib/amp/support/multi_io.rb +87 -0
- data/lib/amp/support/openers.rb +121 -0
- data/lib/amp/support/ruby_19_compatibility.rb +66 -0
- data/lib/amp/support/support.rb +1095 -0
- data/lib/amp/templates/blank.commit.erb +23 -0
- data/lib/amp/templates/blank.log.erb +18 -0
- data/lib/amp/templates/default.commit.erb +23 -0
- data/lib/amp/templates/default.log.erb +26 -0
- data/lib/amp/templates/template.rb +165 -0
- data/site/Rakefile +24 -0
- data/site/src/about/ampfile.haml +57 -0
- data/site/src/about/commands.haml +106 -0
- data/site/src/about/index.haml +33 -0
- data/site/src/about/performance.haml +31 -0
- data/site/src/about/workflows.haml +34 -0
- data/site/src/contribute/index.haml +65 -0
- data/site/src/contribute/style.haml +297 -0
- data/site/src/css/active4d.css +114 -0
- data/site/src/css/all_hallows_eve.css +72 -0
- data/site/src/css/all_themes.css +3299 -0
- data/site/src/css/amp.css +260 -0
- data/site/src/css/amy.css +147 -0
- data/site/src/css/blackboard.css +88 -0
- data/site/src/css/brilliance_black.css +605 -0
- data/site/src/css/brilliance_dull.css +599 -0
- data/site/src/css/cobalt.css +149 -0
- data/site/src/css/cur_amp.css +185 -0
- data/site/src/css/dawn.css +121 -0
- data/site/src/css/eiffel.css +121 -0
- data/site/src/css/espresso_libre.css +109 -0
- data/site/src/css/idle.css +62 -0
- data/site/src/css/iplastic.css +80 -0
- data/site/src/css/lazy.css +73 -0
- data/site/src/css/mac_classic.css +123 -0
- data/site/src/css/magicwb_amiga.css +104 -0
- data/site/src/css/pastels_on_dark.css +188 -0
- data/site/src/css/reset.css +55 -0
- data/site/src/css/slush_poppies.css +85 -0
- data/site/src/css/spacecadet.css +51 -0
- data/site/src/css/sunburst.css +180 -0
- data/site/src/css/twilight.css +137 -0
- data/site/src/css/zenburnesque.css +91 -0
- data/site/src/get/index.haml +32 -0
- data/site/src/helpers.rb +121 -0
- data/site/src/images/amp_logo.png +0 -0
- data/site/src/images/carbonica.png +0 -0
- data/site/src/images/revolution.png +0 -0
- data/site/src/images/tab-bg.png +0 -0
- data/site/src/images/tab-sliding-left.png +0 -0
- data/site/src/images/tab-sliding-right.png +0 -0
- data/site/src/include/_footer.haml +22 -0
- data/site/src/include/_header.haml +17 -0
- data/site/src/index.haml +104 -0
- data/site/src/learn/index.haml +46 -0
- data/site/src/scripts/jquery-1.3.2.min.js +19 -0
- data/site/src/scripts/jquery.cookie.js +96 -0
- data/tasks/stats.rake +155 -0
- data/tasks/yard.rake +171 -0
- data/test/dirstate_tests/dirstate +0 -0
- data/test/dirstate_tests/hgrc +5 -0
- data/test/dirstate_tests/test_dir_state.rb +192 -0
- data/test/functional_tests/resources/.hgignore +2 -0
- data/test/functional_tests/resources/STYLE.txt +25 -0
- data/test/functional_tests/resources/command.rb +372 -0
- data/test/functional_tests/resources/commands/annotate.rb +57 -0
- data/test/functional_tests/resources/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/commands/heads.rb +22 -0
- data/test/functional_tests/resources/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/commands/status.rb +90 -0
- data/test/functional_tests/resources/version2/.hgignore +5 -0
- data/test/functional_tests/resources/version2/STYLE.txt +25 -0
- data/test/functional_tests/resources/version2/command.rb +372 -0
- data/test/functional_tests/resources/version2/commands/annotate.rb +45 -0
- data/test/functional_tests/resources/version2/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/version2/commands/heads.rb +22 -0
- data/test/functional_tests/resources/version2/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/version2/commands/status.rb +90 -0
- data/test/functional_tests/resources/version3/.hgignore +5 -0
- data/test/functional_tests/resources/version3/STYLE.txt +31 -0
- data/test/functional_tests/resources/version3/command.rb +376 -0
- data/test/functional_tests/resources/version3/commands/annotate.rb +45 -0
- data/test/functional_tests/resources/version3/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/version3/commands/heads.rb +22 -0
- data/test/functional_tests/resources/version3/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/version3/commands/status.rb +90 -0
- data/test/functional_tests/resources/version4/.hgignore +5 -0
- data/test/functional_tests/resources/version4/STYLE.txt +31 -0
- data/test/functional_tests/resources/version4/command.rb +376 -0
- data/test/functional_tests/resources/version4/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/version4/commands/heads.rb +22 -0
- data/test/functional_tests/resources/version4/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/version4/commands/stats.rb +25 -0
- data/test/functional_tests/resources/version4/commands/status.rb +90 -0
- data/test/functional_tests/resources/version5_1/.hgignore +5 -0
- data/test/functional_tests/resources/version5_1/STYLE.txt +2 -0
- data/test/functional_tests/resources/version5_1/command.rb +374 -0
- data/test/functional_tests/resources/version5_1/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/version5_1/commands/heads.rb +22 -0
- data/test/functional_tests/resources/version5_1/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/version5_1/commands/stats.rb +25 -0
- data/test/functional_tests/resources/version5_1/commands/status.rb +90 -0
- data/test/functional_tests/resources/version5_2/.hgignore +5 -0
- data/test/functional_tests/resources/version5_2/STYLE.txt +14 -0
- data/test/functional_tests/resources/version5_2/command.rb +376 -0
- data/test/functional_tests/resources/version5_2/commands/experimental/lolcats.rb +17 -0
- data/test/functional_tests/resources/version5_2/commands/manifest.rb +12 -0
- data/test/functional_tests/resources/version5_2/commands/newz.rb +12 -0
- data/test/functional_tests/resources/version5_2/commands/stats.rb +25 -0
- data/test/functional_tests/resources/version5_2/commands/status.rb +90 -0
- data/test/functional_tests/test_functional.rb +604 -0
- data/test/localrepo_tests/test_local_repo.rb +121 -0
- data/test/localrepo_tests/testrepo.tar.gz +0 -0
- data/test/manifest_tests/00manifest.i +0 -0
- data/test/manifest_tests/test_manifest.rb +72 -0
- data/test/merge_tests/base.txt +10 -0
- data/test/merge_tests/expected.local.txt +16 -0
- data/test/merge_tests/local.txt +11 -0
- data/test/merge_tests/remote.txt +11 -0
- data/test/merge_tests/test_merge.rb +26 -0
- data/test/revlog_tests/00changelog.i +0 -0
- data/test/revlog_tests/revision_added_changelog.i +0 -0
- data/test/revlog_tests/test_adding_index.i +0 -0
- data/test/revlog_tests/test_revlog.rb +333 -0
- data/test/revlog_tests/testindex.i +0 -0
- data/test/store_tests/store.tar.gz +0 -0
- data/test/store_tests/test_fncache_store.rb +122 -0
- data/test/test_amp.rb +9 -0
- data/test/test_base85.rb +14 -0
- data/test/test_bdiff.rb +42 -0
- data/test/test_commands.rb +122 -0
- data/test/test_difflib.rb +50 -0
- data/test/test_helper.rb +15 -0
- data/test/test_journal.rb +29 -0
- data/test/test_match.rb +134 -0
- data/test/test_mdiff.rb +74 -0
- data/test/test_mpatch.rb +14 -0
- data/test/test_support.rb +24 -0
- metadata +385 -0
@@ -0,0 +1,250 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include "ruby.h"
|
4
|
+
|
5
|
+
static int little_endian = -1;
|
6
|
+
|
7
|
+
// these defines are taken from the mercurial source. They're relatively standard for
|
8
|
+
// byte-swapping, but credit goes where credit's due.
|
9
|
+
#ifdef _WIN32
|
10
|
+
# ifdef _MSC_VER
|
11
|
+
/* msvc 6.0 has problems */
|
12
|
+
# define inline __inline
|
13
|
+
typedef unsigned long uint32_t;
|
14
|
+
typedef unsigned __int64 uint64_t;
|
15
|
+
# else
|
16
|
+
# include <stdint.h>
|
17
|
+
# endif
|
18
|
+
static uint32_t ntohl(uint32_t x)
|
19
|
+
{
|
20
|
+
return ((x & 0x000000ffUL) << 24) |
|
21
|
+
((x & 0x0000ff00UL) << 8) |
|
22
|
+
((x & 0x00ff0000UL) >> 8) |
|
23
|
+
((x & 0xff000000UL) >> 24);
|
24
|
+
}
|
25
|
+
#else
|
26
|
+
/* not windows */
|
27
|
+
# include <sys/types.h>
|
28
|
+
# if defined __BEOS__ && !defined __HAIKU__
|
29
|
+
# include <ByteOrder.h>
|
30
|
+
# else
|
31
|
+
# include <arpa/inet.h>
|
32
|
+
# endif
|
33
|
+
# include <inttypes.h>
|
34
|
+
#endif
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Byte-swaps a 64-bit fixnum.
|
38
|
+
* Bignum arithmetic is quite, quite slow. By implementing this in C, we save ourselves
|
39
|
+
* innumerable cycles. Also, our result will usually end up being a bignum, even though we
|
40
|
+
* start as a fixnum.
|
41
|
+
*
|
42
|
+
* @param self [in] the bignum that needs byte swapping
|
43
|
+
* @return the byte-swapped number (or not swapped if host is big-endian)
|
44
|
+
*/
|
45
|
+
static VALUE amp_fixnum_byte_swap_64(VALUE self) {
|
46
|
+
VALUE result = self;
|
47
|
+
if (little_endian) {
|
48
|
+
uint64_t val = (uint64_t)FIX2ULONG(self);
|
49
|
+
val = (((val >> 56)) | ((val & 0x00FF000000000000ll) >> 40) |
|
50
|
+
((val & 0x0000FF0000000000ll) >> 24) | ((val & 0x000000FF00000000ll) >> 8) |
|
51
|
+
((val & 0x00000000FF000000ll) << 8 ) | ((val & 0x0000000000FF0000ll) << 24) |
|
52
|
+
((val & 0x000000000000FF00ll) << 40) | ((val & 0x00000000000000FFll) << 56));
|
53
|
+
result = rb_ull2inum(val);
|
54
|
+
}
|
55
|
+
return result;
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Converts an unsigned, 16-bit fixnum to a signed, 16-bit value.
|
60
|
+
* Converts an unsigned, 16-bit number to its signed equivalent.
|
61
|
+
* Since Ruby doesn't have signed values readily available, this is much
|
62
|
+
* much faster in C.
|
63
|
+
*
|
64
|
+
* @param self [in] the 16-bit unsigned short to make signed
|
65
|
+
* @return the 16-bit signed equivalent
|
66
|
+
*/
|
67
|
+
static VALUE amp_fixnum_to_signed_16(VALUE self) {
|
68
|
+
signed short val = (int16_t)FIX2INT(self);
|
69
|
+
VALUE result = rb_int_new(val);
|
70
|
+
return result;
|
71
|
+
}
|
72
|
+
|
73
|
+
/**
|
74
|
+
* Converts a fixnum to a signed, 32-bit value.
|
75
|
+
* Converts an unsigned, 32-bit number to its signed equivalent. Since Ruby
|
76
|
+
* doesn't have signed values readily available, this is much much faster in
|
77
|
+
* C. This will only be called if the number being converted is smaller than
|
78
|
+
* the fixnum max.
|
79
|
+
*
|
80
|
+
* @param self [in] the 32-bit unsigned long to make signed
|
81
|
+
* @return the 32-bit signed equivalent
|
82
|
+
*/
|
83
|
+
static VALUE amp_fixnum_to_signed_32(VALUE self) {
|
84
|
+
VALUE result = rb_int_new((int32_t)FIX2LONG(self));
|
85
|
+
return result;
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Byte-swaps a 64-bit bignum.
|
90
|
+
* Bignum arithmetic is quite, quite slow. By implementing this in C, we save ourselves
|
91
|
+
* innumerable cycles.
|
92
|
+
*
|
93
|
+
* @param self [in] the bignum that needs byte swapping
|
94
|
+
* @return the byte-swapped bignum (or not swapped if host is big-endian)
|
95
|
+
*/
|
96
|
+
static VALUE amp_bignum_byte_swap_64(VALUE self) {
|
97
|
+
VALUE result = self;
|
98
|
+
if (little_endian) {
|
99
|
+
uint64_t val = rb_big2ull(self);
|
100
|
+
val = (((val >> 56)) | ((val & 0x00FF000000000000ull) >> 40) |
|
101
|
+
((val & 0x0000FF0000000000ull) >> 24) | ((val & 0x000000FF00000000ull) >> 8) |
|
102
|
+
((val & 0x00000000FF000000) << 8 ) | ((val & 0x0000000000FF0000) << 24) |
|
103
|
+
((val & 0x000000000000FF00) << 40) | ((val & 0x00000000000000FF) << 56));
|
104
|
+
result = rb_ull2inum(val);
|
105
|
+
}
|
106
|
+
return result;
|
107
|
+
}
|
108
|
+
|
109
|
+
/**
|
110
|
+
* Converts a bignum to a signed, 32-bit value.
|
111
|
+
* Converts an unsigned, 32-bit number to its signed equivalent. Since Ruby
|
112
|
+
* doesn't have signed values readily available, this is much much faster in
|
113
|
+
* C.
|
114
|
+
*
|
115
|
+
* @param self [in] the 32-bit unsigned long to make signed
|
116
|
+
* @return the 32-bit signed equivalent
|
117
|
+
*/
|
118
|
+
static VALUE amp_bignum_to_signed_32(VALUE self) {
|
119
|
+
VALUE result = rb_int_new((int32_t)rb_big2ulong(self));
|
120
|
+
return result;
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* Converts a bignum to a signed, 16-bit value.
|
125
|
+
* Converts an unsigned, 16-bit number to its signed equivalent.
|
126
|
+
* This should actually never be called, because bignums shouldn't
|
127
|
+
* ever be used for 16-bit values. However, it's provided just to be safe.
|
128
|
+
* Since Ruby doesn't have signed values readily available, this is much
|
129
|
+
* much faster in C.
|
130
|
+
*
|
131
|
+
* @param self [in] the 16-bit unsigned short to make signed
|
132
|
+
* @return the 16-bit signed equivalent
|
133
|
+
*/
|
134
|
+
static VALUE amp_bignum_to_signed_16(VALUE self) {
|
135
|
+
signed short val = (int16_t)rb_big2ulong(self); // cut off bytes
|
136
|
+
VALUE result = rb_int_new(val);
|
137
|
+
return result;
|
138
|
+
}
|
139
|
+
|
140
|
+
// constant symbols that our dirstate would like
|
141
|
+
static VALUE rb_sRemoved, rb_sUntracked, rb_sNormal, rb_sMerged, rb_sAdded;
|
142
|
+
|
143
|
+
/**
|
144
|
+
* Converts an ascii value to a dirstate status symbol.
|
145
|
+
* Converts a fixnum, which is an ascii value, to a symbol representing
|
146
|
+
* a dirstate entry's status. Since we don't like passing around 'n', and
|
147
|
+
* want to pass around :normal, we need a fast lookup for ascii value ->
|
148
|
+
* symbol. The price we pay.
|
149
|
+
*
|
150
|
+
* @param self [in] the integer ascii value to convert
|
151
|
+
* @return a symbol representation of the dirstate status
|
152
|
+
*/
|
153
|
+
static VALUE amp_integer_to_dirstate_symbol(VALUE self) {
|
154
|
+
int val = NUM2INT(self);
|
155
|
+
switch (val) {
|
156
|
+
case 110: return rb_sNormal; // 'n'
|
157
|
+
case 63: return rb_sUntracked; // '?'
|
158
|
+
case 97: return rb_sAdded; // 'a'
|
159
|
+
case 109: return rb_sMerged; // 'm'
|
160
|
+
case 114: return rb_sRemoved; // 'r'
|
161
|
+
}
|
162
|
+
rb_raise(rb_eStandardError, "no known hg value for %d", val);
|
163
|
+
}
|
164
|
+
|
165
|
+
/**
|
166
|
+
* Converts a string of hexademical into its binary representation.
|
167
|
+
* Method on strings. When the data in the string is hexademical
|
168
|
+
* (such as "DEADBEEF"), this method decodes the hex and converts
|
169
|
+
* every 2 bytes into its 1-byte binary representation.
|
170
|
+
*
|
171
|
+
* @example "414243".unhexlify == "ABC"
|
172
|
+
* @param self [in] the string object to unhexlify
|
173
|
+
* @return A decoded, binary string
|
174
|
+
*/
|
175
|
+
static VALUE amp_string_unhexlify(VALUE self) {
|
176
|
+
// lengths of our strings
|
177
|
+
unsigned int len, out_len;
|
178
|
+
VALUE out;
|
179
|
+
// byte buffers that we'll work with when unhexlifying
|
180
|
+
char *out_buf, *in_buf;
|
181
|
+
char chk;
|
182
|
+
|
183
|
+
len = RSTRING_LEN(self);
|
184
|
+
// 2 hex bytes -> 1 unhexlified byte
|
185
|
+
out_len = len / 2;
|
186
|
+
out = rb_str_new(NULL, out_len);
|
187
|
+
|
188
|
+
// mark it as modified otherwise the GC will wig out at us
|
189
|
+
rb_str_modify(out);
|
190
|
+
// snag some pointers so we can do bad things
|
191
|
+
in_buf = RSTRING_PTR(self);
|
192
|
+
out_buf = RSTRING_PTR(out);
|
193
|
+
|
194
|
+
while (len) {
|
195
|
+
// first byte is multiplied by 16
|
196
|
+
chk = *in_buf++;
|
197
|
+
if (chk >= '0' && chk <= '9')
|
198
|
+
*out_buf = 16 * (chk - '0');
|
199
|
+
else if (chk >= 'A' && chk <= 'F')
|
200
|
+
*out_buf = 16 * (chk - 'A' + 10);
|
201
|
+
else if (chk >= 'a' && chk <= 'f')
|
202
|
+
*out_buf = 16 * (chk - 'a' + 10);
|
203
|
+
// second byte is just added to result
|
204
|
+
chk = *in_buf++;
|
205
|
+
if (chk >= '0' && chk <= '9')
|
206
|
+
*out_buf += (chk - '0');
|
207
|
+
else if (chk >= 'A' && chk <= 'F')
|
208
|
+
*out_buf += (chk - 'A' + 10);
|
209
|
+
else if (chk >= 'a' && chk <= 'f')
|
210
|
+
*out_buf += (chk - 'a' + 10);
|
211
|
+
out_buf++;
|
212
|
+
// 2 hex bytes down
|
213
|
+
len -= 2;
|
214
|
+
}
|
215
|
+
return out;
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* Initializes the Support module's C extension.
|
220
|
+
* This function is the entry point to the module - when the code is require'd,
|
221
|
+
* this function is run. All we need to do is add the new methods, and look up the
|
222
|
+
* symbols for to_dirstate_symbol.
|
223
|
+
*/
|
224
|
+
void Init_Support() {
|
225
|
+
if (little_endian == -1) little_endian = (ntohl(8) != 8);
|
226
|
+
|
227
|
+
// methods added to String class
|
228
|
+
rb_define_method(rb_cString, "unhexlify", amp_string_unhexlify, 0);
|
229
|
+
|
230
|
+
// methods added to the Bignum class
|
231
|
+
rb_define_method(rb_cBignum, "byte_swap_64", amp_bignum_byte_swap_64, 0);
|
232
|
+
rb_define_method(rb_cBignum, "to_signed_32", amp_bignum_to_signed_32, 0);
|
233
|
+
rb_define_method(rb_cBignum, "to_signed_16", amp_bignum_to_signed_16, 0);
|
234
|
+
|
235
|
+
// methods added to the Fixnum class
|
236
|
+
rb_define_method(rb_cFixnum, "byte_swap_64", amp_fixnum_byte_swap_64, 0);
|
237
|
+
rb_define_method(rb_cFixnum, "to_signed_32", amp_fixnum_to_signed_32, 0);
|
238
|
+
rb_define_method(rb_cFixnum, "to_signed_16", amp_fixnum_to_signed_16, 0);
|
239
|
+
|
240
|
+
// Since symbols are only ever created once, let's look them up now, and never
|
241
|
+
// look them up again!
|
242
|
+
rb_sRemoved = ID2SYM(rb_intern("removed"));
|
243
|
+
rb_sUntracked = ID2SYM(rb_intern("untracked"));
|
244
|
+
rb_sNormal = ID2SYM(rb_intern("normal"));
|
245
|
+
rb_sMerged = ID2SYM(rb_intern("merged"));
|
246
|
+
rb_sAdded = ID2SYM(rb_intern("added"));
|
247
|
+
|
248
|
+
// method added to the Integer class
|
249
|
+
rb_define_method(rb_cInteger, "to_dirstate_symbol", amp_integer_to_dirstate_symbol, 0);
|
250
|
+
}
|
data/lib/amp.rb
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
module Amp; end
|
2
|
+
# The root directory of this application
|
3
|
+
Amp::CODE_ROOT = File.expand_path File.dirname(__FILE__)
|
4
|
+
$: << Amp::CODE_ROOT # now we don't need to do `require "#{curdir}..."
|
5
|
+
|
6
|
+
# Timing variable
|
7
|
+
$start ||= Time.now
|
8
|
+
# Should we display anything?
|
9
|
+
$display ||= false
|
10
|
+
# Should we use pure ruby? Default to no.
|
11
|
+
$USE_RUBY ||= false
|
12
|
+
# Are we a command-line app? Default to no.
|
13
|
+
$cl ||= false
|
14
|
+
|
15
|
+
require "amp/support/loaders.rb"
|
16
|
+
|
17
|
+
#require 'profile'
|
18
|
+
require 'fileutils'
|
19
|
+
require 'stringio'
|
20
|
+
|
21
|
+
local_start = Time.now
|
22
|
+
|
23
|
+
|
24
|
+
###############
|
25
|
+
# The Amp Magic
|
26
|
+
###############
|
27
|
+
module Amp
|
28
|
+
|
29
|
+
autoload :Hook, "amp/commands/hooks.rb"
|
30
|
+
autoload :Generator, "amp/support/generator.rb"
|
31
|
+
autoload :Opener, "amp/support/openers.rb"
|
32
|
+
autoload :Match, "amp/support/match.rb"
|
33
|
+
autoload :Ignore, "amp/support/ignore.rb"
|
34
|
+
autoload :AmpConfig, "amp/support/amp_config.rb"
|
35
|
+
autoload :UI, "amp/support/amp_ui.rb"
|
36
|
+
|
37
|
+
autoload :Journal, "amp/repository/journal.rb"
|
38
|
+
autoload :VersionedFile, "amp/repository/versioned_file.rb"
|
39
|
+
autoload :VersionedWorkingFile, "amp/repository/versioned_file.rb"
|
40
|
+
|
41
|
+
autoload :Revlog, "amp/revlogs/revlog.rb"
|
42
|
+
autoload :Manifest, "amp/revlogs/manifest.rb"
|
43
|
+
autoload :FileLog, "amp/revlogs/file_log.rb"
|
44
|
+
autoload :Changeset, "amp/revlogs/changeset.rb"
|
45
|
+
autoload :WorkingDirectoryChangeset, "amp/revlogs/changeset.rb"
|
46
|
+
autoload :ChangeGroup, "amp/revlogs/changegroup.rb"
|
47
|
+
autoload :ChangeLog, "amp/revlogs/changelog.rb"
|
48
|
+
|
49
|
+
module Bundles
|
50
|
+
autoload :BundleChangeLog, "amp/revlogs/bundle_revlogs.rb"
|
51
|
+
autoload :BundleFileLog, "amp/revlogs/bundle_revlogs.rb"
|
52
|
+
autoload :BundleManifest, "amp/revlogs/bundle_revlogs.rb"
|
53
|
+
autoload :BundleRevlog, "amp/revlogs/bundle_revlogs.rb"
|
54
|
+
end
|
55
|
+
|
56
|
+
module Encoding
|
57
|
+
autoload :Base85, "amp/encoding/base85.rb"
|
58
|
+
end
|
59
|
+
|
60
|
+
module Diffs
|
61
|
+
autoload :BinaryDiff, "amp/encoding/binary_diff.rb"
|
62
|
+
autoload :MercurialDiff, "amp/encoding/mercurial_diff.rb"
|
63
|
+
autoload :MercurialPatch, "amp/encoding/mercurial_patch.rb"
|
64
|
+
autoload :SequenceMatcher, "amp/encoding/difflib.rb"
|
65
|
+
end
|
66
|
+
|
67
|
+
module Graphs
|
68
|
+
autoload :AncestorCalculator, "amp/graphs/ancestor.rb"
|
69
|
+
autoload :CopyCalculator, "amp/graphs/copies.rb"
|
70
|
+
end
|
71
|
+
|
72
|
+
module Merges
|
73
|
+
autoload :MergeState, "amp/merges/merge_state.rb"
|
74
|
+
autoload :MergeUI, "amp/merges/merge_ui.rb"
|
75
|
+
autoload :ThreeWayMerger, "amp/merges/simple_merge.rb"
|
76
|
+
end
|
77
|
+
|
78
|
+
module Repositories
|
79
|
+
autoload :BranchManager, "amp/repository/branch_manager.rb"
|
80
|
+
autoload :BundleRepository, "amp/repository/repositories/bundle_repository.rb"
|
81
|
+
autoload :DirState, "amp/repository/dir_state.rb"
|
82
|
+
autoload :HTTPRepository, "amp/repository/repositories/http_repository.rb"
|
83
|
+
autoload :HTTPSRepository, "amp/repository/repositories/http_repository.rb"
|
84
|
+
autoload :LocalRepository, "amp/repository/repositories/local_repository.rb"
|
85
|
+
autoload :Lock, "amp/repository/lock.rb"
|
86
|
+
autoload :Stores, "amp/repository/store.rb"
|
87
|
+
autoload :TagManager, "amp/repository/tag_manager.rb"
|
88
|
+
autoload :Updatable, "amp/repository/updatable.rb"
|
89
|
+
autoload :Verification, "amp/repository/verification.rb"
|
90
|
+
end
|
91
|
+
|
92
|
+
module RevlogSupport
|
93
|
+
autoload :ChangeGroup, "amp/revlogs/changegroup.rb"
|
94
|
+
autoload :Index, "amp/revlogs/index.rb"
|
95
|
+
autoload :IndexInlineNG, "amp/revlogs/index.rb"
|
96
|
+
autoload :IndexVersion0, "amp/revlogs/index.rb"
|
97
|
+
autoload :IndexVersionNG, "amp/revlogs/index.rb"
|
98
|
+
autoload :Node, "amp/revlogs/node.rb"
|
99
|
+
autoload :Support, "amp/revlogs/revlog_support.rb"
|
100
|
+
end
|
101
|
+
|
102
|
+
module Servers
|
103
|
+
autoload :FancyHTTPServer, "amp/server/fancy_http_server.rb"
|
104
|
+
autoload :HTTPServer, "amp/server/http_server.rb"
|
105
|
+
autoload :HTTPAuthorizedServer, "amp/server/http_server.rb"
|
106
|
+
autoload :RepoUserManagement, "amp/server/repo_user_management.rb"
|
107
|
+
autoload :User, "amp/server/amp_user.rb"
|
108
|
+
end
|
109
|
+
|
110
|
+
module Support
|
111
|
+
autoload :Logger, "amp/support/logger.rb"
|
112
|
+
autoload :MultiIO, "amp/support/multi_io.rb"
|
113
|
+
autoload :Template, "amp/templates/template.rb"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
#######################
|
118
|
+
# Sinatra modifications
|
119
|
+
#######################
|
120
|
+
module Sinatra
|
121
|
+
autoload :Amp, "amp/server/extension/amp_extension.rb"
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
###########################
|
126
|
+
# Globally accessible tools
|
127
|
+
###########################
|
128
|
+
autoload :Archive, "amp/dependencies/minitar.rb"
|
129
|
+
autoload :Zip, "amp/dependencies/zip/zip.rb"
|
130
|
+
autoload :PriorityQueue, "amp/dependencies/priority_queue.rb"
|
131
|
+
|
132
|
+
#############################
|
133
|
+
# Files we need to just *run*
|
134
|
+
#############################
|
135
|
+
require "amp/dependencies/trollop.rb"
|
136
|
+
require "amp/dependencies/python_config.rb"
|
137
|
+
require "amp/dependencies/amp_support.rb"
|
138
|
+
require "amp/support/ruby_19_compatibility.rb"
|
139
|
+
require "amp/support/support.rb"
|
140
|
+
require "amp/templates/template.rb"
|
141
|
+
|
142
|
+
if $cl # if it's a command line app
|
143
|
+
include Amp::KernelMethods
|
144
|
+
require "amp/commands/command.rb"
|
145
|
+
require_dir { "amp/commands/*.rb" }
|
146
|
+
require_dir { "amp/commands/commands/*.rb" }
|
147
|
+
|
148
|
+
else
|
149
|
+
# it's not a command line app
|
150
|
+
require 'amp/support/docs.rb' # live documentation access
|
151
|
+
end
|
152
|
+
require "amp/repository/repository.rb"
|
153
|
+
|
154
|
+
module Amp
|
155
|
+
VERSION = '0.5.0'
|
156
|
+
VERSION_TITLE = "John Locke"
|
157
|
+
|
158
|
+
def self.new_irb_session(bndng)
|
159
|
+
require 'irb'
|
160
|
+
|
161
|
+
# Alter IRB appropriately
|
162
|
+
# http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application/
|
163
|
+
::IRB.class_eval do
|
164
|
+
def self.start_session(binding)
|
165
|
+
unless @__initialized
|
166
|
+
args = ARGV
|
167
|
+
ARGV.replace(ARGV.dup)
|
168
|
+
IRB.setup(nil)
|
169
|
+
ARGV.replace(args)
|
170
|
+
@__initialized = true
|
171
|
+
end
|
172
|
+
|
173
|
+
workspace = WorkSpace.new(binding)
|
174
|
+
|
175
|
+
irb = Irb.new(workspace)
|
176
|
+
|
177
|
+
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
178
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
179
|
+
|
180
|
+
catch(:IRB_EXIT) do
|
181
|
+
irb.eval_input
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
IRB::start_session bndng
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
if ENV["TESTING"] == "true"
|
192
|
+
paused = Time.now
|
193
|
+
Amp::UI.debug "Time taken to load all files: #{paused - $start} seconds"
|
194
|
+
Amp::UI.debug "\t\t local files: #{paused - local_start} seconds"
|
195
|
+
Amp::UI.debug
|
196
|
+
Amp::UI.debug
|
197
|
+
end
|
198
|
+
|
199
|
+
# Benchmarking stuff
|
200
|
+
#need { 'amp/profiling_hacks' }
|