NYAOSをアップデートするスクリプトを作った

最新版がNYAOSの更新をするコマンドを修正しました - メモ:wantoraにあります。
最新版がNYAOSをアップデートするスクリプト(NYAOS 3.1.4_0版) - メモ:wantoraにあります。

NYAOS 3.1.3_0のリリース記念(?)にアップデートを自動化するスクリプトを作りました。

今回、NYAOSのバージョンがluaから取得できないので、マニュアルから取得するというあまりスマートでない方法を使っています。NYAOSのパスとバージョンを取得する機能があるといいのですが。

新機能の $Wn は同じ名前のディレクトリがある時に便利ですね。

つかいかた

  1. まず、 nyaos_path をNYAOSが置いてあるパスに書き換えます。
  2. NYAOSで update_nyaos とタイプすると、最新版を確認後新しいバージョンであれば更新します。注意! _nyaファイルも上書きされます。
  3. 実行には wgetunzip が必要なので、無い場合はダウンロードしてPATHを通して下さい。
-- MIT License (http://d.hatena.ne.jp/wantora/20101212/1292141801)

local nyaos_path = [[ここにNYAOSのパスを入力]]
local nyaos_version
do
	local f = io.open(nyaos_path .. "\\nyaos_en.txt")
	local version = nil
	for line in f:lines() do
		if line == "History" then break end
	end
	for line in f:lines() do
		version = line:match("^([%d._]+) ")
		if version then break end
	end
	f:close()
	nyaos_version = version
end


local function wget(url, output)
	return nyaos.eval('wget -nc --user-agent="" -O "'..output..'" "'..url..'" 2>&-')
end

local function confirm(message, chars)
	local key
	
	io.write(message)
	repeat key = nyaos.getkey() until chars:find(key) ~= nil
	io.write(key.."\n")
	return key
end

local function update_nyaos(url, zippath)
	wget(url, zippath)
	nyaos.goodbye.update_nyaos = function()
		nyaos.exec([[%COMSPEC% /c start %COMSPEC% /c "ping localhost -n 2 > nul && unzip -fo "]]..zippath..[[" -d "]]..nyaos_path..[[" && pause"]])
	end
	print("NYAOS終了時に更新します")
end

function nyaos.command.update_nyaos()
	local html = wget("http://www.nyaos.org/index.cgi?p=NYAOS+3000", "-")
	local url, name, version = html:match(
		'<a href="(/index%.cgi%?p=NYAOS%+3000;f=(nyaos%-(.-)%-win.zip))"')
	
	if html == "" or url == nil then
		print("update_nyaos: ページの取得に失敗しました")
		return
	end
	
	if version:gsub("[._]", "") > nyaos_version:gsub("[._]", "") then
		if confirm(nyaos_version.." から "..version.." に更新しますか?(y/n)", "yn") == "y" then
			update_nyaos("http://www.nyaos.org"..url, nyaos_path.."\\"..name)
		end
		return
	end
	
	print("NYAOSは最新版です")
end