184 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| #
 | |
| # mfconfig init source dest
 | |
| # mfconfig manual source dest
 | |
| #
 | |
| # The MarlinFirmware/Configurations layout could be broken up into branches,
 | |
| # but this makes management more complicated and requires more commits to
 | |
| # perform the same operation, so this uses a single branch with subfolders.
 | |
| #
 | |
| # init - Initialize the repo with a base commit and changes:
 | |
| #   - Source will be an 'import' branch containing all current configs.
 | |
| #   - Create an empty 'BASE' branch from 'init-repo'.
 | |
| #   - Add Marlin config files, but reset all to defaults.
 | |
| #   - Commit this so changes will be clear in following commits.
 | |
| #   - Add changed Marlin config files and commit.
 | |
| #
 | |
| # manual - Manually import changes from the Marlin repo
 | |
| #   - Replace 'default' configs with those from the Marlin repo.
 | |
| #   - Wait for manual propagation to the rest of the configs.
 | |
| #   - Run init with the given 'source' and 'dest'
 | |
| #
 | |
| 
 | |
| REPOHOME="`dirname ~/Projects/Maker/Firmware/.`"
 | |
| MARLINREPO="$REPOHOME/MarlinFirmware"
 | |
| CONFIGREPO="$REPOHOME/Configurations"
 | |
| 
 | |
| CEXA=config/examples
 | |
| CDEF=config/default
 | |
| BC=Configuration.h
 | |
| AC=Configuration_adv.h
 | |
| 
 | |
| COMMIT_STEPS=0
 | |
| 
 | |
| #cd "$CONFIGREPO" 2>/dev/null || { echo "Can't find Configurations repo!" ; exit 1; }
 | |
| 
 | |
| ACTION=${1:-init}
 | |
| IMPORT=${2:-"import-2.0.x"}
 | |
| EXPORT=${3:-"bugfix-2.0.x"}
 | |
| 
 | |
| echo -n "Doing grhh ... " ; grhh ; echo
 | |
| 
 | |
| if [[ $ACTION == "manual" ]]; then
 | |
| 
 | |
|   #
 | |
|   # Copy the latest default configs from MarlinFirmware/Marlin
 | |
|   # or one of the import branches here, then use them to construct
 | |
|   # a 'BASE' branch with only defaults as a starting point.
 | |
|   #
 | |
| 
 | |
|   echo "- Updating '$IMPORT' from Marlin..."
 | |
| 
 | |
|   git checkout $IMPORT || exit
 | |
| 
 | |
|   # Reset from the latest complete state
 | |
|   #git reset --hard master
 | |
| 
 | |
|   cp "$MARLINREPO/Marlin/"Configuration*.h "$CDEF/"
 | |
|   #git add . && git commit -m "Changes from Marlin ($(date '+%Y-%m-%d %H:%M'))."
 | |
| 
 | |
|   echo "- Fix up the import branch and come back."
 | |
| 
 | |
|   read -p "- Ready to init [y/N] ?" INIT_YES
 | |
|   echo
 | |
| 
 | |
|   [[ $INIT_YES == 'Y' || $INIT_YES == 'y' ]] || { echo "Done." ; exit ; }
 | |
| 
 | |
|   ACTION='init'
 | |
| fi
 | |
| 
 | |
| if [[ $ACTION == "init" ]]; then
 | |
|   #
 | |
|   # Copy all configs from a source such as MarlinFirmware/Marlin
 | |
|   # or one of the import branches here, then use them to construct
 | |
|   # a 'BASE' branch with only defaults as a starting point.
 | |
|   #
 | |
| 
 | |
|   echo "- Initializing BASE branch..."
 | |
| 
 | |
|   # Use the import branch as the source
 | |
|   git checkout $IMPORT || exit
 | |
| 
 | |
|   # Copy to a temporary location
 | |
|   TEMP=$( mktemp -d ) ; cp -R config $TEMP
 | |
| 
 | |
|   # Make sure we're not on the 'BASE' branch...
 | |
|   git checkout master >/dev/null 2>&1 || exit
 | |
| 
 | |
|   # Create 'BASE' as a copy of 'init-repo' (README, LICENSE, etc.)
 | |
|   git branch -D BASE 2>/dev/null
 | |
|   git checkout init-repo -b BASE || exit
 | |
| 
 | |
|   # Copy all config files into place
 | |
|   echo "- Copying configs from Marlin..."
 | |
|   cp -R "$TEMP/config" .
 | |
| 
 | |
|   # Delete anything that's not a Configuration file
 | |
|   find config -type f \! -name "Configuration*" -exec rm "{}" \;
 | |
| 
 | |
|   # DEBUG: Commit the original config files for comparison
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Commit for comparison" >/dev/null
 | |
| 
 | |
|   # Init Cartesian configurations to default
 | |
|   echo "- Initializing configs to default state..."
 | |
| 
 | |
|   find "$CEXA" -name $BC ! -path */delta/* -print0 \
 | |
|     | while read -d $'\0' F ; do cp "$CDEF/$BC" "$F" ; done
 | |
|   find "$CEXA" -name $AC ! -path */delta/* -print0 \
 | |
|     | while read -d $'\0' F ; do cp "$CDEF/$AC" "$F" ; done
 | |
| 
 | |
|   # DEBUG: Commit the reset for review
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Reset Cartesian/SCARA configs..." >/dev/null
 | |
| 
 | |
|   # Create base Delta configurations
 | |
|   cp "$CDEF"/* "$CEXA/delta/generic"
 | |
| 
 | |
|   # DEBUG: Commit the reset for review
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Reset Generic Delta..." >/dev/null
 | |
| 
 | |
|   cp -R "$TEMP/$CEXA/delta/generic"/Conf* "$CEXA/delta/generic"
 | |
| 
 | |
|   # DEBUG: Commit Generic Delta changes for review
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Apply Generic Delta..." >/dev/null
 | |
| 
 | |
|   find "$CEXA/delta" -name $BC ! -path */generic/* -print0 \
 | |
|     | while read -d $'\0' F ; do cp "$CEXA/delta/generic/$BC" "$F" ; done
 | |
|   find "$CEXA/delta" -name $AC ! -path */generic/* -print0 \
 | |
|     | while read -d $'\0' F ; do cp "$CEXA/delta/generic/$AC" "$F" ; done
 | |
| 
 | |
|   # DEBUG: Commit the reset for review
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Reset Delta configs..." >/dev/null
 | |
| 
 | |
|   # SCARA configurations
 | |
|   find "$CEXA/SCARA" -name $BC \
 | |
|     | while read -d $'\0' F ; do cp "$CDEF/$BC" "$F" ; done
 | |
|   find "$CEXA/SCARA" -name $AC \
 | |
|     | while read -d $'\0' F ; do cp "$CDEF/$AC" "$F" ; done
 | |
| 
 | |
|   # DEBUG: Commit the reset for review or...
 | |
|   ((COMMIT_STEPS)) && git add . >/dev/null && git commit -m "Reset SCARA..." >/dev/null
 | |
| 
 | |
|   # Update the %VERSION% in the README.md file
 | |
|   SED=$(which gsed || which sed)
 | |
|   VERS=$( echo $EXPORT | $SED 's/release-//' )
 | |
|   eval "${SED} -E -i~ -e 's/%VERSION%/$VERS/g' README.md"
 | |
|   rm -f README.md~
 | |
| 
 | |
|   # NOT DEBUGGING: Commit the 'BASE', ready for customizations
 | |
|   ((COMMIT_STEPS)) || git add . >/dev/null && git commit --amend --no-edit >/dev/null
 | |
| 
 | |
|   # Create a new branch from 'BASE' for the final result
 | |
|   echo "- Creating '$EXPORT' branch for the result..."
 | |
|   git branch -D $EXPORT 2>/dev/null
 | |
|   git checkout -b $EXPORT || exit
 | |
| 
 | |
|   # Delete temporary branch
 | |
|   git branch -D BASE 2>/dev/null
 | |
| 
 | |
|   echo "- Applying example config customizations..."
 | |
|   cp -R "$TEMP/config" .
 | |
|   find config -type f \! -name "Configuration*" -exec rm "{}" \;
 | |
| 
 | |
|   echo "- Adding path labels to all configs..."
 | |
|   config-labels.py >/dev/null 2>&1
 | |
| 
 | |
|   git add . >/dev/null && git commit -m "Examples Customizations" >/dev/null
 | |
| 
 | |
|   echo "- Copying extras from Marlin..."
 | |
|   cp -R "$TEMP/config" .
 | |
| 
 | |
|   # Apply labels again!
 | |
|   config-labels.py >/dev/null 2>&1
 | |
| 
 | |
|   git add . >/dev/null && git commit -m "Examples Extras" >/dev/null
 | |
| 
 | |
|   rm -rf $TEMP
 | |
| 
 | |
|   git push -f --set-upstream upstream "$EXPORT"
 | |
| 
 | |
| else
 | |
| 
 | |
|   echo "Usage: mfconfig init|manual|rebase"
 | |
| 
 | |
| fi
 |