SMOLNET PORTAL home about changes
iRename into dossier - dossier - console collection manager	Err	bitreich.org	70
1Log	/scm/dossier/log.gph	bitreich.org	70
1Files	/scm/dossier/files.gph	bitreich.org	70
1Refs	/scm/dossier/refs.gph	bitreich.org	70
1Tags	/scm/dossier/tag	bitreich.org	70
1README	/scm/dossier/file/README.gph	bitreich.org	70
1LICENSE	/scm/dossier/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit a1a5058a5a89c4d2b50fbf778d7a12979b097359	/scm/dossier/commit/a1a5058a5a89c4d2b50fbf778d7a12979b097359.gph	bitreich.org	70
1parent e3c84c638f14e965a28fc7c610261d37036ed184	/scm/dossier/commit/e3c84c638f14e965a28fc7c610261d37036ed184.gph	bitreich.org	70
hAuthor: Solene Rapenne <solene@perso.pw>	URL:mailto:solene@perso.pw	bitreich.org	70
iDate:   Tue, 24 Jul 2018 10:31:00 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iRename into dossier	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       4 ++--	Err	bitreich.org	70
i  M README                              |      38 ++++++++++++++++----------------	Err	bitreich.org	70
i  D cdb                                 |     277 -------------------------------	Err	bitreich.org	70
i  D cdb.1                               |     124 -------------------------------	Err	bitreich.org	70
i  D cdb_sqlite                          |     142 -------------------------------	Err	bitreich.org	70
i  A dossier                             |     277 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  A dossier.1                           |     124 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i7 files changed, 422 insertions(+), 564 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/dossier/file/Makefile.gph	bitreich.org	70
i@@ -1,10 +1,10 @@	Err	bitreich.org	70
i-# cdb – a console collection manage	Err	bitreich.org	70
i+# dossier – a console collection manage	Err	bitreich.org	70
i # See the LICENSE file for copyright and license details.	Err	bitreich.org	70
i .POSIX:	Err	bitreich.org	70
i 	Err	bitreich.org	70
i VERSION = 0.1	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-BIN    = cdb	Err	bitreich.org	70
i+BIN    = dossier	Err	bitreich.org	70
i PREFIX = /usr	Err	bitreich.org	70
i BINDIR = ${PREFIX}/bin	Err	bitreich.org	70
i MANDIR = ${PREFIX}/share/man	Err	bitreich.org	70
1diff --git a/README b/README	/scm/dossier/file/README.gph	bitreich.org	70
i@@ -1,41 +1,41 @@	Err	bitreich.org	70
i-How to use cdb	Err	bitreich.org	70
i-==============	Err	bitreich.org	70
i+How to use dossier	Err	bitreich.org	70
i+==================	Err	bitreich.org	70
i 	Err	bitreich.org	70
i     $ mkdir -p ~/collections/games	Err	bitreich.org	70
i-    $ cdb collections register ~/collections/games games	Err	bitreich.org	70
i-    $ cdb collections games	Err	bitreich.org	70
i-    $ cdb collections	Err	bitreich.org	70
i+    $ dossier collections register ~/collections/games games	Err	bitreich.org	70
i+    $ dossier collections games	Err	bitreich.org	70
i+    $ dossier collections	Err	bitreich.org	70
i     games *	Err	bitreich.org	70
i-    $ cdb supertux rate 5 multiplayer yes	Err	bitreich.org	70
i-    $ cdb nexuiz rate 9 mutpliplayer yes	Err	bitreich.org	70
i-    $ cdb minetest rate 10 multiplayer yes	Err	bitreich.org	70
i-    $ cdb opensonic rate 2	Err	bitreich.org	70
i-    $ cdb openmw multiplayer no rate 10 style rpg	Err	bitreich.org	70
i-    $ cdb search multiplayer	Err	bitreich.org	70
i+    $ dossier supertux rate 5 multiplayer yes	Err	bitreich.org	70
i+    $ dossier nexuiz rate 9 mutpliplayer yes	Err	bitreich.org	70
i+    $ dossier minetest rate 10 multiplayer yes	Err	bitreich.org	70
i+    $ dossier opensonic rate 2	Err	bitreich.org	70
i+    $ dossier openmw multiplayer no rate 10 style rpg	Err	bitreich.org	70
i+    $ dossier search multiplayer	Err	bitreich.org	70
i     supertux:yes	Err	bitreich.org	70
i     nexuiz:yes	Err	bitreich.org	70
i     minetest:yes	Err	bitreich.org	70
i     openmw:no	Err	bitreich.org	70
i-    $ cdb search multiplayer no	Err	bitreich.org	70
i+    $ dossier search multiplayer no	Err	bitreich.org	70
i     openmw	Err	bitreich.org	70
i-    $ cdb search multiplayer yes rate 5	Err	bitreich.org	70
i+    $ dossier search multiplayer yes rate 5	Err	bitreich.org	70
i     supertux	Err	bitreich.org	70
i-    $ cdb supertux rate 6	Err	bitreich.org	70
i-    $ cdb show	Err	bitreich.org	70
i+    $ dossier supertux rate 6	Err	bitreich.org	70
i+    $ dossier show	Err	bitreich.org	70
i     supertux (2)	Err	bitreich.org	70
i     nexuiz (2)	Err	bitreich.org	70
i     minetest (2)	Err	bitreich.org	70
i     openmw (3)	Err	bitreich.org	70
i     opensonic (1)	Err	bitreich.org	70
i-    $ cdb show openmw	Err	bitreich.org	70
i+    $ dossier show openmw	Err	bitreich.org	70
i     openmw:	Err	bitreich.org	70
i             multiplayer: no	Err	bitreich.org	70
i             style: rpg	Err	bitreich.org	70
i             rate: 10	Err	bitreich.org	70
i-    $ cdb opensonic	Err	bitreich.org	70
i+    $ dossier opensonic	Err	bitreich.org	70
i     opensonic:	Err	bitreich.org	70
i         rate: 2	Err	bitreich.org	70
i-    $ cdb opensonic rate 3	Err	bitreich.org	70
i-    $ cdb opensonic	Err	bitreich.org	70
i+    $ dossier opensonic rate 3	Err	bitreich.org	70
i+    $ dossier opensonic	Err	bitreich.org	70
i     opensonic:	Err	bitreich.org	70
i         rate: 3	Err	bitreich.org	70
1diff --git a/cdb b/cdb	/scm/dossier/file/cdb.gph	bitreich.org	70
i@@ -1,277 +0,0 @@	Err	bitreich.org	70
i-#!/bin/sh	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-REPOSITORY="${HOME}/.collections"	Err	bitreich.org	70
i-mkdir -p "$REPOSITORY"	Err	bitreich.org	70
i-test -f "${REPOSITORY}/current" && . "${REPOSITORY}/current"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ -n "$CONTEXT" ]	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-        REPO="${REPOSITORY}/${CONTEXT}/"	Err	bitreich.org	70
i-        cd "$REPO"	Err	bitreich.org	70
i-        test ! -d ".git" && git init	Err	bitreich.org	70
i-else	Err	bitreich.org	70
i-        printf 'No current collection in use\n'	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays the values of an identifier	Err	bitreich.org	70
i-# $1 identifier	Err	bitreich.org	70
i-show() {	Err	bitreich.org	70
i-    cd "${REPO}"	Err	bitreich.org	70
i-    SEEN=0	Err	bitreich.org	70
i-    for attribute in *	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        if [ -f "${attribute}/${1}" ]	Err	bitreich.org	70
i-        then	Err	bitreich.org	70
i-            if [ "$SEEN" -eq 0 ]	Err	bitreich.org	70
i-            then	Err	bitreich.org	70
i-                printf "%s:\n" "$1"	Err	bitreich.org	70
i-                SEEN=1	Err	bitreich.org	70
i-            fi	Err	bitreich.org	70
i-                printf "%15s: %s\n" ${attribute} "$(cat "${attribute}/${1}")"	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-    if [ "$SEEN" -eq 1 ]	Err	bitreich.org	70
i-    then	Err	bitreich.org	70
i-        exit 0	Err	bitreich.org	70
i-    else	Err	bitreich.org	70
i-        printf '%s is not in the library.\n' "$1"	Err	bitreich.org	70
i-        exit 1	Err	bitreich.org	70
i-    fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# export the data in csv format "data","data","data"	Err	bitreich.org	70
i-# we assume it'll works with the dataset	Err	bitreich.org	70
i-export_csv() {	Err	bitreich.org	70
i-    cd "${REPO}"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    # display header	Err	bitreich.org	70
i-    printf '"identifier",'	Err	bitreich.org	70
i-    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq | while read attr	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        printf '"%s",' $attr	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-    printf '\n'	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    # print database	Err	bitreich.org	70
i-    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 3 | sort | uniq | while read id	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        printf '"%s",' "$id"	Err	bitreich.org	70
i-        find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq | while read attr	Err	bitreich.org	70
i-        do	Err	bitreich.org	70
i-            # for faster processing, we do not check existence of file before	Err	bitreich.org	70
i-            awk '{ printf "\"%s\",",$0}' "${attr}/${id}" 2>/dev/null  \	Err	bitreich.org	70
i-                || printf '"",'	Err	bitreich.org	70
i-        done	Err	bitreich.org	70
i-        printf '\n'	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-    IFS=$OLDIFS	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# delete identifier from attributes	Err	bitreich.org	70
i-# $1 identifier	Err	bitreich.org	70
i-delete() {	Err	bitreich.org	70
i-    cd "${REPO}"	Err	bitreich.org	70
i-    SEEN=0	Err	bitreich.org	70
i-    for attribute in *	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        if [ -f "${attribute}/${1}" ]	Err	bitreich.org	70
i-        then	Err	bitreich.org	70
i-            git rm "${attribute}/${1}"	Err	bitreich.org	70
i-            git commit -m "Delete ${attribute} ${1}" "${attribute}/${1}"	Err	bitreich.org	70
i-            rmdir "${attribute}" 2> /dev/null	Err	bitreich.org	70
i-            SEEN=1	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    # did we find it?	Err	bitreich.org	70
i-    if [ "$SEEN" -eq 0 ]	Err	bitreich.org	70
i-    then	Err	bitreich.org	70
i-        printf "%s is not in the library!\n" "$1"	Err	bitreich.org	70
i-        exit 1	Err	bitreich.org	70
i-    else	Err	bitreich.org	70
i-        exit 0	Err	bitreich.org	70
i-    fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays list of identifiers	Err	bitreich.org	70
i-show_list() {	Err	bitreich.org	70
i-    cd "${REPO}"	Err	bitreich.org	70
i-    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 3 | sort | uniq -c | \	Err	bitreich.org	70
i-        awk '{ for(i=2;i<=NF;i=i+1) { printf "%s ", $i }	Err	bitreich.org	70
i-               printf "(%i)\n", $1	Err	bitreich.org	70
i-        }'	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays attributes used	Err	bitreich.org	70
i-show_attributes() {	Err	bitreich.org	70
i-    cd "${REPO}"	Err	bitreich.org	70
i-    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq -c | \	Err	bitreich.org	70
i-        awk '{ for(i=2;i<=NF;i=i+1) { printf "%s ", $i }	Err	bitreich.org	70
i-                   printf "(%i)\n", $1	Err	bitreich.org	70
i-        }'	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# add/modify a value	Err	bitreich.org	70
i-# $@ identifier / attr / value / attr / value / ....	Err	bitreich.org	70
i-# shift to have attr / value again and again	Err	bitreich.org	70
i-add_value() {	Err	bitreich.org	70
i-    cd "$REPO"	Err	bitreich.org	70
i-    ID="$1"	Err	bitreich.org	70
i-    shift	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    while [ "$#" -gt 1 ]	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        ATTRIBUTE="$1"	Err	bitreich.org	70
i-        VALUE="$2"	Err	bitreich.org	70
i-        shift 2	Err	bitreich.org	70
i-        	Err	bitreich.org	70
i-        mkdir -p "$ATTRIBUTE"	Err	bitreich.org	70
i-        printf '%s' "$VALUE" > "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i-        git add "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i-        git commit -m "Modify ${ATTRIBUTE} on ${ID}" "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# returns identifiers having attribute=value	Err	bitreich.org	70
i-# $1 attribute	Err	bitreich.org	70
i-# $2 value	Err	bitreich.org	70
i-search_value() {	Err	bitreich.org	70
i-    cd "$REPO"	Err	bitreich.org	70
i-    shift	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    RESULT=$(mktemp /tmp/cdb.XXXXXXXXXXXX)	Err	bitreich.org	70
i-    COUNT=0	Err	bitreich.org	70
i-    if [ -f "$RESULT" ]	Err	bitreich.org	70
i-    then	Err	bitreich.org	70
i-            while [ "$#" -gt 1 ]	Err	bitreich.org	70
i-            do	Err	bitreich.org	70
i-                ATTRIBUTE="$1"	Err	bitreich.org	70
i-                VALUE="$2"	Err	bitreich.org	70
i-                shift 2	Err	bitreich.org	70
i-                if [ ! -d "$ATTRIBUTE" ]	Err	bitreich.org	70
i-                then	Err	bitreich.org	70
i-                        printf 'The attribute %s do not exists\n' "${ATTRIBUTE}"	Err	bitreich.org	70
i-                        exit 5	Err	bitreich.org	70
i-                fi	Err	bitreich.org	70
i-                grep -rl "$VALUE" "$ATTRIBUTE" | cut -d '/' -f 2 >> "$RESULT"	Err	bitreich.org	70
i-                COUNT=$(( COUNT + 1 ))	Err	bitreich.org	70
i-            done	Err	bitreich.org	70
i-            sort "$RESULT" | uniq -c | \	Err	bitreich.org	70
i-                    awk -v count=$COUNT \	Err	bitreich.org	70
i-                    '{ if($1==count) {	Err	bitreich.org	70
i-                        $1=""               # remove uniq result	Err	bitreich.org	70
i-                        gsub(/^[ ]+/,"",$0) # remove leading space due to uniq	Err	bitreich.org	70
i-                        print	Err	bitreich.org	70
i-                    }}'	Err	bitreich.org	70
i-    else	Err	bitreich.org	70
i-            printf 'Cannot create a temporary file in /tmp\n'	Err	bitreich.org	70
i-            exit 6	Err	bitreich.org	70
i-    fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# returns list of identifiers in a attribute	Err	bitreich.org	70
i-# $1 attribute	Err	bitreich.org	70
i-list() {	Err	bitreich.org	70
i-    cd "$REPO"	Err	bitreich.org	70
i-    grep -r . "$1" | cut -d '/' -f 2- | sort	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays usage	Err	bitreich.org	70
i-usage() {	Err	bitreich.org	70
i-    printf '%s\n' \	Err	bitreich.org	70
i-           "Get help" \	Err	bitreich.org	70
i-           ": cdb help" \	Err	bitreich.org	70
i-           "" \	Err	bitreich.org	70
i-           "Export data as CSV" \	Err	bitreich.org	70
i-           ": cdb export" \	Err	bitreich.org	70
i-           "" \	Err	bitreich.org	70
i-           "Show collections, register collections, switch current collection" \	Err	bitreich.org	70
i-           ": cdb collections [register path name] [name]" \	Err	bitreich.org	70
i-           "" \	Err	bitreich.org	70
i-           "Show items and display informations about an item" \	Err	bitreich.org	70
i-           ": cdb show [identifier]" \	Err	bitreich.org	70
i-           "" \	Err	bitreich.org	70
i-           "Look at attributes, search items having some values" \	Err	bitreich.org	70
i-           ": cdb search [attribute [value]] ... [attribute [value]] ..." \	Err	bitreich.org	70
i-           "" \	Err	bitreich.org	70
i-           "Add / Modify attributes values on an item" \	Err	bitreich.org	70
i-           ": cdb identifier attribute value ... attribute value ..."	Err	bitreich.org	70
i-    exit 0   	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-switch() {	Err	bitreich.org	70
i-        if [ ! -L "${REPOSITORY}/${1}" ]	Err	bitreich.org	70
i-        then	Err	bitreich.org	70
i-                printf 'Collection %s is not registered\n' "${1}"	Err	bitreich.org	70
i-                exit 9	Err	bitreich.org	70
i-        else	Err	bitreich.org	70
i-                printf 'Switching to collection %s\n' "${1}"	Err	bitreich.org	70
i-                printf 'CONTEXT=%s\n' $1 > "${REPOSITORY}/current"	Err	bitreich.org	70
i-                exit $?	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-collections() {	Err	bitreich.org	70
i-        ls "${REPOSITORY}" | grep -v 'current' | sed "s/^${CONTEXT}$/& */"	Err	bitreich.org	70
i-        exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# create symlink to register a collection	Err	bitreich.org	70
i-# $1 absolute path to collection	Err	bitreich.org	70
i-# $2 name of collection	Err	bitreich.org	70
i-register() {	Err	bitreich.org	70
i-        set -x	Err	bitreich.org	70
i-        if [ -d "${1}" ]	Err	bitreich.org	70
i-        then	Err	bitreich.org	70
i-                if ! expr "${1}" : '^/'	Err	bitreich.org	70
i-                then	Err	bitreich.org	70
i-                        printf 'Aborting, the path of the collection must be an absolute path. %s is not valid\n' "${1}"	Err	bitreich.org	70
i-                fi	Err	bitreich.org	70
i-                test -L "${REPOSITORY}/${2}" && rm "${REPOSITORY}/${2}"	Err	bitreich.org	70
i-                ln -s "${1}" "${REPOSITORY}/${2}"	Err	bitreich.org	70
i-                exit 0	Err	bitreich.org	70
i-        else	Err	bitreich.org	70
i-                printf 'Aborting, %s is not a directory\n' "${2}"	Err	bitreich.org	70
i-                exit 8	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ "$1" = "export" ] ; then export_csv ; fi	Err	bitreich.org	70
i-if [ "$1" = "rm" ] && [ "$#" -eq 2 ] ; then delete "$2" ; fi	Err	bitreich.org	70
i-if [ "$1" = "help" ]                 ; then usage ; fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# dealing with identifiers	Err	bitreich.org	70
i-if [ "$1" = "show" ]	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-    if [ "$#" -eq 1 ]; then show_list ; fi	Err	bitreich.org	70
i-    if [ "$#" -eq 2 ]; then show "$2" ; fi	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# dealing with attributes	Err	bitreich.org	70
i-if [ "$1" = "search" ];	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-    if [ "$#" -eq 1 ]; then show_attributes        ; fi	Err	bitreich.org	70
i-    if [ "$#" -eq 2 ]; then list "$2"              ; fi	Err	bitreich.org	70
i-    if [ "$#" -ge 3 ]; then search_value "$@" ; fi	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ "$1" = "collections" ]; then	Err	bitreich.org	70
i-        if [ "$#" -eq 1 ]; then collections ; fi	Err	bitreich.org	70
i-        if [ "$#" -eq 2 ]; then switch "$2" ; fi	Err	bitreich.org	70
i-        if [ "$2" = "register" ] && [ "$#" -eq 4 ]; then register "$3" "$4" ; fi	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ "$#" -ge 3 ]; then add_value "$@" ; fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# no command, maybe it's an item, try it	Err	bitreich.org	70
i-if [ "$#" -eq 1 ]; then show "$1" ; fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-usage	Err	bitreich.org	70
1diff --git a/cdb.1 b/cdb.1	/scm/dossier/file/cdb.1.gph	bitreich.org	70
i@@ -1,124 +0,0 @@	Err	bitreich.org	70
i-.Dd $Mdocdate: July 18 2018 $	Err	bitreich.org	70
i-.Dt CDB 1	Err	bitreich.org	70
i-.Os	Err	bitreich.org	70
i-.Sh NAAME	Err	bitreich.org	70
i-.Nm cdb	Err	bitreich.org	70
i-.Nd a console collection manager	Err	bitreich.org	70
i-.Sh SYNOPSIS	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-.Op Cm show | Cm help | Cm export | Cm collections | Cm search | Ar item Op attribute value	Err	bitreich.org	70
i-.Sh DESCRIPTION	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-is a tool to register "items" into collections with metadata. Allowing to	Err	bitreich.org	70
i-keep tracks of collections like wine, tea, video games, movie, music etc...	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-Collections are a set of items, attributes and values.	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-allows to manage different collections to not mix everything.	Err	bitreich.org	70
i-.Bl -tag -width Ds	Err	bitreich.org	70
i-.It Nm Cm help	Err	bitreich.org	70
i-Show help	Err	bitreich.org	70
i-.It Nm Cm show Op item-name	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Cm show	Err	bitreich.org	70
i-without argument will display the list of items in the current collection.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-With the argument	Err	bitreich.org	70
i-.Ar item-name	Err	bitreich.org	70
i-it will show all the attributes known for that item.	Err	bitreich.org	70
i-.It Nm Cm export	Err	bitreich.org	70
i-Export the data of the current collection as CSV (Comma Separated Values).	Err	bitreich.org	70
i-.It Nm Cm collections Oo collection Oc | Oo register Pa full-path Ar collection-name Oc 	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Cm collections	Err	bitreich.org	70
i-with no argument will show the list of collections that	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-is aware of aka the collections that have been registered. The collection currently in use	Err	bitreich.org	70
i-will be displayed with a	Err	bitreich.org	70
i-.Sy *	Err	bitreich.org	70
i-symbol after the name.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Cm collections	Err	bitreich.org	70
i-with one parameter	Err	bitreich.org	70
i-will switch the current collection in use to the collection	Err	bitreich.org	70
i-.Ar collection.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Cm collections	Err	bitreich.org	70
i-using the parameter	Err	bitreich.org	70
i-.Ar register	Err	bitreich.org	70
i-will make	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-aware of a collection, this requires the full path	Err	bitreich.org	70
i-.Ar full-path	Err	bitreich.org	70
i-where is stored the collection and a name	Err	bitreich.org	70
i-.Ar collection-name	Err	bitreich.org	70
i-to identify it. When a collection is registered,	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-will initialize a	Err	bitreich.org	70
i-.Xr git 1	Err	bitreich.org	70
i-repository in it if possible.	Err	bitreich.org	70
i-.It Nm Cm search Oo attribute Oo value Oc Oc Op attribute value	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Cm search	Err	bitreich.org	70
i-with no argument will return the list of known attributes in the collections with the	Err	bitreich.org	70
i-number of items for which the attribute is set.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-the command	Err	bitreich.org	70
i-.Nm search	Err	bitreich.org	70
i-with one parameter will return the list of the items for which	Err	bitreich.org	70
i-.Ar attribute	Err	bitreich.org	70
i-has been recorded and the associated value, using a semi colon as separator.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-The command	Err	bitreich.org	70
i-.Nm search	Err	bitreich.org	70
i-with two parameters will return the list of the items having the value	Err	bitreich.org	70
i-.Ar value	Err	bitreich.org	70
i-in the attribute	Err	bitreich.org	70
i-.Ar attribute.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-Using more arguments will return the list of the items matching all the conditions of values in attributes.	Err	bitreich.org	70
i-.It Nm Ar item-name	Err	bitreich.org	70
i-shows all the attributes known for that item.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-In case you need to use an	Err	bitreich.org	70
i-.Ar item-name	Err	bitreich.org	70
i-like "collections" or any other name being a	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-command, the command	Err	bitreich.org	70
i-.Cm show Ar item-name	Err	bitreich.org	70
i-is required.	Err	bitreich.org	70
i-.It Nm Ar item-name Ar attribute Ar value Op Ar attribute2 Ar value2 Ar ...	Err	bitreich.org	70
i-Associate the value	Err	bitreich.org	70
i-.Ar value	Err	bitreich.org	70
i-to the attribute	Err	bitreich.org	70
i-.Ar attribute	Err	bitreich.org	70
i-for item	Err	bitreich.org	70
i-.Ar item-name.	Err	bitreich.org	70
i-Multiples couple of	Err	bitreich.org	70
i-.Ar attribute value	Err	bitreich.org	70
i-can be used on the same command line to define multiples values.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-This is the way to add and update data inside a collection.	Err	bitreich.org	70
i-.Pp	Err	bitreich.org	70
i-Every modification is recorded with	Err	bitreich.org	70
i-.Xr git 1 .	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-.Sh FILES	Err	bitreich.org	70
i-.Bl -tag -width "~/.collections" -compact	Err	bitreich.org	70
i-.It Pa ~/.collections	Err	bitreich.org	70
i-The directory where	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-stores the collections registered as symlinks to their full path.	Err	bitreich.org	70
i-.Sh EXIT 	Err	bitreich.org	70
i-.Ex -std cdb	Err	bitreich.org	70
i-.Sh SEE ALSO	Err	bitreich.org	70
i-.Xr git 1	Err	bitreich.org	70
i-.Sh Authors	Err	bitreich.org	70
i-.An -nosplit	Err	bitreich.org	70
i-The	Err	bitreich.org	70
i-.Nm	Err	bitreich.org	70
i-program was written by	Err	bitreich.org	70
i-.An Solène Rapenne Aq Mt solene@perso.pw	Err	bitreich.org	70
1diff --git a/cdb_sqlite b/cdb_sqlite	/scm/dossier/file/cdb_sqlite.gph	bitreich.org	70
i@@ -1,142 +0,0 @@	Err	bitreich.org	70
i-#!/bin/sh	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ ! -f "database.sqlite" ]	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-        printf 'CREATE TABLE collection ( id text primary key );' | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite || exit 1	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-#mkdir -p "${REPO}" || exit 1	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays the values of an identifier	Err	bitreich.org	70
i-# $1 identifier	Err	bitreich.org	70
i-show() {	Err	bitreich.org	70
i-    printf "SELECT * FROM collection WHERE id = '%s';" \	Err	bitreich.org	70
i-                "$1" | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite -line	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    if [ "$?" -eq 0 ]	Err	bitreich.org	70
i-    then	Err	bitreich.org	70
i-        exit 0	Err	bitreich.org	70
i-    else	Err	bitreich.org	70
i-        printf '%s is not in the library.\n' "$1"	Err	bitreich.org	70
i-        exit 1	Err	bitreich.org	70
i-    fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# export the data in csv format "data","data","data"	Err	bitreich.org	70
i-# we assume it'll works with the dataset	Err	bitreich.org	70
i-export_csv() {	Err	bitreich.org	70
i-    sqlite3 database.sqlite -header -csv 'select * from collection;'	Err	bitreich.org	70
i-    exit $?	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# delete identifier from attributes	Err	bitreich.org	70
i-# $1 identifier	Err	bitreich.org	70
i-delete() {	Err	bitreich.org	70
i-    printf "DELETE from collection where id = '%s';" "$1" | \	Err	bitreich.org	70
i-            sqlite3 database.sqlite	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    if [ "$?" -ne 0 ]	Err	bitreich.org	70
i-    then	Err	bitreich.org	70
i-        printf "%s is not in the library!\n" "$1"	Err	bitreich.org	70
i-        exit 1	Err	bitreich.org	70
i-    else	Err	bitreich.org	70
i-        exit 0	Err	bitreich.org	70
i-    fi	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays list of identifiers	Err	bitreich.org	70
i-show_list() {	Err	bitreich.org	70
i-    printf "SELECT id from collection;" | \	Err	bitreich.org	70
i-            sqlite3 database.sqlite	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays attributes used	Err	bitreich.org	70
i-show_attributes() {	Err	bitreich.org	70
i-    sqlite3 database.sqlite 'PRAGMA table_info(collection)' | \	Err	bitreich.org	70
i-                cut -d '|' -f 2	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# add/modify a value	Err	bitreich.org	70
i-# $@ identifier / attr / value / attr / value / ....	Err	bitreich.org	70
i-# shift to have attr / value again and again	Err	bitreich.org	70
i-add_value() {	Err	bitreich.org	70
i-    ID="$1"	Err	bitreich.org	70
i-    shift	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-    while [ "$#" -gt 1 ]	Err	bitreich.org	70
i-    do	Err	bitreich.org	70
i-        ATTRIBUTE="$1"	Err	bitreich.org	70
i-        VALUE="$2"	Err	bitreich.org	70
i-        shift 2	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        # add a column if it doesn't exist	Err	bitreich.org	70
i-        if [ -z "$(sqlite3 database.sqlite 'PRAGMA table_info(collection);' | grep "|${ATTRIBUTE}|")" ]	Err	bitreich.org	70
i-        then	Err	bitreich.org	70
i-                printf 'ALTER TABLE collection ADD COLUMN %s text;' "${ATTRIBUTE}" | \	Err	bitreich.org	70
i-                        sqlite3 database.sqlite	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-        printf "INSERT INTO collection('id') VALUES ('%s');" "$ID" | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite >/dev/null 2>&1	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        printf "UPDATE collection SET %s = '%s' WHERE id = '%s';" \	Err	bitreich.org	70
i-                "$ATTRIBUTE" "$VALUE" "$ID" | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite	Err	bitreich.org	70
i-    done	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# returns identifiers having attribute=value	Err	bitreich.org	70
i-# $1 attribute	Err	bitreich.org	70
i-# $2 value	Err	bitreich.org	70
i-search_value() {	Err	bitreich.org	70
i-    printf "SELECT id FROM collection WHERE %s = '%s';" \	Err	bitreich.org	70
i-                "$1" "$2" | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# returns list of identifiers in a attribute	Err	bitreich.org	70
i-# $1 attribute	Err	bitreich.org	70
i-list() {	Err	bitreich.org	70
i-    printf "SELECT id,%s as attribute FROM collection WHERE attribute <> '';" \	Err	bitreich.org	70
i-                "$1" | \	Err	bitreich.org	70
i-                sqlite3 database.sqlite	Err	bitreich.org	70
i-    exit 0	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# displays usage	Err	bitreich.org	70
i-usage() {	Err	bitreich.org	70
i-    printf '%s\n' \	Err	bitreich.org	70
i-           "cdb help" \	Err	bitreich.org	70
i-           "cdb export" \	Err	bitreich.org	70
i-           "cdb show [identifier]" \	Err	bitreich.org	70
i-           "cdb search [attribute [value]]" \	Err	bitreich.org	70
i-           "cdb identifier attribute value ... attribute value ..."	Err	bitreich.org	70
i-    exit 0   	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ "$1" = "export" ] ; then export_csv ; fi	Err	bitreich.org	70
i-if [ "$1" = "rm" ] && [ "$#" -eq 2 ] ; then delete "$2" ; fi	Err	bitreich.org	70
i-if [ "$1" = "help" ]                 ; then usage ; fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# dealing with identifiers	Err	bitreich.org	70
i-if [ "$1" = "show" ]	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-    if [ "$#" -eq 1 ]; then show_list ; fi	Err	bitreich.org	70
i-    if [ "$#" -eq 2 ]; then show "$2" ; fi	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-# dealing with attributes	Err	bitreich.org	70
i-if [ "$1" = "search" ];	Err	bitreich.org	70
i-then	Err	bitreich.org	70
i-    if [ "$#" -eq 1 ]; then show_attributes        ; fi	Err	bitreich.org	70
i-    if [ "$#" -eq 2 ]; then list "$2"              ; fi	Err	bitreich.org	70
i-    if [ "$#" -eq 3 ]; then search_value "$2" "$3" ; fi	Err	bitreich.org	70
i-fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ "$#" -ge 3 ]; then add_value "$@" ; fi	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-usage	Err	bitreich.org	70
1diff --git a/dossier b/dossier	/scm/dossier/file/dossier.gph	bitreich.org	70
i@@ -0,0 +1,277 @@	Err	bitreich.org	70
i+#!/bin/sh	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+REPOSITORY="${HOME}/.collections"	Err	bitreich.org	70
i+mkdir -p "$REPOSITORY"	Err	bitreich.org	70
i+test -f "${REPOSITORY}/current" && . "${REPOSITORY}/current"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+if [ -n "$CONTEXT" ]	Err	bitreich.org	70
i+then	Err	bitreich.org	70
i+        REPO="${REPOSITORY}/${CONTEXT}/"	Err	bitreich.org	70
i+        cd "$REPO"	Err	bitreich.org	70
i+        test ! -d ".git" && git init	Err	bitreich.org	70
i+else	Err	bitreich.org	70
i+        printf 'No current collection in use\n'	Err	bitreich.org	70
i+fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# displays the values of an identifier	Err	bitreich.org	70
i+# $1 identifier	Err	bitreich.org	70
i+show() {	Err	bitreich.org	70
i+    cd "${REPO}"	Err	bitreich.org	70
i+    SEEN=0	Err	bitreich.org	70
i+    for attribute in *	Err	bitreich.org	70
i+    do	Err	bitreich.org	70
i+        if [ -f "${attribute}/${1}" ]	Err	bitreich.org	70
i+        then	Err	bitreich.org	70
i+            if [ "$SEEN" -eq 0 ]	Err	bitreich.org	70
i+            then	Err	bitreich.org	70
i+                printf "%s:\n" "$1"	Err	bitreich.org	70
i+                SEEN=1	Err	bitreich.org	70
i+            fi	Err	bitreich.org	70
i+                printf "%15s: %s\n" ${attribute} "$(cat "${attribute}/${1}")"	Err	bitreich.org	70
i+        fi	Err	bitreich.org	70
i+    done	Err	bitreich.org	70
i+    if [ "$SEEN" -eq 1 ]	Err	bitreich.org	70
i+    then	Err	bitreich.org	70
i+        exit 0	Err	bitreich.org	70
i+    else	Err	bitreich.org	70
i+        printf '%s is not in the library.\n' "$1"	Err	bitreich.org	70
i+        exit 1	Err	bitreich.org	70
i+    fi	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# export the data in csv format "data","data","data"	Err	bitreich.org	70
i+# we assume it'll works with the dataset	Err	bitreich.org	70
i+export_csv() {	Err	bitreich.org	70
i+    cd "${REPO}"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    # display header	Err	bitreich.org	70
i+    printf '"identifier",'	Err	bitreich.org	70
i+    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq | while read attr	Err	bitreich.org	70
i+    do	Err	bitreich.org	70
i+        printf '"%s",' $attr	Err	bitreich.org	70
i+    done	Err	bitreich.org	70
i+    printf '\n'	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    # print database	Err	bitreich.org	70
i+    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 3 | sort | uniq | while read id	Err	bitreich.org	70
i+    do	Err	bitreich.org	70
i+        printf '"%s",' "$id"	Err	bitreich.org	70
i+        find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq | while read attr	Err	bitreich.org	70
i+        do	Err	bitreich.org	70
i+            # for faster processing, we do not check existence of file before	Err	bitreich.org	70
i+            awk '{ printf "\"%s\",",$0}' "${attr}/${id}" 2>/dev/null  \	Err	bitreich.org	70
i+                || printf '"",'	Err	bitreich.org	70
i+        done	Err	bitreich.org	70
i+        printf '\n'	Err	bitreich.org	70
i+    done	Err	bitreich.org	70
i+    IFS=$OLDIFS	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# delete identifier from attributes	Err	bitreich.org	70
i+# $1 identifier	Err	bitreich.org	70
i+delete() {	Err	bitreich.org	70
i+    cd "${REPO}"	Err	bitreich.org	70
i+    SEEN=0	Err	bitreich.org	70
i+    for attribute in *	Err	bitreich.org	70
i+    do	Err	bitreich.org	70
i+        if [ -f "${attribute}/${1}" ]	Err	bitreich.org	70
i+        then	Err	bitreich.org	70
i+            git rm "${attribute}/${1}"	Err	bitreich.org	70
i+            git commit -m "Delete ${attribute} ${1}" "${attribute}/${1}"	Err	bitreich.org	70
i+            rmdir "${attribute}" 2> /dev/null	Err	bitreich.org	70
i+            SEEN=1	Err	bitreich.org	70
i+        fi	Err	bitreich.org	70
i+    done	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    # did we find it?	Err	bitreich.org	70
i+    if [ "$SEEN" -eq 0 ]	Err	bitreich.org	70
i+    then	Err	bitreich.org	70
i+        printf "%s is not in the library!\n" "$1"	Err	bitreich.org	70
i+        exit 1	Err	bitreich.org	70
i+    else	Err	bitreich.org	70
i+        exit 0	Err	bitreich.org	70
i+    fi	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# displays list of identifiers	Err	bitreich.org	70
i+show_list() {	Err	bitreich.org	70
i+    cd "${REPO}"	Err	bitreich.org	70
i+    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 3 | sort | uniq -c | \	Err	bitreich.org	70
i+        awk '{ for(i=2;i<=NF;i=i+1) { printf "%s ", $i }	Err	bitreich.org	70
i+               printf "(%i)\n", $1	Err	bitreich.org	70
i+        }'	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# displays attributes used	Err	bitreich.org	70
i+show_attributes() {	Err	bitreich.org	70
i+    cd "${REPO}"	Err	bitreich.org	70
i+    find . -name '.git' -prune -o -type f -print | cut -d '/' -f 2 | sort | uniq -c | \	Err	bitreich.org	70
i+        awk '{ for(i=2;i<=NF;i=i+1) { printf "%s ", $i }	Err	bitreich.org	70
i+                   printf "(%i)\n", $1	Err	bitreich.org	70
i+        }'	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# add/modify a value	Err	bitreich.org	70
i+# $@ identifier / attr / value / attr / value / ....	Err	bitreich.org	70
i+# shift to have attr / value again and again	Err	bitreich.org	70
i+add_value() {	Err	bitreich.org	70
i+    cd "$REPO"	Err	bitreich.org	70
i+    ID="$1"	Err	bitreich.org	70
i+    shift	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    while [ "$#" -gt 1 ]	Err	bitreich.org	70
i+    do	Err	bitreich.org	70
i+        ATTRIBUTE="$1"	Err	bitreich.org	70
i+        VALUE="$2"	Err	bitreich.org	70
i+        shift 2	Err	bitreich.org	70
i+        	Err	bitreich.org	70
i+        mkdir -p "$ATTRIBUTE"	Err	bitreich.org	70
i+        printf '%s' "$VALUE" > "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i+        git add "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i+        git commit -m "Modify ${ATTRIBUTE} on ${ID}" "${ATTRIBUTE}/${ID}"	Err	bitreich.org	70
i+    done	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# returns identifiers having attribute=value	Err	bitreich.org	70
i+# $1 attribute	Err	bitreich.org	70
i+# $2 value	Err	bitreich.org	70
i+search_value() {	Err	bitreich.org	70
i+    cd "$REPO"	Err	bitreich.org	70
i+    shift	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    RESULT=$(mktemp /tmp/dossier.XXXXXXXXXXXX)	Err	bitreich.org	70
i+    COUNT=0	Err	bitreich.org	70
i+    if [ -f "$RESULT" ]	Err	bitreich.org	70
i+    then	Err	bitreich.org	70
i+            while [ "$#" -gt 1 ]	Err	bitreich.org	70
i+            do	Err	bitreich.org	70
i+                ATTRIBUTE="$1"	Err	bitreich.org	70
i+                VALUE="$2"	Err	bitreich.org	70
i+                shift 2	Err	bitreich.org	70
i+                if [ ! -d "$ATTRIBUTE" ]	Err	bitreich.org	70
i+                then	Err	bitreich.org	70
i+                        printf 'The attribute %s do not exists\n' "${ATTRIBUTE}"	Err	bitreich.org	70
i+                        exit 5	Err	bitreich.org	70
i+                fi	Err	bitreich.org	70
i+                grep -rl "$VALUE" "$ATTRIBUTE" | cut -d '/' -f 2 >> "$RESULT"	Err	bitreich.org	70
i+                COUNT=$(( COUNT + 1 ))	Err	bitreich.org	70
i+            done	Err	bitreich.org	70
i+            sort "$RESULT" | uniq -c | \	Err	bitreich.org	70
i+                    awk -v count=$COUNT \	Err	bitreich.org	70
i+                    '{ if($1==count) {	Err	bitreich.org	70
i+                        $1=""               # remove uniq result	Err	bitreich.org	70
i+                        gsub(/^[ ]+/,"",$0) # remove leading space due to uniq	Err	bitreich.org	70
i+                        print	Err	bitreich.org	70
i+                    }}'	Err	bitreich.org	70
i+    else	Err	bitreich.org	70
i+            printf 'Cannot create a temporary file in /tmp\n'	Err	bitreich.org	70
i+            exit 6	Err	bitreich.org	70
i+    fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# returns list of identifiers in a attribute	Err	bitreich.org	70
i+# $1 attribute	Err	bitreich.org	70
i+list() {	Err	bitreich.org	70
i+    cd "$REPO"	Err	bitreich.org	70
i+    grep -r . "$1" | cut -d '/' -f 2- | sort	Err	bitreich.org	70
i+    exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# displays usage	Err	bitreich.org	70
i+usage() {	Err	bitreich.org	70
i+    printf '%s\n' \	Err	bitreich.org	70
i+           "Get help" \	Err	bitreich.org	70
i+           ": dossier help" \	Err	bitreich.org	70
i+           "" \	Err	bitreich.org	70
i+           "Export data as CSV" \	Err	bitreich.org	70
i+           ": dossier export" \	Err	bitreich.org	70
i+           "" \	Err	bitreich.org	70
i+           "Show collections, register collections, switch current collection" \	Err	bitreich.org	70
i+           ": dossier collections [register path name] [name]" \	Err	bitreich.org	70
i+           "" \	Err	bitreich.org	70
i+           "Show items and display informations about an item" \	Err	bitreich.org	70
i+           ": dossier show [identifier]" \	Err	bitreich.org	70
i+           "" \	Err	bitreich.org	70
i+           "Look at attributes, search items having some values" \	Err	bitreich.org	70
i+           ": dossier search [attribute [value]] ... [attribute [value]] ..." \	Err	bitreich.org	70
i+           "" \	Err	bitreich.org	70
i+           "Add / Modify attributes values on an item" \	Err	bitreich.org	70
i+           ": dossier identifier attribute value ... attribute value ..."	Err	bitreich.org	70
i+    exit 0   	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+switch() {	Err	bitreich.org	70
i+        if [ ! -L "${REPOSITORY}/${1}" ]	Err	bitreich.org	70
i+        then	Err	bitreich.org	70
i+                printf 'Collection %s is not registered\n' "${1}"	Err	bitreich.org	70
i+                exit 9	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                printf 'Switching to collection %s\n' "${1}"	Err	bitreich.org	70
i+                printf 'CONTEXT=%s\n' $1 > "${REPOSITORY}/current"	Err	bitreich.org	70
i+                exit $?	Err	bitreich.org	70
i+        fi	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+collections() {	Err	bitreich.org	70
i+        ls "${REPOSITORY}" | grep -v 'current' | sed "s/^${CONTEXT}$/& */"	Err	bitreich.org	70
i+        exit 0	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# create symlink to register a collection	Err	bitreich.org	70
i+# $1 absolute path to collection	Err	bitreich.org	70
i+# $2 name of collection	Err	bitreich.org	70
i+register() {	Err	bitreich.org	70
i+        set -x	Err	bitreich.org	70
i+        if [ -d "${1}" ]	Err	bitreich.org	70
i+        then	Err	bitreich.org	70
i+                if ! expr "${1}" : '^/'	Err	bitreich.org	70
i+                then	Err	bitreich.org	70
i+                        printf 'Aborting, the path of the collection must be an absolute path. %s is not valid\n' "${1}"	Err	bitreich.org	70
i+                fi	Err	bitreich.org	70
i+                test -L "${REPOSITORY}/${2}" && rm "${REPOSITORY}/${2}"	Err	bitreich.org	70
i+                ln -s "${1}" "${REPOSITORY}/${2}"	Err	bitreich.org	70
i+                exit 0	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i+                printf 'Aborting, %s is not a directory\n' "${2}"	Err	bitreich.org	70
i+                exit 8	Err	bitreich.org	70
i+        fi	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+if [ "$1" = "export" ] ; then export_csv ; fi	Err	bitreich.org	70
i+if [ "$1" = "rm" ] && [ "$#" -eq 2 ] ; then delete "$2" ; fi	Err	bitreich.org	70
i+if [ "$1" = "help" ]                 ; then usage ; fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# dealing with identifiers	Err	bitreich.org	70
i+if [ "$1" = "show" ]	Err	bitreich.org	70
i+then	Err	bitreich.org	70
i+    if [ "$#" -eq 1 ]; then show_list ; fi	Err	bitreich.org	70
i+    if [ "$#" -eq 2 ]; then show "$2" ; fi	Err	bitreich.org	70
i+fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# dealing with attributes	Err	bitreich.org	70
i+if [ "$1" = "search" ];	Err	bitreich.org	70
i+then	Err	bitreich.org	70
i+    if [ "$#" -eq 1 ]; then show_attributes        ; fi	Err	bitreich.org	70
i+    if [ "$#" -eq 2 ]; then list "$2"              ; fi	Err	bitreich.org	70
i+    if [ "$#" -ge 3 ]; then search_value "$@" ; fi	Err	bitreich.org	70
i+fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+if [ "$1" = "collections" ]; then	Err	bitreich.org	70
i+        if [ "$#" -eq 1 ]; then collections ; fi	Err	bitreich.org	70
i+        if [ "$#" -eq 2 ]; then switch "$2" ; fi	Err	bitreich.org	70
i+        if [ "$2" = "register" ] && [ "$#" -eq 4 ]; then register "$3" "$4" ; fi	Err	bitreich.org	70
i+fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+if [ "$#" -ge 3 ]; then add_value "$@" ; fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# no command, maybe it's an item, try it	Err	bitreich.org	70
i+if [ "$#" -eq 1 ]; then show "$1" ; fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+usage	Err	bitreich.org	70
1diff --git a/dossier.1 b/dossier.1	/scm/dossier/file/dossier.1.gph	bitreich.org	70
i@@ -0,0 +1,124 @@	Err	bitreich.org	70
i+.Dd $Mdocdate: July 18 2018 $	Err	bitreich.org	70
i+.Dt DOSSIER 1	Err	bitreich.org	70
i+.Os	Err	bitreich.org	70
i+.Sh NAAME	Err	bitreich.org	70
i+.Nm dossier	Err	bitreich.org	70
i+.Nd a console collection manager	Err	bitreich.org	70
i+.Sh SYNOPSIS	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+.Op Cm show | Cm help | Cm export | Cm collections | Cm search | Ar item Op attribute value	Err	bitreich.org	70
i+.Sh DESCRIPTION	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+is a tool to register "items" into collections with metadata. Allowing to	Err	bitreich.org	70
i+keep tracks of collections like wine, tea, video games, movie, music etc...	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Collections are a set of items, attributes and values.	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+allows to manage different collections to not mix everything.	Err	bitreich.org	70
i+.Bl -tag -width Ds	Err	bitreich.org	70
i+.It Nm Cm help	Err	bitreich.org	70
i+Show help	Err	bitreich.org	70
i+.It Nm Cm show Op item-name	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Cm show	Err	bitreich.org	70
i+without argument will display the list of items in the current collection.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+With the argument	Err	bitreich.org	70
i+.Ar item-name	Err	bitreich.org	70
i+it will show all the attributes known for that item.	Err	bitreich.org	70
i+.It Nm Cm export	Err	bitreich.org	70
i+Export the data of the current collection as CSV (Comma Separated Values).	Err	bitreich.org	70
i+.It Nm Cm collections Oo collection Oc | Oo register Pa full-path Ar collection-name Oc 	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Cm collections	Err	bitreich.org	70
i+with no argument will show the list of collections that	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+is aware of aka the collections that have been registered. The collection currently in use	Err	bitreich.org	70
i+will be displayed with a	Err	bitreich.org	70
i+.Sy *	Err	bitreich.org	70
i+symbol after the name.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Cm collections	Err	bitreich.org	70
i+with one parameter	Err	bitreich.org	70
i+will switch the current collection in use to the collection	Err	bitreich.org	70
i+.Ar collection.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Cm collections	Err	bitreich.org	70
i+using the parameter	Err	bitreich.org	70
i+.Ar register	Err	bitreich.org	70
i+will make	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+aware of a collection, this requires the full path	Err	bitreich.org	70
i+.Ar full-path	Err	bitreich.org	70
i+where is stored the collection and a name	Err	bitreich.org	70
i+.Ar collection-name	Err	bitreich.org	70
i+to identify it. When a collection is registered,	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+will initialize a	Err	bitreich.org	70
i+.Xr git 1	Err	bitreich.org	70
i+repository in it if possible.	Err	bitreich.org	70
i+.It Nm Cm search Oo attribute Oo value Oc Oc Op attribute value	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Cm search	Err	bitreich.org	70
i+with no argument will return the list of known attributes in the collections with the	Err	bitreich.org	70
i+number of items for which the attribute is set.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+the command	Err	bitreich.org	70
i+.Nm search	Err	bitreich.org	70
i+with one parameter will return the list of the items for which	Err	bitreich.org	70
i+.Ar attribute	Err	bitreich.org	70
i+has been recorded and the associated value, using a semi colon as separator.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+The command	Err	bitreich.org	70
i+.Nm search	Err	bitreich.org	70
i+with two parameters will return the list of the items having the value	Err	bitreich.org	70
i+.Ar value	Err	bitreich.org	70
i+in the attribute	Err	bitreich.org	70
i+.Ar attribute.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Using more arguments will return the list of the items matching all the conditions of values in attributes.	Err	bitreich.org	70
i+.It Nm Ar item-name	Err	bitreich.org	70
i+shows all the attributes known for that item.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+In case you need to use an	Err	bitreich.org	70
i+.Ar item-name	Err	bitreich.org	70
i+like "collections" or any other name being a	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+command, the command	Err	bitreich.org	70
i+.Cm show Ar item-name	Err	bitreich.org	70
i+is required.	Err	bitreich.org	70
i+.It Nm Ar item-name Ar attribute Ar value Op Ar attribute2 Ar value2 Ar ...	Err	bitreich.org	70
i+Associate the value	Err	bitreich.org	70
i+.Ar value	Err	bitreich.org	70
i+to the attribute	Err	bitreich.org	70
i+.Ar attribute	Err	bitreich.org	70
i+for item	Err	bitreich.org	70
i+.Ar item-name.	Err	bitreich.org	70
i+Multiples couple of	Err	bitreich.org	70
i+.Ar attribute value	Err	bitreich.org	70
i+can be used on the same command line to define multiples values.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+This is the way to add and update data inside a collection.	Err	bitreich.org	70
i+.Pp	Err	bitreich.org	70
i+Every modification is recorded with	Err	bitreich.org	70
i+.Xr git 1 .	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+.Sh FILES	Err	bitreich.org	70
i+.Bl -tag -width "~/.collections" -compact	Err	bitreich.org	70
i+.It Pa ~/.collections	Err	bitreich.org	70
i+The directory where	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+stores the collections registered as symlinks to their full path.	Err	bitreich.org	70
i+.Sh EXIT 	Err	bitreich.org	70
i+.Ex -std dossier	Err	bitreich.org	70
i+.Sh SEE ALSO	Err	bitreich.org	70
i+.Xr git 1	Err	bitreich.org	70
i+.Sh Authors	Err	bitreich.org	70
i+.An -nosplit	Err	bitreich.org	70
i+The	Err	bitreich.org	70
i+.Nm	Err	bitreich.org	70
i+program was written by	Err	bitreich.org	70
i+.An Solène Rapenne Aq Mt solene@perso.pw	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/dossier/commit/a1a5058a5a89c4...
Content-Typetext/plain; charset=utf-8