open Unix
open Printf
+open Goaljobs_config
+
+let (//) = Filename.concat
+let quote = Filename.quote
+
type goal_result_t = Goal_OK | Goal_failed of string
exception Goal_result of goal_result_t
) objs
)
-let url_exists url = goal_failed "url_exists not implemented!"
+let url_exists url =
+ (* http://stackoverflow.com/questions/12199059/how-to-check-if-an-url-exists-with-the-shell-and-probably-curl *)
+ let cmd =
+ sprintf "curl --output /dev/null --silent --head --fail %s" (quote url) in
+ match Sys.command cmd with
+ | 0 -> true
+ | 1 -> false
+ | r ->
+ let msg = sprintf "curl error testing '%s' (exit code %d)" url r in
+ goal_failed msg
+
+let file_contains_string filename str =
+ let cmd = sprintf "grep -q %s %s" (quote str) (quote filename) in
+ match Sys.command cmd with
+ | 0 -> true
+ | 1 -> false
+ | r ->
+ let msg = sprintf "grep error testing for '%s' in '%s' (exit code %d)"
+ str filename r in
+ goal_failed msg
+
+let url_contains_string url str =
+ let tmp = Filename.temp_file "goaljobsurl" "" in
+ let cmd =
+ sprintf "curl --output %s --silent --fail %s" (quote tmp) (quote url) in
+ (match Sys.command cmd with
+ | 0 -> ()
+ | 1 ->
+ let msg = sprintf "curl failed to download URL '%s'" url in
+ goal_failed msg
+ | r ->
+ let msg = sprintf "curl error testing '%s' (exit code %d)" url r in
+ goal_failed msg
+ );
+ let r = file_contains_string tmp str in
+ unlink tmp;
+ r
+
let sh fs =
let do_sh cmd =
let msg = sprintf "url_exists: URL '%s' required but does not exist" url in
goal_failed msg
)
+let goal_file_contains_string filename str =
+ if not (file_contains_string filename str) then (
+ let msg = sprintf "file_contains_string: file '%s' is required to contain string '%s'" filename str in
+ goal_failed msg
+ )
+let goal_url_contains_string url str =
+ if not (url_contains_string url str) then (
+ let msg = sprintf "url_contains_string: URL '%s' is required to contain string '%s'" url str in
+ goal_failed msg
+ )
let goal_memory_exists k =
if not (memory_exists k) then (
let msg = sprintf "memory_exists: key '%s' required but does not exist" k in
let args = ref [] in
let display_version () =
- printf "%s %s\n" Config.package_name Config.package_version;
+ printf "%s %s\n" package_name package_version;
exit 0
in