From owner-svn-soc-all@FreeBSD.ORG Wed Jun 26 04:35:42 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 461FC82B for ; Wed, 26 Jun 2013 04:35:42 +0000 (UTC) (envelope-from jmuniz@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id 37D381CD8 for ; Wed, 26 Jun 2013 04:35:42 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5Q4Zg4o007437 for ; Wed, 26 Jun 2013 04:35:42 GMT (envelope-from jmuniz@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r5Q4ZgbX007435 for svn-soc-all@FreeBSD.org; Wed, 26 Jun 2013 04:35:42 GMT (envelope-from jmuniz@FreeBSD.org) Date: Wed, 26 Jun 2013 04:35:42 GMT Message-Id: <201306260435.r5Q4ZgbX007435@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to jmuniz@FreeBSD.org using -f From: jmuniz@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r253519 - soc2013/jmuniz/PackageKit-Setter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Jun 2013 04:35:42 -0000 Author: jmuniz Date: Wed Jun 26 04:35:41 2013 New Revision: 253519 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253519 Log: created initial pk-setter script Added: soc2013/jmuniz/PackageKit-Setter/pk-setter Added: soc2013/jmuniz/PackageKit-Setter/pk-setter ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2013/jmuniz/PackageKit-Setter/pk-setter Wed Jun 26 04:35:41 2013 (r253519) @@ -0,0 +1,135 @@ +#!/bin/sh +# +# Copyright (C) 2013 Justin Edward Muniz +# +# Licensed under the GNU General Public License Version 2 +# This program 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. +# +# Script to list and select from possible PackageKit backends + +# There are three argugments that can be provided to this script: +# Instruction: mandatory; can be either 'list' or 'set' +# Backend Name: mandatory for 'set'; a string that identifies for the set instruction +# Prefix: optional; if included, must be a valid prefix path to the PackageKit installation + +# ENTRY POINT OF SCRIPT +# Make sure there is an appropriate number of arguements +if [ $# -eq 1 -o $# -eq 2 -o $# -eq 3 ]; then + # Determine if there is a user provided prefix and save it for later + setPrefix + # Determine if the user wants a list of backends, if so print it + listBackends + # Determine if the user wants a backend change, and process it + setBackend +fi +# Let the user know how to use this script +printUsage +# Return to the shell with failure +exit 1 +# EXIT POINT OF SCRIPT + +# This function presents the user with a list of available backednds +listBackends(){ + # Make sure that the user has requested a list of the available backends + if [ "$1" == "list" ]; then + # Create a string with each line representing the name of one backend + generateBackendList + # Print a header to describe the data to follow + echo "Available PackageKit backends:" + # Print the list of backends + echo "${PK_BACKENDS}" + # Return to the shell with success + exit 0 + fi +# End listBackends +} + +# This function uses the prefix and backend name to configure PackageKit to use the chosen backend +setBackend(){ + # Make sure that the user wants to select the backend + if [ "$1" == "set" ]; then + # Determine if the prefix contains the neccessary configuration file + if [ ! -e "${PK_PREFIX}etc/PackageKit/PackageKit.conf" ]; then + # Let the user know that the path does not lead to the configuration file + echo "Error: could not find PackageKit.conf, check prefix" + # Return to the shell with failure + exit 1 + fi + # Run the algorithm to create a new-line delimited list of available backends + generateBackendList + # Test the backend value provided against the list of valid backend names + if [ ${PK_BACKENDS} != *$2* ]; then + # Let the user know that they made a mistake + echo "The backend provided was not found, please check your entry" + # Give advice to the user since they made a mistake, then return to the shell with failure + printUsage + fi + # Find the first instance of "DefaultBackend" and replace the line to reflect the new backend + sed -i 's/DefaultBackend=.*/DefaultBackend='$2 + # Let the user know that the changes were successful + echo "PackageKit is now using the $2 backend" + # Return to the shell with success + exit 0 + fi +# End setBackend +} + +# This function determines which argument is the prefix, if any, and sets the value of PK_PREFIX for later +setPrefix(){ + # Set PK_PREFIX to default (root) prefix + ${PK_PREFIX}="/" + # Determine if there are three arguements + if [ $# -eq 3 ]; then + # Set PK_PREFIX for later + ${PK_PREFIX}="$3" + # If there were two arguements given + elif [ $# -eq 2 ]; then + # There must be a prefix if the "list" instruction is given + if [ "$1" == "list" ]; then + # Set PK_PREFIX to the third argument for later + ${PK_PREFIX}="$2" + fi + fi + # Find out if the path given does not end with a slash + if [ ${PK_PREFIX} != */ ]; then + # Then add a slash to the end to make a proper prefix + ${PK_PREFIX} .= "${PK_PREFIX}/" + fi + # Determine if the provided prefix even exists and if it refers to a directory + if [ ! -e "${PK_PREFIX}" -o ! -d "${PK_PREFIX}" ]; then + # Inform the user that the prefix provided does not refer to an existing directory + echo "Error: $2 is not a valid directory." + # Return to shell with failure + exit 1 + fi +# End setPrefix +} + +# This function explains to the user how to use this script, then exits +printUsage(){ + # Print the instructions to the user in a easily readable way + echo "pk-setter is used to select the PackageKit backend" + echo "usage: pk-setter list [prefix]" + echo " pk-setter set [backend] [prefix]" + echo "note: prefix is optional and defaults to the root directory" + echo " and refers to the intallation prefix of PackageKit" + # Returns to the shell with failure + exit 1 +# End printUsage +} + +# Create a list consisting of backend options, each on their own line +generateBackendList(){ + # Until a better way is figured out, a hardcoded set of options for backend selection are stored in PK_BACKENDS + ${PK_BACKENDS}="ports"$'\n'"pkgng"$'\n'"dummy (for debugging)" +# End generateBackendList +} + +# TODO for listBackends: might need exception handling for if list cannot be generated +# TODO: test validation and error handling in general +# TODO: check spelling +# TODO for generateBackendList: generate the list without hardcoding it +# TODO for setBackend: stop and start PackageKitd to load in the new backend \ No newline at end of file