coderunner 0.16.2 → 0.16.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/coderunnerrepo +10 -0
- data/coderunner.gemspec +5 -4
- data/lib/coderunner/fortran_namelist.rb +10 -1
- data/lib/coderunner/instance_methods.rb +9 -2
- data/lib/coderunner/interactive_methods.rb +4 -3
- data/lib/coderunner/repository.rb +45 -46
- data/lib/coderunner/repository_manager.rb +31 -29
- data/lib/coderunner/run.rb +30 -9
- data/test/test_coderunner.rb +3 -3
- data/test/test_coderunnerrepo.rb +8 -3
- metadata +31 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e194fbfceec78cdf510ade9ff65ecde56149569c
|
4
|
+
data.tar.gz: 91ea94d407b0ce5cb14d119f33edd31b4036780b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6571b626cb20ed104a0110a12f5e22f15d94f3e6fd25633300e62078df211ec2c745264a40e9305a2b7da67bc128c808ffa757af37e2c18e42ea60a53c032eba
|
7
|
+
data.tar.gz: 3a730a25cdb803041787252aeb915c9cef0c9ddd482168377a08d5a606fdd741148681c86334e6cef27a6307607729c1da624c8a0fb0e301409e5bae0129d4f3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.16.
|
1
|
+
0.16.3
|
data/bin/coderunnerrepo
ADDED
data/coderunner.gemspec
CHANGED
@@ -2,20 +2,20 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: coderunner 0.16.
|
5
|
+
# stub: coderunner 0.16.3 ruby lib
|
6
6
|
# stub: ext/extconf.rb
|
7
7
|
|
8
8
|
Gem::Specification.new do |s|
|
9
9
|
s.name = "coderunner"
|
10
|
-
s.version = "0.16.
|
10
|
+
s.version = "0.16.3"
|
11
11
|
|
12
12
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
13
13
|
s.require_paths = ["lib"]
|
14
14
|
s.authors = ["Edmund Highcock"]
|
15
|
-
s.date = "2015-05-
|
15
|
+
s.date = "2015-05-19"
|
16
16
|
s.description = "CodeRunner is a framework for the automated running and analysis of simulations. It automatically generates any necessary input files, organises the output data and analyses it. Because it is a modular system, it can easily be customised to work with any system and any simulation code. One of its greatest strengths is that it is independent of any one simulation code; thus it can easily plot and compare the data from different codes."
|
17
17
|
s.email = "edmundhighcock@sourceforge.net"
|
18
|
-
s.executables = ["coderunner"]
|
18
|
+
s.executables = ["coderunner", "coderunnerrepo"]
|
19
19
|
s.extensions = ["ext/extconf.rb"]
|
20
20
|
s.extra_rdoc_files = [
|
21
21
|
"LICENSE.txt",
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"Rakefile",
|
32
32
|
"VERSION",
|
33
33
|
"bin/coderunner",
|
34
|
+
"bin/coderunnerrepo",
|
34
35
|
"coderunner.gemspec",
|
35
36
|
"ext/code_runner_ext.c",
|
36
37
|
"ext/extconf.rb",
|
@@ -761,10 +761,19 @@ end
|
|
761
761
|
def self.use_new_defaults_file(name=ARGV[-2], input_file=ARGV[-1])
|
762
762
|
raise "Please specify a name and an input file" if name == "use_new_defaults_file"
|
763
763
|
defaults_filename = "#{name}_defaults.rb"
|
764
|
-
|
764
|
+
|
765
|
+
central_defaults_filename = defaults_location_list[0] + "/" + defaults_filename
|
765
766
|
raise "Defaults file: #{central_defaults_filename} already exists" if FileTest.exist? central_defaults_filename
|
766
767
|
make_new_defaults_file(name, input_file)
|
767
768
|
FileUtils.mv(defaults_filename, central_defaults_filename)
|
769
|
+
if Repository.repo_folder
|
770
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
771
|
+
repo.add(central_defaults_filename)
|
772
|
+
repo.autocommit("Added defaults file #{defaults_filename}")
|
773
|
+
end #{defaults_filename}")
|
774
|
+
#end #{defaults_filename}")
|
775
|
+
#end
|
776
|
+
|
768
777
|
#modlet = rcp.modlet? ? rcp.modlet : nil
|
769
778
|
#executable = rcp.executable? ? rcp.executable : CodeRunner::DEFAULT_RUNNER_OPTIONS
|
770
779
|
CodeRunner.fetch_runner(D: name) #(C: rcp.code, m: rcp.modlet, D: name, CodeRunner)
|
@@ -175,7 +175,7 @@ class CodeRunner
|
|
175
175
|
repo = Repository.open_in_subfolder(@root_folder)
|
176
176
|
Dir.chdir(@root_folder) do
|
177
177
|
repo.add('.code_runner_script_defaults.rb')
|
178
|
-
repo.autocommit("Updated script defaults in #{repo.relative_path}")
|
178
|
+
repo.autocommit("Updated script defaults in #{repo.relative_path}") if repo.modified? '.code_runner_script_defaults'
|
179
179
|
#repo.add('.code-runner-irb-save-history')
|
180
180
|
end
|
181
181
|
end
|
@@ -1204,7 +1204,7 @@ Conditions contain a single = sign: #{conditions}
|
|
1204
1204
|
Dir.chdir(run.directory){traverse_directories}
|
1205
1205
|
|
1206
1206
|
end
|
1207
|
-
if is_in_repo? @root_folder
|
1207
|
+
if is_in_repo? @root_folder and not @test_submission
|
1208
1208
|
runs.each do |run|
|
1209
1209
|
Dir.chdir(run.directory){run.add_to_repo}
|
1210
1210
|
end
|
@@ -1571,6 +1571,13 @@ EOF
|
|
1571
1571
|
ids.each{|id|
|
1572
1572
|
FileUtils.rm_r @run_list[id].directory if @run_list[id].directory and not ["", ".", ".."].include? @run_list[id].directory
|
1573
1573
|
@run_list.delete(id); @ids.delete(id); generate_combined_ids}
|
1574
|
+
if is_in_repo?
|
1575
|
+
repo = Repository.open_in_subfolder(@root_folder)
|
1576
|
+
Dir.chdir(@root_folder){
|
1577
|
+
repo.deleted_in_folder(Dir.pwd).each{|k,f| repo.add(repo.dir.to_s + '/' + f.path)}
|
1578
|
+
}
|
1579
|
+
repo.autocommit("Deleted simulations with ids #{ids} in folder #{repo.relative_path(@root_folder)}")
|
1580
|
+
end
|
1574
1581
|
set_max_id(@ids.max || 0)
|
1575
1582
|
save_large_cache
|
1576
1583
|
generate_combined_ids
|
@@ -18,11 +18,12 @@ class CodeRunner
|
|
18
18
|
@runner = CodeRunner.fetch_runner(CodeRunner::DEFAULT_COMMAND_OPTIONS.dup) unless CodeRunner::DEFAULT_COMMAND_OPTIONS[:q]
|
19
19
|
@r = @runner
|
20
20
|
if @r
|
21
|
-
|
21
|
+
histfile = @r.root_folder + '/.code-runner-irb-save-history'
|
22
|
+
if FileTest.exist?(histfile)
|
22
23
|
if @r.is_in_repo?
|
23
24
|
repo = Repository.open_in_subfolder(@r.root_folder)
|
24
|
-
repo.add(
|
25
|
-
repo.autocommit("
|
25
|
+
repo.add(histfile)
|
26
|
+
repo.autocommit("Updated save history in #{repo.relative_path(@r.root_folder)}") if repo.modified? histfile
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -33,14 +33,21 @@ class CodeRunner
|
|
33
33
|
class Repository < Git::Base
|
34
34
|
# Create a coderunner repo, which consists of a
|
35
35
|
# twin set of a bare repo and a clone of that
|
36
|
-
# repo. folder must end in '.git'
|
36
|
+
# repo. folder must end in '.cr.git'
|
37
37
|
#
|
38
|
+
def self.url_regex
|
39
|
+
(/(?:ssh:\/\/)?(?<namehost>[^\/:]+):?(?<folder>.*$)/)
|
40
|
+
end
|
41
|
+
def self.bare_ext_reg
|
42
|
+
/\.cr\.git$/
|
43
|
+
end
|
44
|
+
|
38
45
|
def self.init(folder)
|
39
46
|
if folder =~ /\.git$/
|
40
|
-
raise "Please do not add '.git' to the end of #{folder}. Two repositories will be created: a bare repo ending in .git and a clone of this bare repo"
|
47
|
+
raise "Please do not add '.git' to the end of #{folder}. Two repositories will be created: a bare repo ending in .cr.git and a clone of this bare repo"
|
41
48
|
end
|
42
|
-
super(folder + '.git', bare: true)
|
43
|
-
repo = clone(folder + '.git', folder)
|
49
|
+
super(folder + '.cr.git', bare: true)
|
50
|
+
repo = clone(folder + '.cr.git', folder)
|
44
51
|
repo.init_metadata
|
45
52
|
repo.init_readme
|
46
53
|
repo.init_defaults_folder
|
@@ -71,7 +78,7 @@ class CodeRunner
|
|
71
78
|
# Returns a Git::Base object referring to the bare twin
|
72
79
|
# repository.
|
73
80
|
def bare_repo
|
74
|
-
@bare_repo ||= Git::Base.open(dir.to_s + '.git')
|
81
|
+
@bare_repo ||= Git::Base.open(dir.to_s + '.cr.git')
|
75
82
|
end
|
76
83
|
def relative_path(folder=Dir.pwd)
|
77
84
|
File.expand_path(folder).sub(File.expand_path(dir.to_s) + '/', '')
|
@@ -152,34 +159,33 @@ Created on: #{Time.now.to_s}
|
|
152
159
|
EOF
|
153
160
|
end
|
154
161
|
def split_url(remote_name)
|
155
|
-
bare_repo.remote(remote_name).url =~
|
162
|
+
bare_repo.remote(remote_name).url =~ Repository.url_regex
|
156
163
|
namehost = $~[:namehost]
|
157
|
-
|
158
|
-
|
164
|
+
barefolder = $~[:folder]
|
165
|
+
self.class.check_bare_ext(barefolder)
|
166
|
+
folder = barefolder.sub(/\.cr\.git$/, '')
|
167
|
+
return [namehost, folder, barefolder]
|
168
|
+
end
|
169
|
+
def modified_in_folder(folder)
|
170
|
+
(status.changed + status.added + status.deleted).find_all{|k,f| File.expand_path(dir.to_s + '/' + f.path).include?(File.expand_path(folder))}
|
159
171
|
end
|
160
|
-
|
161
|
-
|
172
|
+
alias :changed_in_folder :modified_in_folder
|
173
|
+
def deleted_in_folder(folder)
|
174
|
+
(status.deleted).find_all{|k,f| File.expand_path(dir.to_s + '/' + f.path).include?(File.expand_path(folder))}
|
175
|
+
end
|
176
|
+
def modified?(file)
|
177
|
+
(status.changed + status.added).find{|k,f| File.expand_path(dir.to_s + '/' + f.path).include?(File.expand_path(file))}
|
162
178
|
end
|
163
179
|
# Bring all files in the given folder from
|
164
180
|
# the given remote. (Obviously folder must
|
165
181
|
# be a subfolder within the repository).
|
166
182
|
def rsyncd(remote_name, folder)
|
167
|
-
|
168
|
-
namehost, remote_folder = split_url(remote_name)
|
183
|
+
namehost, remote_folder, _barefolder = split_url(remote_name)
|
169
184
|
rpath = relative_path(folder)
|
170
185
|
if File.expand_path(folder) == File.expand_path(dir.to_s)
|
171
186
|
raise "Cannot run rsyncd in the top level of a repository"
|
172
187
|
end
|
173
188
|
string = "rsync -av #{namehost}:#{remote_folder}/#{rpath}/ #{folder}/"
|
174
|
-
#Dir.chdir(folder) do
|
175
|
-
#FileUtils.touch('dummyfile')
|
176
|
-
#add('dummyfile')
|
177
|
-
#autocommit_all('--Added dummyfile')
|
178
|
-
#system "echo 'Hello' >> dummyfile"
|
179
|
-
##add('dummyfile')
|
180
|
-
#end
|
181
|
-
#p status.changed.map{|k,f| [p1=File.expand_path(folder), p2=File.expand_path(dir.to_s + '/' + f.path), p2.include?(p1), p1.include?(p2)]}
|
182
|
-
#p changed_in_folder(folder).map{|k,f| f.path}
|
183
189
|
if changed_in_folder(folder).size > 0
|
184
190
|
raise "You have some uncommitted changes in the folder #{folder}. Please commit these changes before calling rsyncd"
|
185
191
|
end
|
@@ -190,34 +196,41 @@ EOF
|
|
190
196
|
# the given remote. (Obviously folder must
|
191
197
|
# be a subfolder within the repository).
|
192
198
|
def rsyncu(remote_name, folder)
|
193
|
-
|
194
|
-
namehost, remote_folder = split_url(remote_name)
|
199
|
+
namehost, remote_folder, _barefolder = split_url(remote_name)
|
195
200
|
rpath = relative_path(folder)
|
196
201
|
if File.expand_path(folder) == File.expand_path(dir.to_s)
|
197
202
|
raise "Cannot run rsyncd in the top level of a repository"
|
198
203
|
end
|
199
204
|
string = "rsync -av #{folder}/ #{namehost}:#{remote_folder}/#{rpath}/"
|
200
|
-
#p status.changed.map{|k,f| [p1=File.expand_path(folder), p2=File.expand_path(dir.to_s + '/' + f.path), p2.include?(p1), p1.include?(p2)]}
|
201
|
-
#p changed_in_folder(folder).map{|k,f| f.path}
|
202
205
|
|
203
206
|
cif = `ssh #{namehost} "cd #{remote_folder}/#{rpath} && echo "START" && git status"`
|
204
|
-
#p cif
|
205
207
|
if cif =~ /START.*modified/m
|
206
208
|
raise "You have some uncommitted changes in the remote folder #{rpath}. Please commit these changes before calling rsyncu"
|
207
209
|
end
|
208
210
|
puts string
|
209
211
|
system string
|
210
212
|
end
|
211
|
-
|
213
|
+
|
212
214
|
def add_remote(name, url)
|
213
|
-
url =~
|
215
|
+
url =~ Repository.url_regex
|
214
216
|
barefolder = $~[:folder]
|
215
|
-
unless barefolder =~
|
216
|
-
raise "All remotes must end in .git for coderunnerrepo"
|
217
|
+
unless barefolder =~ Repository.bare_ext_reg
|
218
|
+
raise "All remotes must end in .cr.git for coderunnerrepo"
|
217
219
|
end
|
218
220
|
super(name, url)
|
219
221
|
end
|
220
222
|
|
223
|
+
# Check that barefolder ends in .cr.git
|
224
|
+
def self.check_bare_ext(barefolder)
|
225
|
+
unless barefolder =~ bare_ext_reg
|
226
|
+
raise "Remotes must end in .cr.git for coderunnerrepo"
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def bare_ext_reg
|
231
|
+
self.class.bare_ext_reg
|
232
|
+
end
|
233
|
+
|
221
234
|
alias :simple_pull :pull
|
222
235
|
|
223
236
|
# Pull from the given remote object. remote must be a remote
|
@@ -225,14 +238,7 @@ EOF
|
|
225
238
|
# NOT a remote from the coderunner repo (which only ever has
|
226
239
|
# one remote: origin, corresponding to the bare repo).
|
227
240
|
def pull(remote)
|
228
|
-
|
229
|
-
namehost = $~[:namehost]
|
230
|
-
folder = $~[:folder]
|
231
|
-
barefolder = folder + '.git'
|
232
|
-
p namehost, barefolder
|
233
|
-
if folder =~ /\.git$/
|
234
|
-
raise "Remotes must not end in .git for coderunnerrepo"
|
235
|
-
end
|
241
|
+
namehost, folder, _barefolder = split_url(remote.name)
|
236
242
|
try_system %[ssh #{namehost} "cd #{folder} && git push origin"]
|
237
243
|
bare_repo.pull(remote)
|
238
244
|
simple_pull(remote('origin'))
|
@@ -250,14 +256,7 @@ EOF
|
|
250
256
|
# bare repo to the remote, then pull remote repos from the
|
251
257
|
# remote bare repos.
|
252
258
|
def push(remote)
|
253
|
-
|
254
|
-
namehost = $~[:namehost]
|
255
|
-
folder = $~[:folder]
|
256
|
-
barefolder = folder + '.git'
|
257
|
-
p namehost, barefolder
|
258
|
-
if folder =~ /\.git$/
|
259
|
-
raise "Remotes must not end in .git for coderunnerrepo"
|
260
|
-
end
|
259
|
+
namehost, folder, _barefolder = split_url(remote.name)
|
261
260
|
simple_push(remote('origin'))
|
262
261
|
bare_repo.push(remote)
|
263
262
|
try_system %[ssh #{namehost} "cd #{folder} && git pull origin"]
|
@@ -50,13 +50,16 @@ EXAMPLES
|
|
50
50
|
EOF
|
51
51
|
|
52
52
|
COMMANDS_WITH_HELP = [
|
53
|
-
['add_remote', 'adrm', 2, 'Add a remote url to the repository. The url must
|
53
|
+
['add_remote', 'adrm', 2, 'Add a remote url to the repository. The url must end in \'.git\'', ['name', 'url'], [:Y]],
|
54
54
|
['add_folder', 'add', 1, 'Add the folder to the repository... this adds the directory tree and all coderunner data files to the repository, e.g. .code_runner_info.rb, script defaults, command histories etc. Note that this command must be issued in the root of the repository, or with the -Y flag giving the root of the repository.', ['folder'], [:Y]],
|
55
|
-
['
|
56
|
-
['
|
57
|
-
['
|
58
|
-
['
|
55
|
+
['bare_repo_command', 'brc', 1, 'Execute the given command within the twin bare repository', ['command'], [:Y]],
|
56
|
+
['init_repository', 'init', 1, 'Create a new repository with the given name. The name must not end in ".git". In fact, two repositories will be created, a working repo and a bare repo ending in cr.git. The bare repo is used to send and receive changes to remotes: the working repo should only push and pull to and from its twin bare repo.', ['name'], []],
|
57
|
+
['list_remotes', 'lsr', 0, 'List remotes in the bare repository (the working repository should only have one remote: origin.', [], [:Y]],
|
58
|
+
['pull_repository', 'pull', 0, 'Pull repository from all remotes, or from a comma-separated list of remotes given by the -r option.', [], [:r, :Y]],
|
59
|
+
['push_and_create_repository', 'pushcr', 0, 'Push to a comma-separated list of remotes given by the -r option; this command assumes that there is no repository on the remote and creates twin pair of a bare repo and a working checkout.', [], [:r, :Y]],
|
60
|
+
['push_repository', 'push', 0, 'Push repository to all remotes, or to a comma-separated list of remotes given by the -r option.', [], [:r, :Y]],
|
59
61
|
['remote_synchronize_down', 'rsyncd', 2, 'Bring the contents of the remote folder corresponding to the given folder (which must be a subfolder of a local coderunner repository) to the local system. The folder cannot be the top level of the repository. This command uses rsync to actually copy the files. The --delete option is not specified (i.e. files that do not exist on the remote will not be deleted).', ['remote', 'folder'], []],
|
62
|
+
['remote_synchronize_up', 'rsyncu', 2, 'Send the contents of the given folder (which must be a subfolder of a local coderunner repository) to the remote folder corresponding to it. The folder cannot be the top level of the repository. This command uses rsync to actually copy the files. The --delete option is not specified (i.e. files that do not exist in the folder).', ['remote', 'folder'], []],
|
60
63
|
['set_repo_metadata', 'mdata', 1, "Give a hash of metadata to modify e.g., '{autocommit: false}. Things that can be modified are: autocommit: true/false, automatically commit repo changes made by CodeRunner, default true'.", ['hash'], [:Y]],
|
61
64
|
|
62
65
|
]
|
@@ -113,14 +116,22 @@ class CodeRunner
|
|
113
116
|
def verbosity
|
114
117
|
2
|
115
118
|
end
|
119
|
+
def bare_repo_command(comm, copts)
|
120
|
+
Dir.chdir(copts[:Y]) do
|
121
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
122
|
+
Dir.chdir(repo.bare_repo.dir.to_s) do
|
123
|
+
system comm
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
116
127
|
def init_repository(name, copts)
|
117
128
|
Repository.init(name)
|
118
129
|
end
|
119
130
|
def add_remote(name, url, copts)
|
120
|
-
url =~
|
121
|
-
|
122
|
-
|
123
|
-
raise "Remotes
|
131
|
+
url =~ Repository.url_regex
|
132
|
+
barefolder = $~[:folder]
|
133
|
+
unless barefolder =~ Repository.bare_ext_reg
|
134
|
+
raise "Remotes must end in .cr.git for coderunnerrepo"
|
124
135
|
end
|
125
136
|
Dir.chdir(copts[:Y]){
|
126
137
|
repo = Repository.open_in_subfolder(Dir.pwd)
|
@@ -142,37 +153,28 @@ class CodeRunner
|
|
142
153
|
end
|
143
154
|
repo.simple_push(repo.remote("origin"))
|
144
155
|
rems.each do |r|
|
145
|
-
|
146
|
-
namehost = $~[:namehost]
|
147
|
-
folder = $~[:folder]
|
148
|
-
barefolder = folder + '.git'
|
149
|
-
p namehost, barefolder
|
150
|
-
if folder =~ /\.git$/
|
151
|
-
raise "Remotes must not end in .git for coderunnerrepo"
|
152
|
-
end
|
153
|
-
#barefolder =folder.sub(/\/+$/, '') + '.git'
|
154
|
-
#try_system %[git bundle create .tmpbundle --all]
|
156
|
+
namehost, folder, barefolder = repo.split_url(r.name)
|
155
157
|
try_system %[ssh #{namehost} "mkdir -p #{barefolder} && cd #{barefolder} && git init --bare"]
|
156
158
|
bare_repo.push(r)
|
157
159
|
try_system %[ssh #{namehost} "git clone #{barefolder} #{folder}"]
|
158
|
-
#try_system %[scp .tmpbundle #{namehost}:#{folder}/../.]
|
159
|
-
#try_system %[rm .tmpbundle]
|
160
|
-
#try_system %[ssh #{namehost} "cd #{folder} && git clone .tmpbundle #{repname = File.basename(repo.dir.to_s)} "]
|
161
|
-
#try_system %[ssh #{namehost} "cd #{folder} && git clone ../.tmpbundle ."]
|
162
|
-
#try_system %[ssh #{namehost} "cd #{folder}/#{repname} && git remote rm origin"]
|
163
|
-
#try_system %[ssh #{namehost} "cd #{folder} && git remote rm origin"]
|
164
|
-
#push_repository(copts.dup.absorb(r: r.name))
|
165
160
|
bare_repo.remotes.each do |other_remote|
|
166
161
|
next if other_remote.name == r.name
|
167
|
-
try_system %[ssh #{namehost} "cd #{
|
168
|
-
#try_system %[ssh #{namehost} "cd #{folder} && git remote add #{other_remote.name} #{other_remote.url}"]
|
162
|
+
try_system %[ssh #{namehost} "cd #{barefolder} && git remote add #{other_remote.name} #{other_remote.url}"]
|
169
163
|
end
|
170
164
|
end
|
171
165
|
}
|
172
166
|
end
|
167
|
+
def list_remotes(copts)
|
168
|
+
Dir.chdir(copts[:Y]){
|
169
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
170
|
+
repo.bare_repo.remotes.each do |r|
|
171
|
+
puts "#{r.name} #{r.url}"
|
172
|
+
end
|
173
|
+
}
|
174
|
+
end
|
173
175
|
def push_repository(copts)
|
174
176
|
Dir.chdir(copts[:Y]){
|
175
|
-
repo = Repository.
|
177
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
176
178
|
if copts[:r]
|
177
179
|
rems = copts[:r].split(/,/).map{|rname| repo.bare_repo.remote(rname)}
|
178
180
|
else
|
data/lib/coderunner/run.rb
CHANGED
@@ -418,18 +418,31 @@ def defaults_file_name
|
|
418
418
|
end
|
419
419
|
end
|
420
420
|
|
421
|
+
@code_module_folder = "/dev/null"
|
422
|
+
|
423
|
+
# A list of places where defaults files may be found
|
424
|
+
|
425
|
+
def self.defaults_location_list
|
426
|
+
locs = [rcp.user_defaults_location, rcp.code_module_folder + "/defaults_files"]
|
427
|
+
if Repository.repo_folder
|
428
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
429
|
+
folder = repo.dir.to_s + '/defaults_files/' + rcp.code + 'crmod/'
|
430
|
+
FileUtils.makedirs folder
|
431
|
+
locs.unshift folder
|
432
|
+
end
|
433
|
+
locs
|
434
|
+
end
|
435
|
+
|
436
|
+
def defaults_location_list
|
437
|
+
self.class.defaults_location_list
|
438
|
+
end
|
439
|
+
|
421
440
|
# Return the folder where the default defaults file is located.
|
422
441
|
|
423
442
|
def defaults_location
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
raise "Can't find defaults_file #{defaults_file_name} in #{[rcp.user_defaults_location, rcp.code_module_folder + "/defaults_files"].join(',')}." unless location
|
428
|
-
location
|
429
|
-
#return location
|
430
|
-
#else
|
431
|
-
#location = [rcp.user_defaults_location, rcp.code_module_folder + "/defaults_files"].find{|folder| FileTest.exist? folder and Dir.entries(folder).include? defaults_file_name}
|
432
|
-
#end
|
443
|
+
location = defaults_location_list.find{|folder| FileTest.exist? folder and Dir.entries(folder).include? defaults_file_name}
|
444
|
+
raise "Can't find defaults_file #{defaults_file_name} in #{defaults_location_list.join(',')}." unless location
|
445
|
+
location
|
433
446
|
end
|
434
447
|
|
435
448
|
# Return true if the run is completed, false otherwise
|
@@ -518,6 +531,14 @@ def update_submission_parameters(parameters, start_from_defaults=true)
|
|
518
531
|
EOF
|
519
532
|
main_defaults_file_text = header + main_defaults_file_text
|
520
533
|
File.open(defaults_file_name, 'w'){|file| file.puts main_defaults_file_text}
|
534
|
+
if @runner.is_in_repo?
|
535
|
+
repo = Repository.open_in_subfolder(Dir.pwd)
|
536
|
+
repo.add(defaults_file_name)
|
537
|
+
repo.autocommit("Added local defaults file #{defaults_file_name} in folder #{Dir.pwd}")
|
538
|
+
end
|
539
|
+
#{defaults_file_name} in folder #{Dir.pwd
|
540
|
+
##{defaults_file_name} in folder #{Dir.pwd
|
541
|
+
#
|
521
542
|
end
|
522
543
|
#FileUtils.cp("#{defaults_location}/#{defaults_file_name}", defaults_file_name)
|
523
544
|
|
data/test/test_coderunner.rb
CHANGED
@@ -131,12 +131,12 @@ class TestCodeRunner < MiniTest::Test
|
|
131
131
|
p rc
|
132
132
|
assert_equal(@runner.ids.sort, rc.ids.sort)
|
133
133
|
rc.print_out(0)
|
134
|
-
wdvh = rc.graphkit("width:height:depth:volume;;;
|
134
|
+
wdvh = rc.graphkit("width:height:depth:volume;;;volume")
|
135
135
|
#wdvh.gnuplot
|
136
136
|
assert_equal(4, wdvh.naxes)
|
137
137
|
assert_equal(1, wdvh.data.size)
|
138
|
-
assert_equal([
|
139
|
-
|
138
|
+
assert_equal([18.0, 24.0, 27.0, 30.0, 108.0, 198.0], wdvh.data[0].axes[:f].data)
|
139
|
+
_sds = rc.run_graphkit('sides;;[1,2].include? id')
|
140
140
|
str = "A very very very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnng string"
|
141
141
|
str2 = rc.retrieve(str.inspect)
|
142
142
|
assert_equal(str, str2)
|
data/test/test_coderunnerrepo.rb
CHANGED
@@ -37,12 +37,12 @@ class TestCreate < MiniTest::Test
|
|
37
37
|
def test_create
|
38
38
|
Dir.chdir(tfolder) {
|
39
39
|
assert_system("#$coderunnerrepo_command init myrepo")
|
40
|
-
assert_system("#$coderunnerrepo_command adrm local ssh://#{ENV['USER']}@localhost/#{Dir.pwd}/remote -Y myrepo")
|
40
|
+
assert_system("#$coderunnerrepo_command adrm local ssh://#{ENV['USER']}@localhost/#{Dir.pwd}/remote.cr.git -Y myrepo")
|
41
41
|
#assert_system("#$coderunnerrepo_command adrm local ssh://#{ENV['USER']}@#{`hostname`.chomp}.local/#{Dir.pwd}/remote.git -Y myrepo")
|
42
|
-
assert_system("#$coderunnerrepo_command adrm dummy ssh://dummyuser@nohost/#{Dir.pwd}/remote -Y myrepo")
|
42
|
+
assert_system("#$coderunnerrepo_command adrm dummy ssh://dummyuser@nohost/#{Dir.pwd}/remote.cr.git -Y myrepo")
|
43
43
|
assert_system("#$coderunnerrepo_command pushcr -r local -Y myrepo")
|
44
44
|
#assert_equal(false, system("#$coderunnerrepo_command pushcr -r local -Y myrepo"))
|
45
|
-
assert_system("cd myrepo.git; git remote rm dummy")
|
45
|
+
assert_system("cd myrepo.cr.git; git remote rm dummy")
|
46
46
|
assert_system("#$coderunnerrepo_command pull -Y myrepo")
|
47
47
|
assert_system("#$coderunnerrepo_command push -Y myrepo")
|
48
48
|
FileUtils.makedirs(dffolder)
|
@@ -53,6 +53,11 @@ class TestCreate < MiniTest::Test
|
|
53
53
|
FileUtils.makedirs('myrepo/sims')
|
54
54
|
Dir.chdir('myrepo/sims') do
|
55
55
|
CodeRunner.submit(C: 'cubecalc', m: 'empty', X: '../../cubecalc')
|
56
|
+
CodeRunner.submit(C: 'cubecalc', m: 'empty', X: '../../cubecalc')
|
57
|
+
r = CodeRunner.fetch_runner
|
58
|
+
r.conditions = 'id==2'
|
59
|
+
r.destroy no_confirm: true
|
60
|
+
#CodeRunner.delete(j: 2)
|
56
61
|
FileUtils.touch('.code-runner-irb-save-history')
|
57
62
|
Dummy.new.setup_interactive
|
58
63
|
end
|
metadata
CHANGED
@@ -1,181 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderunner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edmund Highcock
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphkit
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.4.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.4.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: parallelpipes
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubyhacks
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.1.4
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.1.4
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rb-gsl
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.12.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.12.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: gsl_extras
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.3.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.3.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: hostmanager
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 0.1.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 0.1.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: command-line-flunky
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 0.1.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.1.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: git
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 1.2.9
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 1.2.9
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: shoulda
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rdoc
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - ~>
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '3.12'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - ~>
|
150
|
+
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '3.12'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: bundler
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">"
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: 1.0.0
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 1.0.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: jeweler
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: 2.0.0
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: 2.0.0
|
181
181
|
description: CodeRunner is a framework for the automated running and analysis of simulations.
|
@@ -187,6 +187,7 @@ description: CodeRunner is a framework for the automated running and analysis of
|
|
187
187
|
email: edmundhighcock@sourceforge.net
|
188
188
|
executables:
|
189
189
|
- coderunner
|
190
|
+
- coderunnerrepo
|
190
191
|
extensions:
|
191
192
|
- ext/extconf.rb
|
192
193
|
extra_rdoc_files:
|
@@ -194,7 +195,7 @@ extra_rdoc_files:
|
|
194
195
|
- README.md
|
195
196
|
- README.rdoc
|
196
197
|
files:
|
197
|
-
- .document
|
198
|
+
- ".document"
|
198
199
|
- Gemfile
|
199
200
|
- LICENSE.txt
|
200
201
|
- README.md
|
@@ -202,6 +203,7 @@ files:
|
|
202
203
|
- Rakefile
|
203
204
|
- VERSION
|
204
205
|
- bin/coderunner
|
206
|
+
- bin/coderunnerrepo
|
205
207
|
- coderunner.gemspec
|
206
208
|
- ext/code_runner_ext.c
|
207
209
|
- ext/extconf.rb
|
@@ -274,12 +276,12 @@ require_paths:
|
|
274
276
|
- lib
|
275
277
|
required_ruby_version: !ruby/object:Gem::Requirement
|
276
278
|
requirements:
|
277
|
-
- -
|
279
|
+
- - ">="
|
278
280
|
- !ruby/object:Gem::Version
|
279
281
|
version: 1.9.1
|
280
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
281
283
|
requirements:
|
282
|
-
- -
|
284
|
+
- - ">="
|
283
285
|
- !ruby/object:Gem::Version
|
284
286
|
version: '0'
|
285
287
|
requirements: []
|