##// END OF EJS Templates
renamed setup module into a setup_rhodecode....
marcink -
r2289:5893414d beta
parent child Browse files
Show More
@@ -1,87 +1,87 b''
1 import os
1 import os
2 from paste.script.appinstall import AbstractInstallCommand
2 from paste.script.appinstall import AbstractInstallCommand
3 from paste.script.command import BadCommand
3 from paste.script.command import BadCommand
4 from paste.deploy import appconfig
4 from paste.deploy import appconfig
5
5
6
6
7 class SetupCommand(AbstractInstallCommand):
7 class SetupCommand(AbstractInstallCommand):
8
8
9 default_verbosity = 1
9 default_verbosity = 1
10 max_args = 1
10 max_args = 1
11 min_args = 1
11 min_args = 1
12 summary = "Setup an application, given a config file"
12 summary = "Setup an application, given a config file"
13 usage = "CONFIG_FILE"
13 usage = "CONFIG_FILE"
14
14
15 description = """\
15 description = """\
16 Note: this is an experimental command, and it will probably change
16 Note: this is an experimental command, and it will probably change
17 in several ways by the next release.
17 in several ways by the next release.
18
18
19 Setup an application according to its configuration file. This is
19 Setup an application according to its configuration file. This is
20 the second part of a two-phase web application installation
20 the second part of a two-phase web application installation
21 process (the first phase is prepare-app). The setup process may
21 process (the first phase is prepare-app). The setup process may
22 consist of things like creating directories and setting up
22 consist of things like creating directories and setting up
23 databases.
23 databases.
24 """
24 """
25
25
26 parser = AbstractInstallCommand.standard_parser(
26 parser = AbstractInstallCommand.standard_parser(
27 simulate=True, quiet=True, interactive=True)
27 simulate=True, quiet=True, interactive=True)
28 parser.add_option('--user',
28 parser.add_option('--user',
29 action='store',
29 action='store',
30 dest='username',
30 dest='username',
31 default=None,
31 default=None,
32 help='Admin Username')
32 help='Admin Username')
33 parser.add_option('--email',
33 parser.add_option('--email',
34 action='store',
34 action='store',
35 dest='email',
35 dest='email',
36 default=None,
36 default=None,
37 help='Admin Email')
37 help='Admin Email')
38 parser.add_option('--password',
38 parser.add_option('--password',
39 action='store',
39 action='store',
40 dest='password',
40 dest='password',
41 default=None,
41 default=None,
42 help='Admin password min 6 chars')
42 help='Admin password min 6 chars')
43 parser.add_option('--repos',
43 parser.add_option('--repos',
44 action='store',
44 action='store',
45 dest='repos_location',
45 dest='repos_location',
46 default=None,
46 default=None,
47 help='Absolute path to repositories location')
47 help='Absolute path to repositories location')
48 parser.add_option('--name',
48 parser.add_option('--name',
49 action='store',
49 action='store',
50 dest='section_name',
50 dest='section_name',
51 default=None,
51 default=None,
52 help='The name of the section to set up (default: app:main)')
52 help='The name of the section to set up (default: app:main)')
53
53
54 def command(self):
54 def command(self):
55 config_spec = self.args[0]
55 config_spec = self.args[0]
56 section = self.options.section_name
56 section = self.options.section_name
57 if section is None:
57 if section is None:
58 if '#' in config_spec:
58 if '#' in config_spec:
59 config_spec, section = config_spec.split('#', 1)
59 config_spec, section = config_spec.split('#', 1)
60 else:
60 else:
61 section = 'main'
61 section = 'main'
62 if not ':' in section:
62 if not ':' in section:
63 plain_section = section
63 plain_section = section
64 section = 'app:'+section
64 section = 'app:'+section
65 else:
65 else:
66 plain_section = section.split(':', 1)[0]
66 plain_section = section.split(':', 1)[0]
67 if not config_spec.startswith('config:'):
67 if not config_spec.startswith('config:'):
68 config_spec = 'config:' + config_spec
68 config_spec = 'config:' + config_spec
69 if plain_section != 'main':
69 if plain_section != 'main':
70 config_spec += '#' + plain_section
70 config_spec += '#' + plain_section
71 config_file = config_spec[len('config:'):].split('#', 1)[0]
71 config_file = config_spec[len('config:'):].split('#', 1)[0]
72 config_file = os.path.join(os.getcwd(), config_file)
72 config_file = os.path.join(os.getcwd(), config_file)
73 self.logging_file_config(config_file)
73 self.logging_file_config(config_file)
74 conf = appconfig(config_spec, relative_to=os.getcwd())
74 conf = appconfig(config_spec, relative_to=os.getcwd())
75 ep_name = conf.context.entry_point_name
75 ep_name = conf.context.entry_point_name
76 ep_group = conf.context.protocol
76 ep_group = conf.context.protocol
77 dist = conf.context.distribution
77 dist = conf.context.distribution
78 if dist is None:
78 if dist is None:
79 raise BadCommand(
79 raise BadCommand(
80 "The section %r is not the application (probably a filter). "
80 "The section %r is not the application (probably a filter). "
81 "You should add #section_name, where section_name is the "
81 "You should add #section_name, where section_name is the "
82 "section that configures your application" % plain_section)
82 "section that configures your application" % plain_section)
83 installer = self.get_installer(dist, ep_group, ep_name)
83 installer = self.get_installer(dist, ep_group, ep_name)
84 installer.setup_config(
84 installer.setup_config(
85 self, config_file, section, self.sysconfig_install_vars(installer))
85 self, config_file, section, self.sysconfig_install_vars(installer))
86 self.call_sysconfig_functions(
86 self.call_sysconfig_functions(
87 'post_setup_hook', installer, config_file) No newline at end of file
87 'post_setup_hook', installer, config_file)
@@ -1,318 +1,318 b''
1 from rhodecode.tests import *
1 from rhodecode.tests import *
2
2
3 ARCHIVE_SPECS = {
3 ARCHIVE_SPECS = {
4 '.tar.bz2': ('application/x-bzip2', 'tbz2', ''),
4 '.tar.bz2': ('application/x-bzip2', 'tbz2', ''),
5 '.tar.gz': ('application/x-gzip', 'tgz', ''),
5 '.tar.gz': ('application/x-gzip', 'tgz', ''),
6 '.zip': ('application/zip', 'zip', ''),
6 '.zip': ('application/zip', 'zip', ''),
7 }
7 }
8
8
9
9
10 class TestFilesController(TestController):
10 class TestFilesController(TestController):
11
11
12 def test_index(self):
12 def test_index(self):
13 self.log_user()
13 self.log_user()
14 response = self.app.get(url(controller='files', action='index',
14 response = self.app.get(url(controller='files', action='index',
15 repo_name=HG_REPO,
15 repo_name=HG_REPO,
16 revision='tip',
16 revision='tip',
17 f_path='/'))
17 f_path='/'))
18 # Test response...
18 # Test response...
19 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/docs">docs</a>')
19 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/docs">docs</a>')
20 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/tests">tests</a>')
20 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/tests">tests</a>')
21 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/vcs">vcs</a>')
21 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/vcs">vcs</a>')
22 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/.hgignore">.hgignore</a>')
22 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/.hgignore">.hgignore</a>')
23 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/MANIFEST.in">MANIFEST.in</a>')
23 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/27cd5cce30c96924232dffcd24178a07ffeb5dfc/MANIFEST.in">MANIFEST.in</a>')
24
24
25 def test_index_revision(self):
25 def test_index_revision(self):
26 self.log_user()
26 self.log_user()
27
27
28 response = self.app.get(
28 response = self.app.get(
29 url(controller='files', action='index',
29 url(controller='files', action='index',
30 repo_name=HG_REPO,
30 repo_name=HG_REPO,
31 revision='7ba66bec8d6dbba14a2155be32408c435c5f4492',
31 revision='7ba66bec8d6dbba14a2155be32408c435c5f4492',
32 f_path='/')
32 f_path='/')
33 )
33 )
34
34
35 #Test response...
35 #Test response...
36
36
37 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/docs">docs</a>')
37 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/docs">docs</a>')
38 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/tests">tests</a>')
38 response.mustcontain('<a class="browser-dir ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/tests">tests</a>')
39 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/README.rst">README.rst</a>')
39 response.mustcontain('<a class="browser-file ypjax-link" href="/vcs_test_hg/files/7ba66bec8d6dbba14a2155be32408c435c5f4492/README.rst">README.rst</a>')
40 response.mustcontain('1.1 KiB')
40 response.mustcontain('1.1 KiB')
41 response.mustcontain('text/x-python')
41 response.mustcontain('text/x-python')
42
42
43 def test_index_different_branch(self):
43 def test_index_different_branch(self):
44 self.log_user()
44 self.log_user()
45
45
46 response = self.app.get(url(controller='files', action='index',
46 response = self.app.get(url(controller='files', action='index',
47 repo_name=HG_REPO,
47 repo_name=HG_REPO,
48 revision='97e8b885c04894463c51898e14387d80c30ed1ee',
48 revision='97e8b885c04894463c51898e14387d80c30ed1ee',
49 f_path='/'))
49 f_path='/'))
50
50
51 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: git</a></span>""")
51 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: git</a></span>""")
52
52
53 def test_index_paging(self):
53 def test_index_paging(self):
54 self.log_user()
54 self.log_user()
55
55
56 for r in [(73, 'a066b25d5df7016b45a41b7e2a78c33b57adc235'),
56 for r in [(73, 'a066b25d5df7016b45a41b7e2a78c33b57adc235'),
57 (92, 'cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e'),
57 (92, 'cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e'),
58 (109, '75feb4c33e81186c87eac740cee2447330288412'),
58 (109, '75feb4c33e81186c87eac740cee2447330288412'),
59 (1, '3d8f361e72ab303da48d799ff1ac40d5ac37c67e'),
59 (1, '3d8f361e72ab303da48d799ff1ac40d5ac37c67e'),
60 (0, 'b986218ba1c9b0d6a259fac9b050b1724ed8e545')]:
60 (0, 'b986218ba1c9b0d6a259fac9b050b1724ed8e545')]:
61
61
62 response = self.app.get(url(controller='files', action='index',
62 response = self.app.get(url(controller='files', action='index',
63 repo_name=HG_REPO,
63 repo_name=HG_REPO,
64 revision=r[1],
64 revision=r[1],
65 f_path='/'))
65 f_path='/'))
66
66
67 response.mustcontain("""@ r%s:%s""" % (r[0], r[1][:12]))
67 response.mustcontain("""@ r%s:%s""" % (r[0], r[1][:12]))
68
68
69 def test_file_source(self):
69 def test_file_source(self):
70 self.log_user()
70 self.log_user()
71 response = self.app.get(url(controller='files', action='index',
71 response = self.app.get(url(controller='files', action='index',
72 repo_name=HG_REPO,
72 repo_name=HG_REPO,
73 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
73 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
74 f_path='vcs/nodes.py'))
74 f_path='vcs/nodes.py'))
75
75
76 #test or history
76 #test or history
77 response.mustcontain("""<optgroup label="Changesets">
77 response.mustcontain("""<optgroup label="Changesets">
78 <option value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776 (default)</option>
78 <option value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776 (default)</option>
79 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35 (default)</option>
79 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35 (default)</option>
80 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c (default)</option>
80 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c (default)</option>
81 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329 (default)</option>
81 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329 (default)</option>
82 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf (git)</option>
82 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf (git)</option>
83 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81 (default)</option>
83 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81 (default)</option>
84 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc (default)</option>
84 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc (default)</option>
85 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21 (default)</option>
85 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21 (default)</option>
86 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2 (default)</option>
86 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2 (default)</option>
87 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85 (default)</option>
87 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85 (default)</option>
88 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2 (git)</option>
88 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2 (git)</option>
89 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93 (default)</option>
89 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93 (default)</option>
90 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b (default)</option>
90 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b (default)</option>
91 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455 (default)</option>
91 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455 (default)</option>
92 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32 (default)</option>
92 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32 (default)</option>
93 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0 (default)</option>
93 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0 (default)</option>
94 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081 (default)</option>
94 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081 (default)</option>
95 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad (default)</option>
95 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad (default)</option>
96 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7 (default)</option>
96 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7 (default)</option>
97 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059 (web)</option>
97 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059 (web)</option>
98 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb (web)</option>
98 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb (web)</option>
99 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1 (web)</option>
99 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1 (web)</option>
100 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71 (web)</option>
100 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71 (web)</option>
101 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771 (web)</option>
101 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771 (web)</option>
102 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526 (web)</option>
102 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526 (web)</option>
103 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4 (web)</option>
103 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4 (web)</option>
104 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b (web)</option>
104 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b (web)</option>
105 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c (web)</option>
105 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c (web)</option>
106 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1 (default)</option>
106 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1 (default)</option>
107 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5 (default)</option>
107 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5 (default)</option>
108 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283 (default)</option>
108 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283 (default)</option>
109 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6 (default)</option>
109 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6 (default)</option>
110 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3 (default)</option>
110 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3 (default)</option>
111 </optgroup>
111 </optgroup>
112 <optgroup label="Branches">
112 <optgroup label="Branches">
113 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
113 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
114 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
114 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
115 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
115 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
116 </optgroup>
116 </optgroup>
117 <optgroup label="Tags">
117 <optgroup label="Tags">
118 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
118 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
119 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
119 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
120 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
120 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
121 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
121 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
122 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
122 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
123 </optgroup>
123 </optgroup>
124 """)
124 """)
125
125
126 response.mustcontain("""<div class="commit">merge</div>""")
126 response.mustcontain("""<div class="commit">merge</div>""")
127
127
128 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
128 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
129
129
130 def test_file_annotation(self):
130 def test_file_annotation(self):
131 self.log_user()
131 self.log_user()
132 response = self.app.get(url(controller='files', action='index',
132 response = self.app.get(url(controller='files', action='index',
133 repo_name=HG_REPO,
133 repo_name=HG_REPO,
134 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
134 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
135 f_path='vcs/nodes.py',
135 f_path='vcs/nodes.py',
136 annotate=True))
136 annotate=True))
137
137
138
138
139 response.mustcontain("""<optgroup label="Changesets">
139 response.mustcontain("""<optgroup label="Changesets">
140 <option value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776 (default)</option>
140 <option value="8911406ad776fdd3d0b9932a2e89677e57405a48">r167:8911406ad776 (default)</option>
141 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35 (default)</option>
141 <option value="aa957ed78c35a1541f508d2ec90e501b0a9e3167">r165:aa957ed78c35 (default)</option>
142 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c (default)</option>
142 <option value="48e11b73e94c0db33e736eaeea692f990cb0b5f1">r140:48e11b73e94c (default)</option>
143 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329 (default)</option>
143 <option value="adf3cbf483298563b968a6c673cd5bde5f7d5eea">r126:adf3cbf48329 (default)</option>
144 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf (git)</option>
144 <option value="6249fd0fb2cfb1411e764129f598e2cf0de79a6f">r113:6249fd0fb2cf (git)</option>
145 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81 (default)</option>
145 <option value="75feb4c33e81186c87eac740cee2447330288412">r109:75feb4c33e81 (default)</option>
146 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc (default)</option>
146 <option value="9a4dc232ecdc763ef2e98ae2238cfcbba4f6ad8d">r108:9a4dc232ecdc (default)</option>
147 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21 (default)</option>
147 <option value="595cce4efa21fda2f2e4eeb4fe5f2a6befe6fa2d">r107:595cce4efa21 (default)</option>
148 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2 (default)</option>
148 <option value="4a8bd421fbc2dfbfb70d85a3fe064075ab2c49da">r104:4a8bd421fbc2 (default)</option>
149 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85 (default)</option>
149 <option value="57be63fc8f85e65a0106a53187f7316f8c487ffa">r102:57be63fc8f85 (default)</option>
150 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2 (git)</option>
150 <option value="5530bd87f7e2e124a64d07cb2654c997682128be">r101:5530bd87f7e2 (git)</option>
151 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93 (default)</option>
151 <option value="e516008b1c93f142263dc4b7961787cbad654ce1">r99:e516008b1c93 (default)</option>
152 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b (default)</option>
152 <option value="41f43fc74b8b285984554532eb105ac3be5c434f">r93:41f43fc74b8b (default)</option>
153 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455 (default)</option>
153 <option value="cc66b61b8455b264a7a8a2d8ddc80fcfc58c221e">r92:cc66b61b8455 (default)</option>
154 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32 (default)</option>
154 <option value="73ab5b616b3271b0518682fb4988ce421de8099f">r91:73ab5b616b32 (default)</option>
155 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0 (default)</option>
155 <option value="e0da75f308c0f18f98e9ce6257626009fdda2b39">r82:e0da75f308c0 (default)</option>
156 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081 (default)</option>
156 <option value="fb2e41e0f0810be4d7103bc2a4c7be16ee3ec611">r81:fb2e41e0f081 (default)</option>
157 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad (default)</option>
157 <option value="602ae2f5e7ade70b3b66a58cdd9e3e613dc8a028">r76:602ae2f5e7ad (default)</option>
158 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7 (default)</option>
158 <option value="a066b25d5df7016b45a41b7e2a78c33b57adc235">r73:a066b25d5df7 (default)</option>
159 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059 (web)</option>
159 <option value="637a933c905958ce5151f154147c25c1c7b68832">r61:637a933c9059 (web)</option>
160 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb (web)</option>
160 <option value="0c21004effeb8ce2d2d5b4a8baf6afa8394b6fbc">r60:0c21004effeb (web)</option>
161 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1 (web)</option>
161 <option value="a1f39c56d3f1d52d5fb5920370a2a2716cd9a444">r59:a1f39c56d3f1 (web)</option>
162 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71 (web)</option>
162 <option value="97d32df05c715a3bbf936bf3cc4e32fb77fe1a7f">r58:97d32df05c71 (web)</option>
163 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771 (web)</option>
163 <option value="08eaf14517718dccea4b67755a93368341aca919">r57:08eaf1451771 (web)</option>
164 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526 (web)</option>
164 <option value="22f71ad265265a53238359c883aa976e725aa07d">r56:22f71ad26526 (web)</option>
165 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4 (web)</option>
165 <option value="97501f02b7b4330924b647755663a2d90a5e638d">r49:97501f02b7b4 (web)</option>
166 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b (web)</option>
166 <option value="86ede6754f2b27309452bb11f997386ae01d0e5a">r47:86ede6754f2b (web)</option>
167 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c (web)</option>
167 <option value="014c40c0203c423dc19ecf94644f7cac9d4cdce0">r45:014c40c0203c (web)</option>
168 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1 (default)</option>
168 <option value="ee87846a61c12153b51543bf860e1026c6d3dcba">r30:ee87846a61c1 (default)</option>
169 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5 (default)</option>
169 <option value="9bb326a04ae5d98d437dece54be04f830cf1edd9">r26:9bb326a04ae5 (default)</option>
170 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283 (default)</option>
170 <option value="536c1a19428381cfea92ac44985304f6a8049569">r24:536c1a194283 (default)</option>
171 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6 (default)</option>
171 <option value="dc5d2c0661b61928834a785d3e64a3f80d3aad9c">r8:dc5d2c0661b6 (default)</option>
172 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3 (default)</option>
172 <option value="3803844fdbd3b711175fc3da9bdacfcd6d29a6fb">r7:3803844fdbd3 (default)</option>
173 </optgroup>
173 </optgroup>
174 <optgroup label="Branches">
174 <optgroup label="Branches">
175 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
175 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">default</option>
176 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
176 <option value="97e8b885c04894463c51898e14387d80c30ed1ee">git</option>
177 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
177 <option value="2e6a2bf9356ca56df08807f4ad86d480da72a8f4">web</option>
178 </optgroup>
178 </optgroup>
179 <optgroup label="Tags">
179 <optgroup label="Tags">
180 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
180 <option selected="selected" value="27cd5cce30c96924232dffcd24178a07ffeb5dfc">tip</option>
181 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
181 <option value="fd4bdb5e9b2a29b4393a4ac6caef48c17ee1a200">0.1.4</option>
182 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
182 <option value="17544fbfcd33ffb439e2b728b5d526b1ef30bfcf">0.1.3</option>
183 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
183 <option value="a7e60bff65d57ac3a1a1ce3b12a70f8a9e8a7720">0.1.2</option>
184 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
184 <option value="eb3a60fc964309c1a318b8dfe26aa2d1586c85ae">0.1.1</option>
185 </optgroup>""")
185 </optgroup>""")
186
186
187 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
187 response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
188
188
189 def test_archival(self):
189 def test_archival(self):
190 self.log_user()
190 self.log_user()
191
191
192 for arch_ext, info in ARCHIVE_SPECS.items():
192 for arch_ext, info in ARCHIVE_SPECS.items():
193 short = '27cd5cce30c9%s' % arch_ext
193 short = '27cd5cce30c9%s' % arch_ext
194 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
194 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
195 filename = '%s-%s' % (HG_REPO, short)
195 filename = '%s-%s' % (HG_REPO, short)
196 response = self.app.get(url(controller='files',
196 response = self.app.get(url(controller='files',
197 action='archivefile',
197 action='archivefile',
198 repo_name=HG_REPO,
198 repo_name=HG_REPO,
199 fname=fname))
199 fname=fname))
200
200
201 self.assertEqual(response.status, '200 OK')
201 self.assertEqual(response.status, '200 OK')
202 self.assertEqual(response.response._headers.items(),
202 self.assertEqual(response.response._headers.items(),
203 [('Pragma', 'no-cache'),
203 [('Pragma', 'no-cache'),
204 ('Cache-Control', 'no-cache'),
204 ('Cache-Control', 'no-cache'),
205 ('Content-Type', '%s; charset=utf-8' % info[0]),
205 ('Content-Type', '%s; charset=utf-8' % info[0]),
206 ('Content-Disposition', 'attachment; filename=%s' % filename),
206 ('Content-Disposition', 'attachment; filename=%s' % filename),
207 ]
207 ]
208 )
208 )
209
209
210 def test_archival_wrong_ext(self):
210 def test_archival_wrong_ext(self):
211 self.log_user()
211 self.log_user()
212
212
213 for arch_ext in ['tar', 'rar', 'x', '..ax', '.zipz']:
213 for arch_ext in ['tar', 'rar', 'x', '..ax', '.zipz']:
214 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
214 fname = '27cd5cce30c96924232dffcd24178a07ffeb5dfc%s' % arch_ext
215
215
216 response = self.app.get(url(controller='files', action='archivefile',
216 response = self.app.get(url(controller='files', action='archivefile',
217 repo_name=HG_REPO,
217 repo_name=HG_REPO,
218 fname=fname))
218 fname=fname))
219 response.mustcontain('Unknown archive type')
219 response.mustcontain('Unknown archive type')
220
220
221 def test_archival_wrong_revision(self):
221 def test_archival_wrong_revision(self):
222 self.log_user()
222 self.log_user()
223
223
224 for rev in ['00x000000', 'tar', 'wrong', '@##$@$424213232', '232dffcd']:
224 for rev in ['00x000000', 'tar', 'wrong', '@##$@$424213232', '232dffcd']:
225 fname = '%s.zip' % rev
225 fname = '%s.zip' % rev
226
226
227 response = self.app.get(url(controller='files', action='archivefile',
227 response = self.app.get(url(controller='files', action='archivefile',
228 repo_name=HG_REPO,
228 repo_name=HG_REPO,
229 fname=fname))
229 fname=fname))
230 response.mustcontain('Unknown revision')
230 response.mustcontain('Unknown revision')
231
231
232 #==========================================================================
232 #==========================================================================
233 # RAW FILE
233 # RAW FILE
234 #==========================================================================
234 #==========================================================================
235 def test_raw_file_ok(self):
235 def test_raw_file_ok(self):
236 self.log_user()
236 self.log_user()
237 response = self.app.get(url(controller='files', action='rawfile',
237 response = self.app.get(url(controller='files', action='rawfile',
238 repo_name=HG_REPO,
238 repo_name=HG_REPO,
239 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
239 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
240 f_path='vcs/nodes.py'))
240 f_path='vcs/nodes.py'))
241
241
242 self.assertEqual(response.content_disposition, "attachment; filename=nodes.py")
242 self.assertEqual(response.content_disposition, "attachment; filename=nodes.py")
243 self.assertEqual(response.content_type, "text/x-python")
243 self.assertEqual(response.content_type, "text/x-python")
244
244
245 def test_raw_file_wrong_cs(self):
245 def test_raw_file_wrong_cs(self):
246 self.log_user()
246 self.log_user()
247 rev = u'ERRORce30c96924232dffcd24178a07ffeb5dfc'
247 rev = u'ERRORce30c96924232dffcd24178a07ffeb5dfc'
248 f_path = 'vcs/nodes.py'
248 f_path = 'vcs/nodes.py'
249
249
250 response = self.app.get(url(controller='files', action='rawfile',
250 response = self.app.get(url(controller='files', action='rawfile',
251 repo_name=HG_REPO,
251 repo_name=HG_REPO,
252 revision=rev,
252 revision=rev,
253 f_path=f_path))
253 f_path=f_path))
254
254
255 msg = """Revision %r does not exist for this repository""" % (rev)
255 msg = """Revision %r does not exist for this repository""" % (rev)
256 self.checkSessionFlash(response, msg)
256 self.checkSessionFlash(response, msg)
257
257
258 msg = """%s""" % (HG_REPO)
258 msg = """%s""" % (HG_REPO)
259 self.checkSessionFlash(response, msg)
259 self.checkSessionFlash(response, msg)
260
260
261 def test_raw_file_wrong_f_path(self):
261 def test_raw_file_wrong_f_path(self):
262 self.log_user()
262 self.log_user()
263 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
263 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
264 f_path = 'vcs/ERRORnodes.py'
264 f_path = 'vcs/ERRORnodes.py'
265 response = self.app.get(url(controller='files', action='rawfile',
265 response = self.app.get(url(controller='files', action='rawfile',
266 repo_name=HG_REPO,
266 repo_name=HG_REPO,
267 revision=rev,
267 revision=rev,
268 f_path=f_path))
268 f_path=f_path))
269
269
270 msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
270 msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
271 self.checkSessionFlash(response, msg)
271 self.checkSessionFlash(response, msg)
272
272
273 #==========================================================================
273 #==========================================================================
274 # RAW RESPONSE - PLAIN
274 # RAW RESPONSE - PLAIN
275 #==========================================================================
275 #==========================================================================
276 def test_raw_ok(self):
276 def test_raw_ok(self):
277 self.log_user()
277 self.log_user()
278 response = self.app.get(url(controller='files', action='raw',
278 response = self.app.get(url(controller='files', action='raw',
279 repo_name=HG_REPO,
279 repo_name=HG_REPO,
280 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
280 revision='27cd5cce30c96924232dffcd24178a07ffeb5dfc',
281 f_path='vcs/nodes.py'))
281 f_path='vcs/nodes.py'))
282
282
283 self.assertEqual(response.content_type, "text/plain")
283 self.assertEqual(response.content_type, "text/plain")
284
284
285 def test_raw_wrong_cs(self):
285 def test_raw_wrong_cs(self):
286 self.log_user()
286 self.log_user()
287 rev = u'ERRORcce30c96924232dffcd24178a07ffeb5dfc'
287 rev = u'ERRORcce30c96924232dffcd24178a07ffeb5dfc'
288 f_path = 'vcs/nodes.py'
288 f_path = 'vcs/nodes.py'
289
289
290 response = self.app.get(url(controller='files', action='raw',
290 response = self.app.get(url(controller='files', action='raw',
291 repo_name=HG_REPO,
291 repo_name=HG_REPO,
292 revision=rev,
292 revision=rev,
293 f_path=f_path))
293 f_path=f_path))
294 msg = """Revision %r does not exist for this repository""" % (rev)
294 msg = """Revision %r does not exist for this repository""" % (rev)
295 self.checkSessionFlash(response, msg)
295 self.checkSessionFlash(response, msg)
296
296
297 msg = """%s""" % (HG_REPO)
297 msg = """%s""" % (HG_REPO)
298 self.checkSessionFlash(response, msg)
298 self.checkSessionFlash(response, msg)
299
299
300 def test_raw_wrong_f_path(self):
300 def test_raw_wrong_f_path(self):
301 self.log_user()
301 self.log_user()
302 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
302 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
303 f_path = 'vcs/ERRORnodes.py'
303 f_path = 'vcs/ERRORnodes.py'
304 response = self.app.get(url(controller='files', action='raw',
304 response = self.app.get(url(controller='files', action='raw',
305 repo_name=HG_REPO,
305 repo_name=HG_REPO,
306 revision=rev,
306 revision=rev,
307 f_path=f_path))
307 f_path=f_path))
308 msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
308 msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
309 self.checkSessionFlash(response, msg)
309 self.checkSessionFlash(response, msg)
310
310
311 def test_ajaxed_files_list(self):
311 def test_ajaxed_files_list(self):
312 self.log_user()
312 self.log_user()
313 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
313 rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
314 response = self.app.get(
314 response = self.app.get(
315 url('files_nodelist_home', repo_name=HG_REPO,f_path='/',revision=rev),
315 url('files_nodelist_home', repo_name=HG_REPO,f_path='/',revision=rev),
316 extra_environ={'HTTP_X_PARTIAL_XHR': '1'},
316 extra_environ={'HTTP_X_PARTIAL_XHR': '1'},
317 )
317 )
318 response.mustcontain("vcs/web/simplevcs/views/repository.py")
318 response.mustcontain("vcs/web/simplevcs/views/repository.py")
@@ -1,103 +1,103 b''
1 import sys
1 import sys
2 from rhodecode import get_version
2 from rhodecode import get_version
3 from rhodecode import __license__
3 from rhodecode import __license__
4 from rhodecode import __py_version__
4 from rhodecode import __py_version__
5 from rhodecode import requirements
5 from rhodecode import requirements
6
6
7 if __py_version__ < (2, 5):
7 if __py_version__ < (2, 5):
8 raise Exception('RhodeCode requires python 2.5 or later')
8 raise Exception('RhodeCode requires python 2.5 or later')
9
9
10 dependency_links = [
10 dependency_links = [
11 ]
11 ]
12
12
13 classifiers = [
13 classifiers = [
14 'Development Status :: 4 - Beta',
14 'Development Status :: 4 - Beta',
15 'Environment :: Web Environment',
15 'Environment :: Web Environment',
16 'Framework :: Pylons',
16 'Framework :: Pylons',
17 'Intended Audience :: Developers',
17 'Intended Audience :: Developers',
18 'License :: OSI Approved :: GNU General Public License (GPL)',
18 'License :: OSI Approved :: GNU General Public License (GPL)',
19 'Operating System :: OS Independent',
19 'Operating System :: OS Independent',
20 'Programming Language :: Python',
20 'Programming Language :: Python',
21 'Programming Language :: Python :: 2.5',
21 'Programming Language :: Python :: 2.5',
22 'Programming Language :: Python :: 2.6',
22 'Programming Language :: Python :: 2.6',
23 'Programming Language :: Python :: 2.7',
23 'Programming Language :: Python :: 2.7',
24 ]
24 ]
25
25
26
26
27 # additional files from project that goes somewhere in the filesystem
27 # additional files from project that goes somewhere in the filesystem
28 # relative to sys.prefix
28 # relative to sys.prefix
29 data_files = []
29 data_files = []
30
30
31 # additional files that goes into package itself
31 # additional files that goes into package itself
32 package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], }
32 package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], }
33
33
34 description = ('Mercurial repository browser/management with '
34 description = ('Mercurial repository browser/management with '
35 'build in push/pull server and full text search')
35 'build in push/pull server and full text search')
36 keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git',
36 keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git',
37 'code review', 'repo groups', 'ldap'
37 'code review', 'repo groups', 'ldap'
38 'repository management', 'hgweb replacement'
38 'repository management', 'hgweb replacement'
39 'hgwebdir', 'gitweb replacement', 'serving hgweb', ])
39 'hgwebdir', 'gitweb replacement', 'serving hgweb', ])
40 # long description
40 # long description
41 try:
41 try:
42 readme_file = 'README.rst'
42 readme_file = 'README.rst'
43 changelog_file = 'docs/changelog.rst'
43 changelog_file = 'docs/changelog.rst'
44 long_description = open(readme_file).read() + '\n\n' + \
44 long_description = open(readme_file).read() + '\n\n' + \
45 open(changelog_file).read()
45 open(changelog_file).read()
46
46
47 except IOError, err:
47 except IOError, err:
48 sys.stderr.write("[WARNING] Cannot find file specified as "
48 sys.stderr.write("[WARNING] Cannot find file specified as "
49 "long_description (%s)\n or changelog (%s) skipping that file" \
49 "long_description (%s)\n or changelog (%s) skipping that file" \
50 % (readme_file, changelog_file))
50 % (readme_file, changelog_file))
51 long_description = description
51 long_description = description
52
52
53
53
54 try:
54 try:
55 from setuptools import setup, find_packages
55 from setuptools import setup, find_packages
56 except ImportError:
56 except ImportError:
57 from ez_setup import use_setuptools
57 from ez_setup import use_setuptools
58 use_setuptools()
58 use_setuptools()
59 from setuptools import setup, find_packages
59 from setuptools import setup, find_packages
60 # packages
60 # packages
61 packages = find_packages(exclude=['ez_setup'])
61 packages = find_packages(exclude=['ez_setup'])
62
62
63 setup(
63 setup(
64 name='RhodeCode',
64 name='RhodeCode',
65 version=get_version(),
65 version=get_version(),
66 description=description,
66 description=description,
67 long_description=long_description,
67 long_description=long_description,
68 keywords=keywords,
68 keywords=keywords,
69 license=__license__,
69 license=__license__,
70 author='Marcin Kuzminski',
70 author='Marcin Kuzminski',
71 author_email='marcin@python-works.com',
71 author_email='marcin@python-works.com',
72 dependency_links=dependency_links,
72 dependency_links=dependency_links,
73 url='http://rhodecode.org',
73 url='http://rhodecode.org',
74 install_requires=requirements,
74 install_requires=requirements,
75 classifiers=classifiers,
75 classifiers=classifiers,
76 setup_requires=["PasteScript>=1.6.3"],
76 setup_requires=["PasteScript>=1.6.3"],
77 data_files=data_files,
77 data_files=data_files,
78 packages=packages,
78 packages=packages,
79 include_package_data=True,
79 include_package_data=True,
80 test_suite='nose.collector',
80 test_suite='nose.collector',
81 package_data=package_data,
81 package_data=package_data,
82 message_extractors={'rhodecode': [
82 message_extractors={'rhodecode': [
83 ('**.py', 'python', None),
83 ('**.py', 'python', None),
84 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
84 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
85 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
85 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
86 ('public/**', 'ignore', None)]},
86 ('public/**', 'ignore', None)]},
87 zip_safe=False,
87 zip_safe=False,
88 paster_plugins=['PasteScript', 'Pylons'],
88 paster_plugins=['PasteScript', 'Pylons'],
89 entry_points="""
89 entry_points="""
90 [paste.app_factory]
90 [paste.app_factory]
91 main = rhodecode.config.middleware:make_app
91 main = rhodecode.config.middleware:make_app
92
92
93 [paste.app_install]
93 [paste.app_install]
94 main = pylons.util:PylonsInstaller
94 main = pylons.util:PylonsInstaller
95
95
96 [paste.global_paster_command]
96 [paste.global_paster_command]
97 setup-rhodecode=rhodecode.config.setup:SetupCommand
97 setup-rhodecode=rhodecode.config.setup_rhodecode:SetupCommand
98 make-index=rhodecode.lib.indexers:MakeIndex
98 make-index=rhodecode.lib.indexers:MakeIndex
99 make-rcext=rhodecode.config.rcextensions.make_rcextensions:MakeRcExt
99 make-rcext=rhodecode.config.rcextensions.make_rcextensions:MakeRcExt
100 upgrade-db=rhodecode.lib.dbmigrate:UpgradeDb
100 upgrade-db=rhodecode.lib.dbmigrate:UpgradeDb
101 celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
101 celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
102 """,
102 """,
103 )
103 )
General Comments 0
You need to be logged in to leave comments. Login now