xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>
Subject: [OSSTEST PATCH 07/27] memoise: New utility
Date: Wed, 16 Sep 2015 14:35:10 +0100	[thread overview]
Message-ID: <1442410530-9665-8-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1442410530-9665-1-git-send-email-ian.jackson@eu.citrix.com>

Give this a GPLv2+ licence so that we can move it into some other
FLOSS package later.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
---
 memoise |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100755 memoise

diff --git a/memoise b/memoise
new file mode 100755
index 0000000..ff999d5
--- /dev/null
+++ b/memoise
@@ -0,0 +1,56 @@
+#!/bin/sh
+#
+# memoise - a command line output memoisation tool
+#
+# usage:
+#    memoise datadir cmd arg arg ...
+#
+# will create datadir if necessary; delete datadir when you're done
+#
+#    Copyright 2015 Citrix Inc.
+#
+#    This file is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License along
+#    with this program; if not, write to the Free Software Foundation, Inc.,
+#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+#    NB that the rest of osstest is AGPLv3+, so when this file is
+#    distributed together with osstest, the AGPLv3 applies.
+
+set -e
+
+case "$#.$1" in
+[01].)	echo >&2 "memoise: too few args"; exit 127 ;;
+*.-)	echo >&2 "memoise: unknown option $1"; exit 127 ;;
+esac
+
+datadir=$1; shift
+
+mkdir -p -- "$datadir"
+
+id=`for arg in "$@"; do printf '%s\0' "$arg"; done | sha256sum`
+id=${id%  -}
+
+f="$datadir/$id"
+
+if ! [ -f "$f.o" ]; then
+	with-lock-ex -w "$f.l" sh -ec '
+		f=$1; shift
+		if [ -f "$f.o" ]; then exit 0; fi
+		exec </dev/null >"$f.t"
+		"$@"
+		mv -- "$f.t" "$f.o"
+		rm "$f.l"
+	' x "$f" "$@"
+fi
+
+cat -- "$f.o"
-- 
1.7.10.4

  parent reply	other threads:[~2015-09-16 13:35 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-16 13:35 [OSSTEST PATCH 00/27] xen.git#staging smoke tests Ian Jackson
2015-09-16 13:35 ` [OSSTEST PATCH 01/27] docs: Document OSSTEST_RESOURCE_PRIORITY values in README.planner Ian Jackson
2015-09-16 13:46   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 02/27] Executive: cs-job-create: Check that OSSTEST_FLIGHT is not set Ian Jackson
2015-09-16 13:48   ` Ian Campbell
2015-09-16 13:52     ` Ian Jackson
2015-09-16 13:35 ` [OSSTEST PATCH 03/27] mg-list-all-branches: Suppress `maintjobs' Ian Jackson
2015-09-16 13:48   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 04/27] standalone: Do not blunder on after errors Ian Jackson
2015-09-16 13:48   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 05/27] standalone: Set very long SQLite3 busy timeout in Perl Ian Jackson
2015-09-16 13:49   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 06/27] cr-daily-branch: Honour AP_FETCH_PFX Ian Jackson
2015-09-16 13:49   ` Ian Campbell
2015-09-16 13:35 ` Ian Jackson [this message]
2015-09-16 13:54   ` [OSSTEST PATCH 07/27] memoise: New utility Ian Campbell
2015-09-16 13:58     ` Ian Jackson
2015-09-16 14:07       ` Ian Campbell
2015-09-16 14:38         ` Ian Jackson
2015-09-16 14:41           ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 08/27] standalone-generate-dump-flight-runvars: memoise ap-fetch Ian Jackson
2015-09-16 13:56   ` Ian Campbell
2015-09-16 13:59     ` Ian Jackson
2015-09-16 13:35 ` [OSSTEST PATCH 09/27] mfi-common: Use job_create_build for build-*-prev Ian Jackson
2015-09-16 13:56   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 10/27] ap-fetch-version*: Unwrap xen-unstable lines Ian Jackson
2015-09-16 13:56   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 11/27] ap-push: Use refs/heads/ for destinations Ian Jackson
2015-09-16 13:57   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 12/27] cr-ensure-disk-space: Honour -D Ian Jackson
2015-09-16 13:59   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 13/27] cr-ensure-disk-space: Look at referring flights Ian Jackson
2015-09-16 14:09   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 14/27] cr-ensure-disk-space: Make main loop body into a subroutine Ian Jackson
2015-09-16 14:09   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 15/27] cr-ensure-disk-space: Take the flights db lock Ian Jackson
2015-09-16 14:13   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 16/27] cs-job-create: Permit creation of `synth' runvars Ian Jackson
2015-09-16 14:16   ` Ian Campbell
2015-09-16 14:41     ` Ian Jackson
2015-09-16 14:49       ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 17/27] mg-show-flight-runvars: Decorate synth runvar names with ~ Ian Jackson
2015-09-16 14:19   ` Ian Campbell
2015-09-16 14:46     ` Ian Jackson
2015-09-16 13:35 ` [OSSTEST PATCH 18/27] standalone-generate-dump-flight-runvars: Show synth runvars Ian Jackson
2015-09-16 14:20   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 19/27] ts-host-alloc-Executive: Honour various hostalloc_* runvars Ian Jackson
2015-09-16 14:22   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 20/27] make-flight: Allow separate specification of pre-built Xen vs others Ian Jackson
2015-09-16 14:25   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 21/27] make-flight: Contemplate varying architecture for Debian HVM Ian Jackson
2015-09-16 14:26   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 22/27] make-flight: Run job_create_test_filter_callback on true job name Ian Jackson
2015-09-16 14:26   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 23/27] make-flight: Provide xen-unstable-smoke branch Ian Jackson
2015-09-16 14:28   ` Ian Campbell
2015-09-16 14:51     ` Ian Jackson
2015-09-16 15:09       ` Ian Campbell
2015-09-16 14:31   ` Ian Campbell
2015-09-16 14:31     ` Ian Campbell
2015-09-16 14:57     ` Ian Jackson
2015-09-16 15:10       ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 24/27] make-flight: mfi-common: Honour $global_runvars Ian Jackson
2015-09-16 14:29   ` Ian Campbell
2015-09-16 14:53     ` Ian Jackson
2015-09-16 13:35 ` [OSSTEST PATCH 25/27] ap-*: Be able to fetch and push xen.git#smoked Ian Jackson
2015-09-16 14:32   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 26/27] cri-common: Support xen-unstable-smoke Ian Jackson
2015-09-16 14:33   ` Ian Campbell
2015-09-16 13:35 ` [OSSTEST PATCH 27/27] crontab: Enable xen-unstable-smoke branch every 3h at <1mod3>:51 UTC Ian Jackson
2015-09-16 14:34   ` Ian Campbell
2015-09-16 14:37   ` Ian Campbell
2015-09-16 15:29 ` [OSSTEST PATCH 00/27] xen.git#staging smoke tests Ian Campbell
2015-09-16 15:46   ` Ian Jackson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1442410530-9665-8-git-send-email-ian.jackson@eu.citrix.com \
    --to=ian.jackson@eu.citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).