aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreschnett <eschnett@83718e91-0e4f-0410-abf4-91180603181f>2010-06-30 22:51:04 +0000
committereschnett <eschnett@83718e91-0e4f-0410-abf4-91180603181f>2010-06-30 22:51:04 +0000
commitc36bf320da429160ff61f2772f1a3fc0ddb7fc58 (patch)
tree0618eb16233da41083ccfc866cb930530b4e7609
parentb67dd69ee349f83b255cf71bdb0dd2900299481e (diff)
Clean up the source code handling the announce mechanism in Formaline.
Restructure and clean up the makefiles and perl scripts that capture the source code when Cactus is built. Make things work with recent versions of git (>1.6.1). Split thorn tarballs into multiple files if they become too large. Update Formaline example parameter files. Use Carpet instead of PUGH, activate missing thorns. Some reformatting. git-svn-id: http://svn.cactuscode.org/arrangements/CactusUtils/Formaline/trunk@187 83718e91-0e4f-0410-abf4-91180603181f
-rw-r--r--par/announce.par4
-rw-r--r--par/output_source.par6
-rw-r--r--par/sendrdf.par8
-rw-r--r--src/announce.cc10
-rw-r--r--src/file.cc128
-rw-r--r--src/file.hh37
-rw-r--r--src/make.code.deps4
-rw-r--r--src/make.configuration.deps49
-rw-r--r--src/multistorage.cc103
-rw-r--r--src/multistorage.hh62
-rw-r--r--src/output_source.c2
-rw-r--r--src/portal.cc58
-rw-r--r--src/portal.hh34
-rw-r--r--src/rdf.cc27
-rw-r--r--src/rdf.hh12
-rw-r--r--src/rdf_publisher.cc2
-rw-r--r--src/senddata.cc5
-rw-r--r--src/storage.cc24
-rw-r--r--src/storage.hh47
-rw-r--r--src/util/VERSION1
-rwxr-xr-xsrc/util/git-commit-everything.pl2
-rwxr-xr-xsrc/util/git-gc-repo.pl4
-rwxr-xr-xsrc/util/git-push-everything.pl2
-rwxr-xr-xsrc/util/git-rm-thorn.pl4
-rwxr-xr-xsrc/util/git-rm-unused-thorns.pl44
-rwxr-xr-xsrc/util/makeblob.pl129
-rwxr-xr-xsrc/util/makemetablob.pl34
27 files changed, 526 insertions, 316 deletions
diff --git a/par/announce.par b/par/announce.par
index 390c1a5..4bb2319 100644
--- a/par/announce.par
+++ b/par/announce.par
@@ -8,11 +8,11 @@ Cactus::cctk_itlast = 0
ActiveThorns = "CoordBase InitBase"
ActiveThorns = "IOUtil"
-IO::out_dir = $parfile
+IO::out_dir = $parfile
IOUtil::parfile_write = no
ActiveThorns = "PUGH"
ActiveThorns = "Formaline"
-Formaline::verbose = yes
+Formaline::verbose = yes
Formaline::announce_to_portal = yes
diff --git a/par/output_source.par b/par/output_source.par
index db8460a..66baaa6 100644
--- a/par/output_source.par
+++ b/par/output_source.par
@@ -5,13 +5,13 @@ Cactus::cctk_show_schedule = no
Cactus::cctk_itlast = 0
-ActiveThorns = "CoordBase"
+ActiveThorns = "CoordBase InitBase"
ActiveThorns = "IOUtil"
-IO::out_dir = $parfile
+IO::out_dir = $parfile
IOUtil::parfile_write = no
ActiveThorns = "PUGH"
ActiveThorns = "Formaline"
-Formaline::store_into_file = no
+Formaline::store_into_file = no
diff --git a/par/sendrdf.par b/par/sendrdf.par
index fb5952e..2ad4e56 100644
--- a/par/sendrdf.par
+++ b/par/sendrdf.par
@@ -5,13 +5,15 @@ Cactus::cctk_show_schedule = no
Cactus::cctk_itlast = 0
+ActiveThorns = "LoopControl"
+
ActiveThorns = "CoordBase InitBase"
ActiveThorns = "IOUtil"
-IO::out_dir = $parfile
+IO::out_dir = $parfile
IOUtil::parfile_write = no
-ActiveThorns = "PUGH"
+ActiveThorns = "CarpetLib Carpet"
ActiveThorns = "Formaline"
Formaline::verbose = yes
@@ -19,3 +21,5 @@ Formaline::publish_level = 2
Formaline::send_as_rdf = yes
Formaline::rdf_hostname[0] = "buran.aei.mpg.de"
Formaline::rdf_port [0] = 24997
+Formaline::rdf_hostname[1] = "devportal.cct.lsu.edu"
+Formaline::rdf_port [1] = 8080
diff --git a/src/announce.cc b/src/announce.cc
index 35aa466..bf26933 100644
--- a/src/announce.cc
+++ b/src/announce.cc
@@ -177,7 +177,8 @@ namespace Formaline
void const * const ptr
= CCTK_ParameterGet ("cctk_run_title", "Cactus", & type);
assert (type == PARAMETER_STRING);
- char const * const run_title = * static_cast<char const * const *> (ptr);
+ char const * const run_title =
+ * static_cast<char const * const *> (ptr);
stores.store ("app_title", run_title);
}
@@ -284,7 +285,7 @@ namespace Formaline
{
char parameter_filename [10000];
CCTK_ParameterFilename (sizeof parameter_filename, parameter_filename);
- stores.store ("parameter_file", parameter_filename);
+ stores.store ("parameter_filename", parameter_filename);
}
{
@@ -296,8 +297,9 @@ namespace Formaline
}
{
- // Don't know what this is for
- stores.store ("data_directory", "");
+ // Don't know exactly what this is for -- send the IO output
+ // directory
+ stores.store ("data_directory", out_dir);
}
{
diff --git a/src/file.cc b/src/file.cc
index 9300403..cc93ca9 100644
--- a/src/file.cc
+++ b/src/file.cc
@@ -8,87 +8,104 @@
#include "file.hh"
+using namespace std;
+
namespace Formaline
{
-
- using namespace std;
-
-
-
+
file::
file (char const * const id,
- enum state const st)
- : storage (st)
+ enum state const st,
+ char const * const p,
+ file * const par)
+ : storage (st), path (p), parent (par)
{
DECLARE_CCTK_PARAMETERS;
-
+
+ if (parent) return;
+
ostringstream filenamebuf;
filenamebuf << out_dir << "/" << storage_filename;
string const filenamestring = filenamebuf.str();
-
+
ios::openmode const mode = get_state() == initial ? ios::trunc : ios::app;
fil.open (filenamestring.c_str(), mode);
-
+
if (get_state() == initial)
{
store ("jobid", id);
}
}
-
-
-
+
+
+
file::
~ file ()
{
- if (get_state() == final)
+ if (parent) return;
+
+ if (get_state())
{
store ("simulation", "done");
}
fil.close();
}
-
-
-
+
+
+
+ file * file::
+ open_group (char const * const name)
+ {
+ assert (name);
+ string name1 (name);
+ if (not name1.empty() and name1[name1.length()-1] != '/') {
+ name1 = name1 + "/";
+ }
+ return new file (0, get_state (), name1.c_str(), this);
+ }
+
+
+
void file::
store (char const * const key,
bool const value)
{
assert (key);
-
+
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << (value ? "yes" : "no");
-
+
ostringstream buf;
buf << clean (keybuf.str()) << "=" << clean (valuebuf.str()) << endl;
-
+
write (buf.str());
}
-
-
-
+
+
+
void file::
store (char const * const key,
CCTK_INT const value)
{
assert (key);
-
+
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << value;
-
+
ostringstream buf;
buf << clean (keybuf.str()) << "=" << clean (valuebuf.str()) << endl;
-
+
write (buf.str());
}
-
-
-
+
+
+
void file::
store (char const * const key,
CCTK_REAL const value)
@@ -98,7 +115,7 @@ namespace Formaline
int const prec = numeric_limits<CCTK_REAL>::digits10;
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << setprecision(prec) << value;
@@ -107,43 +124,50 @@ namespace Formaline
write (buf.str());
}
-
-
-
+
+
+
void file::
store (char const * const key,
char const * const value)
{
assert (key);
-
+
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << value;
-
+
ostringstream buf;
buf << clean (keybuf.str()) << "="
<< "\"" << clean (valuebuf.str()) << "\"" << endl;
-
+
write (buf.str());
}
-
-
-
+
+
+
void file::
- write (std::string const & msg)
+ write (string const & msg)
{
- fil << msg;
+ if (parent)
+ {
+ parent->write (msg);
+ }
+ else
+ {
+ fil << msg;
+ }
}
-
-
-
+
+
+
string file::
clean (string const & txt)
const
{
ostringstream buf;
-
+
for (string::const_iterator p = txt.begin(); p != txt.end(); ++ p)
{
switch (* p)
@@ -154,10 +178,10 @@ namespace Formaline
default: buf << * p;
}
}
-
+
return buf.str();
}
-
-
-
+
+
+
} // namespace Formaline
diff --git a/src/file.hh b/src/file.hh
index 2141d9f..8997114 100644
--- a/src/file.hh
+++ b/src/file.hh
@@ -12,47 +12,54 @@
namespace Formaline
{
-
+
class file : public storage
{
std::ofstream fil;
-
+ std::string const path;
+ file * const parent;
+
public:
-
+
file (char const * id,
- enum state st);
-
+ enum state st,
+ char const * p = "",
+ file * const par = 0);
+
virtual
~ file ();
-
+
+ virtual file *
+ open_group (char const * name);
+
virtual void
store (char const * key,
bool value);
-
+
virtual void
store (char const * key,
CCTK_INT value);
-
+
virtual void
store (char const * key,
CCTK_REAL value);
-
+
virtual void
store (char const * key,
char const * value);
-
+
private:
-
+
void
write (std::string const & msg);
-
+
std::string
clean (std::string const & txt)
const;
};
-
-
-
+
+
+
} // namespace Formaline
diff --git a/src/make.code.deps b/src/make.code.deps
index 606383d..d9b30a1 100644
--- a/src/make.code.deps
+++ b/src/make.code.deps
@@ -6,10 +6,10 @@
# file make.configuration.deps because only here the location of the
# source directory is known.
-FORMALINE_BIN_DIR = $(SCRATCH_BUILD)/formaline-bin
+FORMALINE_BIN_DIR = $(SCRATCH_BUILD)/Formaline/bin
FORMALINE_TAR_FILES = gethostname.pl makeblob.pl makemetablob.pl
-FORMALINE_GIT_FILES = git-add-thorn.pl git-commit-everything.pl git-gc-repo.pl git-init-master-repo.pl git-init-repo.pl git-lock.pl git-push-everything.pl git-rm-thorn.pl
+FORMALINE_GIT_FILES = git-add-thorn.pl git-commit-everything.pl git-gc-repo.pl git-init-master-repo.pl git-init-repo.pl git-lock.pl git-push-everything.pl git-rm-unused-thorns.pl git-rm-thorn.pl
$(CCTK_TARGET): $(FORMALINE_TAR_FILES:%=$(FORMALINE_BIN_DIR)/%) $(FORMALINE_GIT_FILES:%=$(FORMALINE_BIN_DIR)/%)
diff --git a/src/make.configuration.deps b/src/make.configuration.deps
index 00873f5..04ec21d 100644
--- a/src/make.configuration.deps
+++ b/src/make.configuration.deps
@@ -19,8 +19,8 @@ TR_C := $(shell tr -C 'a' 'b' < /dev/null > /dev/null 2> /dev/null && echo 'tr -
# Create a tarball of the source code whenever this thorn is linked
# into an executable
-TARBALL_DIR = $(SCRATCH_BUILD)
-FORMALINE_BIN_DIR = $(SCRATCH_BUILD)/formaline-bin
+TARBALL_DIR = $(SCRATCH_BUILD)/Formaline
+FORMALINE_BIN_DIR = $(SCRATCH_BUILD)/Formaline/bin
@@ -77,7 +77,7 @@ $(TOP)/BUILD-ID: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)Formaline
.PRECIOUS: $(TARBALL_DIR)/build-id.o
$(TARBALL_DIR)/build-id.o: $(TARBALL_DIR)/build-id.c
- $(CC) $(CFLAGS) -c -o $@ $^
+ cd $(TARBALL_DIR) && $(CC) $(CFLAGS) -c -o $@ $^
.PRECIOUS: $(TARBALL_DIR)/build-id.c
$(TARBALL_DIR)/build-id.c: $(TOP)/BUILD-ID
@@ -93,7 +93,7 @@ $(TARBALL_DIR)/build-id.c: $(TOP)/BUILD-ID
# Meta information
$(TARBALL_DIR)/cactus-meta-source.o: $(TARBALL_DIR)/cactus-meta-source.c
- $(CC) $(CFLAGS) -c -o $@ $^
+ cd $(TARBALL_DIR) && $(CC) $(CFLAGS) -c -o $@ $^
$(TARBALL_DIR)/cactus-meta-source.c: $(TARBALL_DIR)/cactus-flesh-source.c $(patsubst %,$(TARBALL_DIR)/cactus-thorn-source-%.c,$(notdir $(THORNS)))
$(FORMALINE_BIN_DIR)/makemetablob.pl Cactus $(notdir $(THORNS)) > $@
@@ -113,10 +113,11 @@ $(TARBALL_DIR)/cactus-meta-source.c: $(TARBALL_DIR)/cactus-flesh-source.c $(pats
$(TARBALL_DIR)/cactus-flesh-source.o: $(TARBALL_DIR)/cactus-flesh-source.c
@echo "Creating Formaline tarball for the flesh"
- $(CC) $(CFLAGS) -c -o $@ $^
+ cd $(TARBALL_DIR) && $(CC) $(CFLAGS) -c $^ $(^:%.c=%-????.c)
$(TARBALL_DIR)/cactus-flesh-source.c: $(TARBALL_DIR)/cactus-flesh-source.tar.gz $(CCTK_HOME)/arrangements/CactusUtils/Formaline/src/util/VERSION
- $(FORMALINE_BIN_DIR)/makeblob.pl '' Cactus < $< > $@
+ $(RM) -f $(@:%.c=%-????.c)
+ $(FORMALINE_BIN_DIR)/makeblob.pl $(@:%.c=%) '' Cactus < $<
$(TARBALL_DIR)/cactus-flesh-source.tar.gz: $(TARBALL_DIR)/cactus-flesh-source.files
cd $(CCTK_HOME) && \
@@ -145,6 +146,7 @@ $(TARBALL_DIR)/cactus-flesh-source.files: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK
# Make aborts if these dependencies vanish. Therefore mention only files
# here that cannot go away.
$(TARBALL_DIR)/cactus-flesh-source.ccldeps:
+ mkdir -p $(TARBALL_DIR)
{ \
echo "$(@:%.ccldeps=%.files) \\"; \
echo "$@: \\"; \
@@ -163,10 +165,11 @@ $(TARBALL_DIR)/cactus-flesh-source.ccldeps:
$(TARBALL_DIR)/cactus-thorn-source-%.o: $(TARBALL_DIR)/cactus-thorn-source-%.c
@echo "Creating Formaline tarball for thorn $*"
- $(CC) $(CFLAGS) -c -o $@ $^
+ cd $(TARBALL_DIR) && $(CC) $(CFLAGS) -c $^ $(^:%.c=%-????.c)
$(TARBALL_DIR)/cactus-thorn-source-%.c: $(TARBALL_DIR)/cactus-thorn-source-%.tar.gz $(CCTK_HOME)/arrangements/CactusUtils/Formaline/src/util/VERSION
- $(FORMALINE_BIN_DIR)/makeblob.pl $(patsubst %/,%,$(dir $(filter %/$(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%),$(THORNS)))) $(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%) < $< > $@
+ $(RM) -f $(@:%.c=%-????.c)
+ $(FORMALINE_BIN_DIR)/makeblob.pl $(@:%.c=%) $(patsubst %/,%,$(dir $(filter %/$(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%),$(THORNS)))) $(@:$(TARBALL_DIR)/cactus-thorn-source-%.c=%) < $<
$(TARBALL_DIR)/cactus-thorn-source-%.tar.gz: $(TARBALL_DIR)/cactus-thorn-source-%.files
cd $(CCTK_HOME) && \
@@ -194,6 +197,7 @@ $(TARBALL_DIR)/cactus-thorn-source-%.files: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CC
# Make aborts if these dependencies vanish. Therefore mention only files
# here that cannot go away.
$(TARBALL_DIR)/cactus-thorn-source-%.ccldeps:
+ mkdir -p $(TARBALL_DIR)
{ \
echo "$(@:%.ccldeps=%.files) \\"; \
echo "$@: \\"; \
@@ -284,6 +288,7 @@ git-store-source: git-commit-everything git-push-everything
echo "Formaline: If the build process seems to hang, some other command"
echo "Formaline: is still running, e.g. the final link stage.)"
+GIT-TAG-DIR = $(SCRATCH_BUILD)/Formaline
GIT-BIN = $(FORMALINE_BIN_DIR)
GIT-ROOT = $(CCTK_HOME)
GIT-REPO = $(TOP)/configjar.git
@@ -299,34 +304,44 @@ git-push-everything: git-commit-everything $(BUILD-ID-FILE)
{ \
'$(GIT-BIN)/git-init-master-repo.pl' '$(GIT)' '$(GIT-MASTER-REPO)' && \
if [ -e "$(CCTK_HOME)/cactus.config" ]; then \
- source "$(CCTK_HOME)/cactus.config" && \
- export CACTUS_CENTRAL_GIT_REPO; \
+ . "$(CCTK_HOME)/cactus.config"; \
fi && \
+ export CACTUS_CENTRAL_GIT_REPO && \
'$(GIT-BIN)/git-push-everything.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-MASTER-REPO)'; \
} || echo "Formaline: WARNING: Error while pushing to master repository"
.PHONY: git-commit-everything
-git-commit-everything: $(SCRATCH_BUILD)/cactus-flesh-source.git-tag $(GIT-THORNS:%=$(SCRATCH_BUILD)/cactus-thorn-%.git-tag) $(BUILD-ID-FILE)
+git-commit-everything: $(GIT-TAG-DIR)/cactus-flesh-source.git-tag $(GIT-THORNS:%=$(GIT-TAG-DIR)/cactus-thorn-%.git-tag) $(BUILD-ID-FILE) git-rm-unused-thorns
{ \
'$(GIT-BIN)/git-commit-everything.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' "$$(cat $(BUILD-ID-FILE))" "$$(cat $(CONFIG-ID-FILE))"; \
} || echo "Formaline: WARNING: Error while committing to repository"
-.PRECIOUS: $(SCRATCH_BUILD)/cactus-flesh-source.git-tag
-$(SCRATCH_BUILD)/cactus-flesh-source.git-tag: $(TARBALL_DIR)/cactus-flesh-source.files
+# Wait until after thorn Formaline has been built, so that its
+# utilities are available
+.PHONY: git-rm-unused-thorns
+git-rm-unused-thorns: $(CCTK_LIBDIR)/$(LIBNAME_PREFIX)$(CCTK_LIBNAME_PREFIX)Formaline$(LIBNAME_SUFFIX)
+ { \
+ '$(GIT-BIN)/git-rm-unused-thorns.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' $(THORNS); \
+ } || echo "Formaline: WARNING: Error while removing unused thorns"
+
+.PRECIOUS: $(GIT-TAG-DIR)/cactus-flesh-source.git-tag
+$(GIT-TAG-DIR)/cactus-flesh-source.git-tag: $(TARBALL_DIR)/cactus-flesh-source.files
+ mkdir -p $(GIT-TAG-DIR)
{ \
'$(GIT-BIN)/git-init-repo.pl' '$(GIT)' '$(GIT-REPO)' && \
echo "Formaline: Adding flesh to git repository..." && \
- '$(GIT-BIN)/git-rm-thorn.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' 'cactus' CONTRIBUTORS COPYRIGHT Makefile lib src configs && \
+ '$(GIT-BIN)/git-rm-thorn.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' 'Cactus' CONTRIBUTORS COPYRIGHT Makefile lib src configs && \
: xargs ls < $(TARBALL_DIR)/cactus-flesh-source.files \
> $(TARBALL_DIR)/cactus-flesh-source.files2 2> /dev/null && \
- xargs '$(GIT-BIN)/git-add-thorn.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' 'cactus' \
+ xargs '$(GIT-BIN)/git-add-thorn.pl' '$(GIT)' '$(GIT-REPO)' '$(GIT-ROOT)' 'Cactus' \
< $(TARBALL_DIR)/cactus-flesh-source.files && \
: rm $(TARBALL_DIR)/cactus-flesh-source.files2 && \
: > $@; \
} || echo "Formaline: WARNING: Error while adding flesh to git repository"
-.PRECIOUS: $(SCRATCH_BUILD)/cactus-thorn-%.git-tag
-$(SCRATCH_BUILD)/cactus-thorn-%.git-tag: $(TARBALL_DIR)/cactus-thorn-source-%.files
+.PRECIOUS: $(GIT-TAG-DIR)/cactus-thorn-%.git-tag
+$(GIT-TAG-DIR)/cactus-thorn-%.git-tag: $(TARBALL_DIR)/cactus-thorn-source-%.files
+ mkdir -p $(GIT-TAG-DIR)
{ \
'$(GIT-BIN)/git-init-repo.pl' '$(GIT)' '$(GIT-REPO)' && \
echo "Formaline: Adding thorn $* to git repository..." && \
diff --git a/src/multistorage.cc b/src/multistorage.cc
index e3329c5..3e79f90 100644
--- a/src/multistorage.cc
+++ b/src/multistorage.cc
@@ -1,93 +1,109 @@
#include "multistorage.hh"
+using namespace std;
+
namespace Formaline
{
-
- using namespace std;
-
-
-
+
multistorage::
multistorage ()
{
}
-
-
-
+
+
+
multistorage::
~ multistorage ()
{
- for (list<storage *>::const_iterator it = stores.begin();
- it != stores.end();
- ++ it)
+ close ();
+ }
+
+
+
+ void
+ multistorage::
+ close ()
+ {
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
{
delete * it;
}
+ stores.clear ();
}
-
-
-
+
+
+
void multistorage::
add_storage (storage * const s)
{
stores.push_front (s);
}
-
-
-
+
+
+
int multistorage::
num_storages ()
const
{
return stores.size();
}
-
-
-
+
+
+
+ void
+ multistorage::open_group (multistorage & ms, char const * const name)
+ {
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
+ {
+ ms.add_storage ((* it)->open_group (name));
+ }
+ }
+
+
+
void multistorage::
store (char const * const key, bool const value)
const
{
- for (list<storage *>::const_iterator it = stores.begin();
- it != stores.end();
- ++ it)
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
{
(* it)->store (key, value);
}
}
-
-
-
+
+
+
void multistorage::
store (char const * const key, CCTK_INT const value)
const
{
- for (list<storage *>::const_iterator it = stores.begin();
- it != stores.end();
- ++ it)
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
{
(* it)->store (key, value);
}
}
-
-
-
+
+
+
void multistorage::
store (char const * const key, CCTK_REAL const value)
const
{
- for (list<storage *>::const_iterator it = stores.begin();
- it != stores.end();
- ++ it)
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
{
(* it)->store (key, value);
}
}
-
-
-
+
+
+
void multistorage::
store (char const * const key, char const * const value)
const
@@ -95,14 +111,13 @@ namespace Formaline
// Ignore null strings
if (value == 0) return;
- for (list<storage *>::const_iterator it = stores.begin();
- it != stores.end();
- ++ it)
+ for (list<storage *>::const_iterator
+ it = stores.begin(); it != stores.end(); ++ it)
{
(* it)->store (key, value);
}
}
-
-
-
+
+
+
} // namespace Formaline
diff --git a/src/multistorage.hh b/src/multistorage.hh
index da9da53..5b37a69 100644
--- a/src/multistorage.hh
+++ b/src/multistorage.hh
@@ -11,51 +11,59 @@
namespace Formaline
{
-
- using namespace std;
-
-
-
+
class multistorage
{
- list<storage *> stores;
-
+ std::list<storage *> stores;
+
multistorage (multistorage const &);
-
+
multistorage
operator= (multistorage const &);
-
+
public:
-
+
multistorage ();
-
+
~ multistorage ();
-
+
+ void
+ close ();
+
+
+
void
add_storage (storage *);
-
+
int
num_storages ()
const;
-
+
+
+
+ void
+ open_group (multistorage &, char const * name);
+
+
+
void
store (char const * key, bool value)
const;
-
+
void
store (char const * key, CCTK_INT value)
const;
-
+
void
store (char const * key, CCTK_REAL value)
const;
-
+
void
store (char const * key, char const * value)
const;
-
-
-
+
+
+
#ifdef HAVE_CCTK_INT1
# ifndef CCTK_INTEGER_PRECISION_1
void
@@ -66,7 +74,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_INT2
# ifndef CCTK_INTEGER_PRECISION_2
void
@@ -77,7 +85,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_INT4
# ifndef CCTK_INTEGER_PRECISION_4
void
@@ -88,7 +96,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_INT8
# ifndef CCTK_INTEGER_PRECISION_8
void
@@ -99,7 +107,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_REAL4
# ifndef CCTK_REAL_PRECISION_4
void
@@ -110,7 +118,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_REAL8
# ifndef CCTK_REAL_PRECISION_8
void
@@ -121,7 +129,7 @@ namespace Formaline
}
# endif
#endif
-
+
#ifdef HAVE_CCTK_REAL16
# ifndef CCTK_REAL_PRECISION_16
void
@@ -132,7 +140,7 @@ namespace Formaline
}
# endif
#endif
-
+
};
diff --git a/src/output_source.c b/src/output_source.c
index b2bfcb4..cd26f58 100644
--- a/src/output_source.c
+++ b/src/output_source.c
@@ -51,7 +51,7 @@ Formaline_OutputSource (CCTK_ARGUMENTS)
CCTK_CreateDirectory (0755, filename);
/* Output all thorns' tarballs */
- for (count = 0; count < cactus_source_length; ++ count)
+ for (count = 0; cactus_source[count]; ++ count)
{
snprintf (filename, sizeof filename,
"%s/%s/Cactus-source-%s.tar.gz",
diff --git a/src/portal.cc b/src/portal.cc
index 81b046f..f2513c7 100644
--- a/src/portal.cc
+++ b/src/portal.cc
@@ -19,15 +19,13 @@
#include "portal.hh"
+using namespace std;
+
namespace Formaline
{
-
- using namespace std;
-
-
static bool
is_clean_for_shell (char const * str);
@@ -35,11 +33,15 @@ namespace Formaline
portal::
portal (char const * const id,
- enum state const st)
- : storage (st)
+ enum state const st,
+ char const * const p,
+ portal * const par)
+ : storage (st), path (p), parent (par)
{
DECLARE_CCTK_PARAMETERS;
+ if (parent) return;
+
msgbuf << "<?xml version='1.0' ?>"
<< "<methodCall><methodName>";
switch (get_state())
@@ -62,15 +64,23 @@ namespace Formaline
<< "<name>jobid</name>"
<< "<value><string>" << clean (id) << "</string></value>"
<< "</member>";
- }
-
-
-
+ }
+
+
+
portal::
~ portal ()
{
DECLARE_CCTK_PARAMETERS;
+ if (parent)
+ {
+ parent->msgbuf << msgbuf.str();
+ return;
+ }
+
+
+
string const socket_script = "socket-client.pl";
string const socket_data = "socket-data";
@@ -115,9 +125,10 @@ namespace Formaline
<< "my @hostlist = (";
// NUM_PORTAL_ENTRIES must match the size of the
- // Formaline::portal_hostname and Formaline::portal_port parameter arrays
+ // Formaline::portal_hostname and Formaline::portal_port parameter
+ // arrays
#define NUM_PORTAL_ENTRIES 5
-
+
// add all array parameters which have been set
for (int i = 0; i < NUM_PORTAL_ENTRIES; i++) {
if (*portal_hostname[i]) {
@@ -334,7 +345,20 @@ namespace Formaline
remove (datafilename);
remove (scriptfilename);
}
-
+
+
+
+ portal * portal::
+ open_group (char const * const name)
+ {
+ assert (name);
+ string name1 (name);
+ if (not name1.empty() and name1[name1.length()-1] != '/') {
+ name1 = name1 + "/";
+ }
+ return new portal (0, get_state (), name1.c_str(), this);
+ }
+
void portal::
@@ -344,7 +368,7 @@ namespace Formaline
assert (key);
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << (value ? "true" : "false");
@@ -363,7 +387,7 @@ namespace Formaline
assert (key);
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << value;
@@ -384,7 +408,7 @@ namespace Formaline
int const prec = numeric_limits<CCTK_REAL>::digits10;
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << setprecision(prec) << value;
@@ -403,7 +427,7 @@ namespace Formaline
assert (key);
ostringstream keybuf;
- keybuf << key;
+ keybuf << path << key;
ostringstream valuebuf;
valuebuf << value;
diff --git a/src/portal.hh b/src/portal.hh
index 27c6d22..faa787b 100644
--- a/src/portal.hh
+++ b/src/portal.hh
@@ -10,47 +10,51 @@
namespace Formaline
{
-
-
-
+
class portal : public storage
{
-
std::ostringstream msgbuf;
+ std::string const path;
+ portal * const parent;
public:
-
+
portal (char const * id,
- enum state st);
-
+ enum state st,
+ char const * p = "",
+ portal * const par = 0);
+
virtual
~ portal ();
-
+
+ virtual portal *
+ open_group (char const * name);
+
virtual void
store (char const * key,
bool value);
-
+
virtual void
store (char const * key,
CCTK_INT value);
-
+
virtual void
store (char const * key,
CCTK_REAL value);
-
+
virtual void
store (char const * key,
char const * value);
-
+
private:
std::string
clean (std::string const & txt)
const;
};
-
-
-
+
+
+
} // namespace Formaline
diff --git a/src/rdf.cc b/src/rdf.cc
index da6f734..f818bfb 100644
--- a/src/rdf.cc
+++ b/src/rdf.cc
@@ -33,7 +33,8 @@ namespace Formaline
{
using namespace std;
- // the jobID is shared between this source file and PublishAsRDF.cc
+ // The jobID is shared between this source file and PublishAsRDF.cc
+ // ES 2008-04-29: Check this, I think this is wrong
string jobID;
@@ -56,9 +57,13 @@ namespace Formaline
rdf::
rdf (char const * const id,
enum state const st,
- cGH const * const cctkGH)
- : storage (st)
+ cGH const * const cctkGH,
+ char const * const n,
+ rdf * const par)
+ : storage (st), groupname (n), parent (par)
{
+ if (parent) return;
+
// set the unique ID for this simulation
jobID = clean (string (id));
@@ -452,6 +457,14 @@ namespace Formaline
{
DECLARE_CCTK_PARAMETERS;
+ if (parent)
+ {
+ parent->msgbuf << "<cctk:" << groupname << ">" << endl
+ << msgbuf.str()
+ << "</cctk:" << groupname << ">" << endl;
+ return;
+ }
+
// check if anything needs to be done
if (msgbuf.str().empty()) return;
@@ -526,6 +539,14 @@ namespace Formaline
+ rdf * rdf::
+ open_group (char const * const name)
+ {
+ return new rdf (0, get_state (), 0, name, this);
+ }
+
+
+
void rdf::
store (char const * const key,
bool const value)
diff --git a/src/rdf.hh b/src/rdf.hh
index 72614c3..b5b8ccc 100644
--- a/src/rdf.hh
+++ b/src/rdf.hh
@@ -42,7 +42,7 @@ namespace Formaline
// buffer to keep RDF metadata until the next Update() call
extern std::vector<rdfPublishItem> rdfPublishList;
- // the jobID string
+ // the jobID std::string
extern std::string jobID;
std::string clean (std::string const & txt);
@@ -53,17 +53,23 @@ namespace Formaline
class rdf : public storage
{
-
std::ostringstream msgbuf;
+ std::string const groupname;
+ rdf * const parent;
public:
rdf (char const * id,
enum state st,
- cGH const * cctkGH);
+ cGH const * cctkGH, // this should probably go away
+ char const * n = "",
+ rdf * par = 0);
virtual
~ rdf ();
+
+ virtual rdf *
+ open_group (char const * name);
virtual void
store (char const * key,
diff --git a/src/rdf_publisher.cc b/src/rdf_publisher.cc
index 77b48db..a256668 100644
--- a/src/rdf_publisher.cc
+++ b/src/rdf_publisher.cc
@@ -296,7 +296,7 @@ static void ParameterSetNotify (void *,
extern "C"
-void Formaline_RegisterPublishRDF_Callbacks (void)
+void Formaline_RegisterPublishRDF_Callbacks (CCTK_ARGUMENTS)
{
int registered = 0;
diff --git a/src/senddata.cc b/src/senddata.cc
index 41834cf..09dcf89 100644
--- a/src/senddata.cc
+++ b/src/senddata.cc
@@ -36,6 +36,11 @@ namespace Formaline
{
DECLARE_CCTK_PARAMETERS;
+ if (verbose) {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Announcing to %s:%d", hostname.c_str(), port);
+ }
+
#if 0
// pair<,> is not a standard STL class
typedef pair <string, int> destination_t;
diff --git a/src/storage.cc b/src/storage.cc
index 4e0dd24..4e4abff 100644
--- a/src/storage.cc
+++ b/src/storage.cc
@@ -6,33 +6,29 @@
namespace Formaline
{
-
- using namespace std;
-
-
-
+
storage::
storage (enum state const st)
: m_state (st)
{
}
-
-
-
+
+
+
storage::
~ storage ()
{
}
-
-
-
+
+
+
enum storage::state storage::
get_state ()
const
{
return m_state;
}
-
-
-
+
+
+
} // namespace Formaline
diff --git a/src/storage.hh b/src/storage.hh
index e0b5ddb..08f400f 100644
--- a/src/storage.hh
+++ b/src/storage.hh
@@ -7,55 +7,58 @@
namespace Formaline
{
-
-
-
+
class storage
{
public:
-
+
enum state { initial, update, final };
-
+
private:
-
+
enum state m_state;
-
+
public:
-
+
storage (enum state);
-
+
virtual
~ storage ();
-
+
enum state
get_state ()
const;
-
+
+ virtual storage *
+ open_group (char const * name)
+ = 0;
+
virtual void
store (char const * key,
bool value)
- = 0;
-
+ = 0;
+
virtual void
store (char const * key,
CCTK_INT value)
- = 0;
-
+ = 0;
+
virtual void
store (char const * key,
CCTK_REAL value)
- = 0;
-
+ = 0;
+
virtual void
store (char const * key,
char const * value)
- = 0;
+ = 0;
+
};
-
-
-
+
+
+
} // namespace Formaline
-#endif // ifndef FORMALINE_STORAGE_HH
+#endif // #ifndef FORMALINE_STORAGE_HH
diff --git a/src/util/VERSION b/src/util/VERSION
index 9945293..d23d03d 100644
--- a/src/util/VERSION
+++ b/src/util/VERSION
@@ -3,3 +3,4 @@ Each auto-generated file depends on this file.
Thus, whenever this file changes, all auto-generated files are recreated.
2005-08-22: Change layout of struct sourceinfo
+2010-06-23: Move thorn to a new arrangement
diff --git a/src/util/git-commit-everything.pl b/src/util/git-commit-everything.pl
index d972218..96a06f2 100755
--- a/src/util/git-commit-everything.pl
+++ b/src/util/git-commit-everything.pl
@@ -12,7 +12,7 @@ $#ARGV == 4 or die;
my ($git_cmd, $git_repo, $git_root, $build_id, $config_id) = @ARGV;
# Path where the git-*.pl commands are installed
-my $bindir = $ENV{'SCRATCH_BUILD'} . '/formaline-bin';
+my $bindir = $ENV{'SCRATCH_BUILD'} . '/Formaline/bin';
my $silent = $ENV{'SILENT'};
$silent = 'yes' if ! defined $silent;
diff --git a/src/util/git-gc-repo.pl b/src/util/git-gc-repo.pl
index 21bb03f..b02d5a4 100755
--- a/src/util/git-gc-repo.pl
+++ b/src/util/git-gc-repo.pl
@@ -42,7 +42,9 @@ if (! defined $oldreposize) {
$oldreposize = 0;
}
-my $maxreposize = 10 * $oldreposize;
+# Collect garbage once the repository has grown by more than a factor
+# of two
+my $maxreposize = 2 * $oldreposize;
if ($reposize > $maxreposize) {
print "Formaline: Optimising git repository (slow only the first time)...\n";
diff --git a/src/util/git-push-everything.pl b/src/util/git-push-everything.pl
index ee39ab4..8f5f111 100755
--- a/src/util/git-push-everything.pl
+++ b/src/util/git-push-everything.pl
@@ -15,7 +15,7 @@ my ($git_cmd, $git_repo, $git_master_repo) = @ARGV;
my $git_central_repo = $ENV{'CACTUS_CENTRAL_GIT_REPO'};
# Path where the git-*.pl commands are installed
-my $bindir = $ENV{'SCRATCH_BUILD'} . '/formaline-bin';
+my $bindir = $ENV{'SCRATCH_BUILD'} . '/Formaline/bin';
my $silent = $ENV{'SILENT'};
$silent = 'yes' if ! defined $silent;
diff --git a/src/util/git-rm-thorn.pl b/src/util/git-rm-thorn.pl
index 9d5342b..75769f1 100755
--- a/src/util/git-rm-thorn.pl
+++ b/src/util/git-rm-thorn.pl
@@ -1,6 +1,6 @@
#! /usr/bin/perl -w
-# Remote a Cactus thorn from the repository index, if and wherever it
+# Remove a Cactus thorn from the repository index, if and wherever it
# exists
# 2010-01-29 Erik Schnetter <schnetter@cct.lsu.edu>
@@ -9,7 +9,7 @@ use strict;
-$#ARGV >= 3 or die;
+$#ARGV >= 4 or die;
my ($git_cmd, $git_repo, $git_root, $thorn, @files) = @ARGV;
my $silent = $ENV{'SILENT'};
diff --git a/src/util/git-rm-unused-thorns.pl b/src/util/git-rm-unused-thorns.pl
new file mode 100755
index 0000000..1c8b4c9
--- /dev/null
+++ b/src/util/git-rm-unused-thorns.pl
@@ -0,0 +1,44 @@
+#! /usr/bin/perl -w
+
+# Remove all Cactus thorns from the repository index unless they are
+# in the thorn list
+
+# 2010-04-08 Erik Schnetter <schnetter@cct.lsu.edu>
+
+use strict;
+
+
+
+$#ARGV >= 3 or die;
+my ($git_cmd, $git_repo, $git_root, @thorns) = @ARGV;
+
+my $silent = $ENV{'SILENT'};
+$silent = 'yes' if ! defined $silent;
+$silent = $silent !~ /^no$/i;
+my $silencer = $silent ? '> /dev/null 2>&1' : '';
+
+
+
+# Ensure that the repository exists
+die unless -e "$git_repo/.git";
+$ENV{'GIT_DIR'} = "$git_repo/.git";
+
+
+
+my @files = split m{\n}, `$git_cmd ls-files arrangements 2> /dev/null`;
+
+# Remove the files one by one because we want to ignore errors, but
+# git aborts after the first error
+file: for my $file (@files) {
+ for my $thorn (@thorns) {
+ next file if $file =~ m{^arrangements/$thorn/};
+ }
+
+ print "Executing: $git_cmd rm --cached -r $file\n"
+ unless $silent;
+ system "$git_cmd rm --cached -r $file > /dev/null 2>&1";
+ # Ignore errors
+ #if ($?) {
+ # die "Could not remove file $file from git repository";
+ #}
+}
diff --git a/src/util/makeblob.pl b/src/util/makeblob.pl
index 14fd49c..55badce 100755
--- a/src/util/makeblob.pl
+++ b/src/util/makeblob.pl
@@ -1,20 +1,94 @@
#! /usr/bin/perl -w
+use diagnostics;
+use warnings;
use strict;
my $items_per_line = 16;
my $items_per_file = 128 * 1024;
-$#ARGV == 1 or die;
+$#ARGV == 2 or die "ARGV=@ARGV";
-my $arrangement = $ARGV[0];
-my $thorn = $ARGV[1];
+my $basename = $ARGV[0];
+my $arrangement = $ARGV[1];
+my $thorn = $ARGV[2];
$thorn ne '' or die;
-print <<EOF;
+
+
+# Write several files, each with a maximum length
+
+my $done = 0;
+for (my $count = 0; ! $done; ++ $count) {
+ my $fcount = sprintf "%04d", $count;
+ my $fcount_next = sprintf "%04d", $count + 1;
+
+ open FILE, "> $basename-$fcount.c" or die;
+ print FILE <<EOF;
/* This is an auto-generated file -- do not edit */
\#include <stddef.h>
+\#include <stdlib.h>
+
+struct datainfo
+{
+ unsigned char const * data;
+ size_t length;
+ struct datainfo const * next;
+};
+
+EOF
+
+ print FILE "static unsigned char const data_${fcount} [] = {";
+ my $bytes;
+ for ($bytes = 0; $bytes < $items_per_file; ++ $bytes) {
+ my $ch = getc;
+ if (! defined $ch) {
+ $done = 1;
+ last;
+ }
+ if ($bytes != 0) {
+ printf FILE ",";
+ }
+ if ($bytes % $items_per_line == 0) {
+ printf FILE "\n";
+ printf FILE " ";
+ }
+ printf FILE "%3d", ord $ch;
+ }
+ printf FILE "\n";
+ printf FILE "};\n";
+
+ print FILE "\n";
+ if (! $done) {
+ print FILE "struct datainfo const cactus_data_${fcount_next}_${thorn};\n";
+ }
+ print FILE "struct datainfo const cactus_data_${fcount}_${thorn} =\n";
+ print FILE "{\n";
+ print FILE " data_${fcount},\n";
+ print FILE " ${bytes}UL,\n";
+ if (! $done) {
+ print FILE " & cactus_data_${fcount_next}_${thorn}\n";
+ }
+ else {
+ print FILE " NULL\n";
+ }
+ print FILE "};\n";
+
+ close FILE;
+}
+
+
+
+# Write meta-file
+
+{
+ open FILE, "> $basename.c" or die;
+ printf FILE <<EOF;
+/* This is an auto-generated file -- do not edit */
+
+\#include <stddef.h>
+\#include <stdlib.h>
struct datainfo
{
@@ -38,50 +112,5 @@ struct sourceinfo const cactus_source_$thorn =
\"$thorn\"
};
EOF
-
-my $done = 0;
-for (my $fcount = 0; ! $done; ++ $fcount)
-{
- printf "\n";
- printf "static unsigned char const data_%04d [] = {", $fcount;
- my $count;
- for ($count = 0; $count < $items_per_file; ++ $count)
- {
- my $ch = getc;
- if (! defined $ch)
- {
- $done = 1;
- last;
- }
- if ($count != 0)
- {
- printf ",";
- }
- if ($count % $items_per_line == 0)
- {
- printf "\n";
- printf " ";
- }
- printf "%3d", ord $ch;
- }
- printf "\n";
- printf "};\n";
- printf "\n";
- if (! $done)
- {
- printf "struct datainfo const cactus_data_%04d_%s;\n", $fcount + 1, $thorn;
- }
- printf "struct datainfo const cactus_data_%04d_%s =\n", $fcount, $thorn;
- printf "{\n";
- printf " data_%04d,\n", $fcount;
- printf " %dUL,\n", $count;
- if (! $done)
- {
- printf " & cactus_data_%04d_%s\n", $fcount + 1, $thorn;
- }
- else
- {
- printf " NULL\n";
- }
- printf "};\n";
+ close FILE;
}
diff --git a/src/util/makemetablob.pl b/src/util/makemetablob.pl
index f1349b2..530e187 100755
--- a/src/util/makemetablob.pl
+++ b/src/util/makemetablob.pl
@@ -1,11 +1,12 @@
#! /usr/bin/perl -w
use strict;
-
+
print <<EOF;
/* This is an auto-generated file -- do not edit */
\#include <stddef.h>
+\#include <stdlib.h>
struct datainfo
{
@@ -23,21 +24,20 @@ struct sourceinfo
EOF
-for (my $count = 0; $count <= $#ARGV; ++ $count)
-{
- printf "extern struct sourceinfo cactus_source_%s;\n", $ARGV[$count];
+foreach my $argv (@ARGV) {
+ print "extern struct sourceinfo const cactus_source_${argv};\n";
}
-printf "\n";
-printf "struct sourceinfo const * const cactus_source [] = {";
-for (my $count = 0; $count <= $#ARGV; ++ $count)
-{
- if ($count != 0)
- {
- printf ",";
- }
- printf "\n";
- printf " & cactus_source_%s", $ARGV[$count];
+
+print <<EOF;
+
+struct sourceinfo const * const cactus_source [] = {
+EOF
+
+foreach my $argv (@ARGV) {
+ print " & cactus_source_${argv},\n";
}
-printf "\n";
-printf "};\n";
-printf "size_t const cactus_source_length = %d;\n", $#ARGV + 1;
+
+print <<EOF;
+ NULL
+};
+EOF