123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- #!/bin/sh
- export TEXTDOMAIN=xdelta_gui
- export OUTPUT_CHARSET=UTF-8
- . gettext.sh
- if [ "`which xdelta3`" = "" ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" error "`gettext \"The 'xdelta' package must be installed first\"`"
- exit
- fi
- old_find_func () {
-
- /usr/lib/gtkdialog/box_splash -close never -text "$(gettext 'Please wait, searching for old file...')" &
- XPID=$!
- SOURCEFILE_OLD="`find /root -maxdepth 4 -type f -name ${OLDFILENAME} | head -n 1`"
- if [ "$SOURCEFILE_OLD" = "" ];then
- for ONEMNTD in `mount | grep '^/dev/sd[a-z]' | cut -f 3 -d ' ' | tr '\n' ' '`
- do
- SOURCEFILE_OLD="`find ${ONEMNTD} -maxdepth 4 -type f -name ${OLDFILENAME} | head -n 1`"
- [ "$SOURCEFILE_OLD" != "" ] && break
- done
- fi
- kill $XPID
- if [ "$SOURCEFILE_OLD" = "" ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" nb "`eval_gettext \"Sorry could not find \\\${OLDFILENAME}. You will have to manually drag it into the 'Old file' box\"`"
- fi
- }
- msg_help (){
- echo "$(gettext "Xdelta is an application program designed to compute changes between two files. These changes (deltas) are similar to the output of the 'diff' program in that they may be used to store and transmit only the changes between files. However, unlike diff, the output of Xdelta is not expressed in a human-readable format -- Xdelta can also also apply these deltas to a copy of the original file. Xdelta uses a fast, linear algorithm and performs well on both binary and text files.
- To create a '.delta' file, you need two original files, an 'old' and a 'new' file. The generated delta file will have an extension of '.delta'.
- You can recreate the original 'new' file, as long as you have the original 'old' file and the '.delta' file. This GUI frontend makes this easy -- just drag the .delta file into the box, and the progam will search for and locate the original old file. Or, just click on a .delta file in a ROX-Filer window to regenerate the original new file.
- The author of Xdelta is Joshua MacDonald. The Rsync algorithm, which inspired the core delta algorithm, is due to Andrew Tridgell and Paul Mackerras. The GUI is written by Barry Kauler. Licence is GPL v2.")" > /tmp/box_help
- /usr/lib/gtkdialog/box_help "Xdelta" &
- }
- export -f msg_help
- SOURCEFILE_OLD=""
- SOURCEFILE_NEW=""
- SOURCEFILE_DELTA=""
- SOURCEFILE_2ND=""
- if [ "$1" ];then #SFR 130806 quotes
- SOURCEFILE="$1"
- if [ ! -f "$SOURCEFILE" ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" error "${SOURCEFILE} $(gettext 'does not exist')"
- exit
- fi
- if [ "`echo -n "${SOURCEFILE}" | grep '\.delta$'`" = "" ];then
- SOURCEFILE_OLD="$SOURCEFILE"
- else
- SOURCEFILE_DELTA="$SOURCEFILE"
- fi
- fi
- if [ $2 ];then
- if [ "`echo -n "${2}" | grep '\.delta$'`" = "" ];then
- if [ "$SOURCEFILE_OLD" = "" ];then
- SOURCEFILE_OLD="$2"
- else
- SOURCEFILE_NEW="$2"
- fi
- else
- SOURCEFILE_DELTA="$2"
- fi
- fi
- if [ "$SOURCEFILE_DELTA" != "" ];then
- DIRDELTA="`dirname "$SOURCEFILE_DELTA"`"
- BASEDELTA="`basename "$SOURCEFILE_DELTA"`"
- if [ "$SOURCEFILE_OLD" = "" ];then
- #it may be possible to automatically find the old file...
- #delta file has format "oldfile:newfile.delta" (yes, ':' in filename)
- if [ "`echo -n "$BASEDELTA" | grep ':'`" != "" ];then
- OLDFILENAME="`echo -n "$BASEDELTA" | grep ':' | cut -f 1 -d ':'`"
- NEWFILENAME="`echo -n "$BASEDELTA" | grep ':' | cut -f 2 -d ':' | rev | cut -f 2-9 -d '.' | rev`"
- if [ "$OLDFILENAME" != "" ];then
- if [ -f "$DIRDELTA/$OLDFILENAME" ];then
- SOURCEFILE_OLD="$DIRDELTA/$OLDFILENAME"
- else
- old_find_func #needs OLDFILENAME, sets SOURCEFILE_OLD.
- fi
- fi
- fi
- #100131 altenate delta file format "oldfile___newfile.delta" (three underscores)
- if [ "`echo -n "$BASEDELTA" | grep '___'`" != "" ];then
- OLDFILENAME="`echo -n "$BASEDELTA" | grep '___' | sed -e 's%___.*%%'`"
- NEWFILENAME="`echo -n "$BASEDELTA" | grep '___' | sed -e 's%^.*___%%' | rev | cut -f 2-9 -d '.' | rev`"
- if [ "$OLDFILENAME" != "" ];then
- if [ -f "$DIRDELTA/$OLDFILENAME" ];then
- SOURCEFILE_OLD="$DIRDELTA/$OLDFILENAME"
- else
- old_find_func #needs OLDFILENAME, sets SOURCEFILE_OLD.
- fi
- fi
- fi
- fi
- fi
- DEFAULT_OLD=""
- DEFAULT_NEW=""
- DEFAULT_DELTA=""
- DEFAULT_2ND=""
- SECONDBOX=""
- [ "$SOURCEFILE_OLD" != "" ] && DEFAULT_OLD="<default>${SOURCEFILE_OLD}</default>"
- [ "$SOURCEFILE_NEW" != "" ] && DEFAULT_NEW="<default>${SOURCEFILE_NEW}</default>"
- [ "$SOURCEFILE_DELTA" != "" ] && DEFAULT_DELTA="<default>${SOURCEFILE_DELTA}</default>"
- if [ "$DEFAULT_NEW" != "" ];then
- SECONDBOX="<hbox>
- <text width-request=\"150\"><label>$(gettext 'New file')</label></text>
- <entry accept=\"file\" width-request=\"300\" fs-title=\"Xdelta\">${DEFAULT_NEW}<variable>SOURCEFILE_NEW</variable></entry>
- <button>
- "`/usr/lib/gtkdialog/xml_button-icon open`"
- <action type=\"fileselect\">SOURCEFILE_NEW</action>
- </button>
- </hbox>"
- fi
- if [ "$DEFAULT_DELTA" != "" ];then
- SECONDBOX="<hbox>
- <text width-request=\"150\"><label>$(gettext 'Delta file')</label></text>
- <entry accept=\"file\" width-request=\"300\" fs-filters=\"*.delta\" fs-title=\"Xdelta\">${DEFAULT_DELTA}<variable>SOURCEFILE_DELTA</variable></entry>
- <button>
- "`/usr/lib/gtkdialog/xml_button-icon open`"
- <action type=\"fileselect\">SOURCEFILE_DELTA</action>
- </button>
- </hbox>"
- fi
- if [ "$SECONDBOX" = "" ];then
- SECONDBOX="<hbox>
- <text width-request=\"150\"><label>$(gettext 'New or .delta file')</label></text>
- <entry accept=\"file\" fs-title=\"Xdelta\">${DEFAULT_2ND}<variable>SOURCEFILE_2ND</variable></entry>
- <button>
- "`/usr/lib/gtkdialog/xml_button-icon open`"
- <action type=\"fileselect\">SOURCEFILE_2ND</action>
- </button>
- </hbox>"
- fi
- export Xdelta_gui='
- <window title="'$(gettext 'Xdelta difference manager')'" icon-name="gtk-file">
- <vbox space-expand="true" space-fill="true">
- '"`/usr/lib/gtkdialog/xml_info scale "file_compare.svg" 60 "$(gettext 'The xdelta utility manage changes between two files.')" "$(gettext 'Drag files into the fields or use the browse-button.')" " " "<b>$(gettext "Generate")</b> $(gettext "a .delta file: Define old and new files.")" "<b>$(gettext "Recreate")</b> $(gettext "the new file: Define old and .delta files.")"`"'
- <frame>
- <vbox space-expand="false" space-fill="false">
- <text height-request="5"><label>""</label></text>
- <hbox>
- <text justify="2" width-request="150"><label>'$(gettext 'Old file')'</label></text>
- <entry accept="file" fs-title="Xdelta">
- '${DEFAULT_OLD}'
- <variable>SOURCEFILE_OLD</variable>
- </entry>
- <button>
- '"`/usr/lib/gtkdialog/xml_button-icon open`"'
- <action type="fileselect">SOURCEFILE_OLD</action>
- </button>
- </hbox>
- '${SECONDBOX}'
- <text height-request="5"><label>""</label></text>
- </vbox>
- </frame>
- <hbox space-expand="false" space-fill="false">
- <hbox space-expand="false" space-fill="false">
- <button>
- <label>'$(gettext "Help")'</label>
- '"`/usr/lib/gtkdialog/xml_button-icon help`"'
- <action>msg_help</action>
- </button>
- </hbox>
- <text space-expand="true" space-fill="true"><label>""</label></text>
- <button space-expand="false" space-fill="false">
- <label>'$(gettext "Cancel")'</label>
- '"`/usr/lib/gtkdialog/xml_button-icon cancel`"'
- <action>exit:CANCEL</action>
- </button>
- <button space-expand="false" space-fill="false">
- <label>'$(gettext 'Generate')'</label>
- '"`/usr/lib/gtkdialog/xml_button-icon execute`"'
- <action type="exit">generate</action>
- </button>
- '"`/usr/lib/gtkdialog/xml_scalegrip`"'
- </hbox>
- </vbox>
- </window>'
- . /usr/lib/gtkdialog/xml_info gtk
- RETVALS="`gtkdialog -p Xdelta_gui`"
- eval "$RETVALS"
- EXITERR=""
- [ "$EXIT" != "generate" ] && exit
-
- if [ "$SOURCEFILE_2ND" != "" ];then
- if [ "`echo -n "$SOURCEFILE_2ND" | grep '\.delta$'`" = "" ];then
- SOURCEFILE_DELTA=""
- SOURCEFILE_NEW="$SOURCEFILE_2ND"
- else
- SOURCEFILE_NEW=""
- SOURCEFILE_DELTA="$SOURCEFILE_2ND"
- fi
- fi
-
- if [ "$SOURCEFILE_NEW" != "" ];then
- [ ! -f "$SOURCEFILE_NEW" ] && EXITERR="yes"
- if [ "$EXITERR" != "" ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" error "`gettext \"'New file' does not exist\"`"
- exit
- fi
- fi
- if [ "$SOURCEFILE_DELTA" != "" -a "$SOURCEFILE_OLD" = "" ];then
-
- DIRDELTA="`dirname "$SOURCEFILE_DELTA"`"
- BASEDELTA="`basename "$SOURCEFILE_DELTA"`"
- if [ "`echo -n "$BASEDELTA" | grep ':'`" != "" ];then
- OLDFILENAME="`echo -n "$BASEDELTA" | grep ':' | cut -f 1 -d ':'`"
- NEWFILENAME="`echo -n "$BASEDELTA" | grep ':' | cut -f 2 -d ':' | rev | cut -f 2-9 -d '.' | rev`"
- if [ "$OLDFILENAME" != "" ];then
- if [ -f "$DIRDELTA/$OLDFILENAME" ];then
- SOURCEFILE_OLD="$DIRDELTA/$OLDFILENAME"
- else
- old_find_func
- fi
- fi
- fi
-
- if [ "`echo -n "$BASEDELTA" | grep '___'`" != "" ];then
- OLDFILENAME="`echo -n "$BASEDELTA" | grep '___' | sed -e 's%___.*%%'`"
- NEWFILENAME="`echo -n "$BASEDELTA" | grep '___' | sed -e 's%^.*___%%' | rev | cut -f 2-9 -d '.' | rev`"
- if [ "$OLDFILENAME" != "" ];then
- if [ -f "$DIRDELTA/$OLDFILENAME" ];then
- SOURCEFILE_OLD="$DIRDELTA/$OLDFILENAME"
- else
- old_find_func
- fi
- fi
- fi
- fi
- [ "$SOURCEFILE_OLD" = "" ] && EXITERR="yes"
- [ ! -f "$SOURCEFILE_OLD" ] && EXITERR="yes"
- if [ "$EXITERR" != "" ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" error "`gettext \"'Old file' does not exist\"`"
- exit
- fi
- OLDEXT="`echo -n "$SOURCEFILE_OLD" | rev | cut -f 1 -d '.' | rev`"
- if [ "$SOURCEFILE_DELTA" != "" ];then
-
- DIRDELTA="`dirname "$SOURCEFILE_DELTA"`"
- BASEDELTA="`basename "$SOURCEFILE_DELTA"`"
- if [ "`echo -n "$BASEDELTA" | grep ':'`" != "" ];then
- NEWFILENAME="`echo -n "$BASEDELTA" | grep ':' | cut -f 2 -d ':' | rev | cut -f 2-9 -d '.' | rev`"
- [ "$NEWFILENAME" != "" ] && SOURCEFILE_NEW="$DIRDELTA/$NEWFILENAME"
- fi
-
- if [ "`echo -n "$BASEDELTA" | grep '___'`" != "" ];then
- NEWFILENAME="`echo -n "$BASEDELTA" | grep '___' | sed -e 's%^.*___%%' | rev | cut -f 2-9 -d '.' | rev`"
- [ "$NEWFILENAME" != "" ] && SOURCEFILE_NEW="$DIRDELTA/$NEWFILENAME"
- fi
- [ "$SOURCEFILE_NEW" = "" ] && SOURCEFILE_NEW="$DIRDELTA/newfile.${OLDEXT}"
- /usr/lib/gtkdialog/box_splash -close never -text "$(gettext 'please wait')..." &
- XMPID=$!
- xdelta3 -d -s "$SOURCEFILE_OLD" "$SOURCEFILE_DELTA" "$SOURCEFILE_NEW" 2>/tmp/xdelta_err
- XFLG=$?
- sync
- kill $XMPID
- if [ $XFLG -eq 0 ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" complete "`eval_gettext \"SUCCESS! \\\${SOURCEFILE_NEW} generated\"`"
- else
- /usr/lib/gtkdialog/box_ok "Xdelta" error "$(gettext 'Failed to recreate the new file. Error message:')" "`cat /tmp/xdelta_err`"
- fi
- else
-
- BASE_OLD="`basename "$SOURCEFILE_OLD"`"
- BASE_NEW="`basename "$SOURCEFILE_NEW"`"
- DIR_NEW="`dirname "$SOURCEFILE_NEW"`"
-
- touch ${DIR_NEW}/verytempfilehere
- [ $? -ne 0 ] && DIR_NEW='/root'
- [ -f ${DIR_NEW}/verytempfilehere ] && rm -f ${DIR_NEW}/verytempfilehere
-
- SOURCEFILE_DELTA="${DIR_NEW}/${BASE_OLD}___${BASE_NEW}.delta"
- /usr/lib/gtkdialog/box_splash -close never -text "$(gettext 'please wait')..." &
- XMPID=$!
- xdelta3 -e -s "$SOURCEFILE_OLD" "$SOURCEFILE_NEW" "$SOURCEFILE_DELTA" 2>/tmp/xdelta_err
- XFLG=$?
- sync
- kill $XMPID
- if [ $XFLG -eq 0 ];then
- /usr/lib/gtkdialog/box_ok "Xdelta" complete "`eval_gettext \"SUCCESS! \\\${SOURCEFILE_DELTA} generated\"`"
- else
- /usr/lib/gtkdialog/box_ok "Xdelta" error "$(gettext 'Failed to recreate the new file. Error message:')" "`cat /tmp/xdelta_err`"
- fi
- fi
|