amp 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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' }
|