###############################################################################
#
# pkgr_upload.eagle --
#
# Extensible Adaptable Generalized Logic Engine (Eagle)
# Package Repository Client (Upload Tool)
#
# Copyright (c) 2007-2012 by Joe Mistachkin. All rights reserved.
#
# See the file "license.terms" for information on usage and redistribution of
# this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: $
#
###############################################################################
#
# NOTE: Use our own namespace here because even though we do not directly
# support namespaces ourselves, we do not want to pollute the global
# namespace if this script actually ends up being evaluated in Tcl.
#
namespace eval ::PackageUploader {
#
# NOTE: This procedure is used to report errors that prevent this tool
# from running to completion (e.g. invalid command line arguments,
# etc). It may be used to report a specific error. It will always
# emit the command line usage information.
#
proc usage { {error ""} } {
if {[string length $error] > 0} then {puts stdout $error}
puts stdout "usage:\
[file tail [info nameofexecutable]]\
[file tail [info script]] \[serverId\] \[apiKey\] \[package\] \[patchLevel\]\
\[language\] \[version\] \[platform\] \[fileName1\] ... \[fileNameN\]"
exit 1
}
#
# NOTE: Figure out the fully qualified path to the current script file.
# If necessary, add it to the auto-path for the interpreter. The
# necessary supporting packages (i.e. the Package Repository and
# other support packages) that are assumed to exist in the same
# directory as the current script file.
#
namespace eval ::PackageUploader {
variable pkgr_path; # DEFAULT: <unset>
if {![info exists pkgr_path]} then {
set pkgr_path [file normalize [file dirname [info script]]]
if {![info exists ::auto_path] || \
[lsearch -exact $::auto_path $pkgr_path] == -1} then {
lappend ::auto_path $pkgr_path
}
}
}
#
# NOTE: *TODO* Pre-create the namespace for the Package Repository Client
# package and then forcibly adjust various settings to the values
# necessary for this tool. In the future, this section may need to
# be tweaked to account for changes to the Package Repository Client
# package.
#
namespace eval ::PackageRepository {
variable verboseUriDownload true
variable autoRequireGaruda false
variable autoLoadTcl false
variable autoHook false
}
#
# NOTE: This package requires both the package uploader client package.
#
package require Eagle.Package.Uploader
#
# NOTE: Make sure this tool is being run from within the package client
# checkout directory.
#
::PackageUploader::verifyCheckoutDirectory
#
# NOTE: Process the command line arguments into their corresponding data
# values, which are contained in an array.
#
::PackageUploader::setupArgumentData \
[expr {[info exists ::argv] ? $::argv : [list]}]
#
# NOTE: Verify that the number of command line arguments meets the basic
# requirements of this tool.
#
if {[::PackageUploader::haveArgumentData]} then {
#
# NOTE: All necessary arguments were supplied on the command line, use
# batch mode.
#
if {[isEagle]} then {
::PackageUploader::submitEventHandler true null null
} else {
::PackageUploader::submitEventHandler true
}
} else {
#
# NOTE: One or more of the necessary arguments were not supplied on the
# command line, use interactive mode. This will create a graphical
# user interface, using Tk or WinForms. If any of the necessary
# arguments were supplied on the command line, they will be used to
# populate those fields on the graphical user interface.
#
variable guiError
if {[isEagle]} then {
if {[catch {
::PackageUploader::setupWinFormsUserInterface
} guiError]} then {
usage $guiError
}
} else {
if {[catch {
::PackageUploader::setupTkUserInterface
} guiError]} then {
usage $guiError
}
}
vwait ::PackageUploader::forever
}
}