@@ -12,6 +12,7 @@ VERSION="1.10.0"
1212PRINT_HELP=false
1313PRINT_VERSION=false
1414UPDATE=false
15+ FORCE=false
1516DRY_RUN=false
1617QUIET=false
1718
@@ -43,6 +44,11 @@ while true; do
4344 UPDATE=true
4445 shift
4546 ;;
47+ ' -f' )
48+ # Force, for example ignores abstract contexts
49+ FORCE=true
50+ shift
51+ ;;
4652 ' -n' )
4753 # Dry run, print docker compose command without running it
4854 DRY_RUN=true
@@ -76,6 +82,7 @@ if [ "$PRINT_HELP" = true ]; then
7682 echo ' -h, --help Print this help and exit'
7783 echo ' -v, --version Print version and exit'
7884 echo ' --update Update DockerC and exit'
85+ echo ' -f Force, for example ignores abstract contexts'
7986 echo ' -n Dry run, print docker compose command without running it'
8087 echo ' -q Quiet, do not print docker compose command'
8188 exit 0
@@ -216,6 +223,7 @@ if [ "$(echo "$CONTEXT" | cut -c1)" = '@' ]; then
216223 echo ' @rfa Remove all unused containers, networks and images'
217224 echo ' @rfav Remove all unused containers, networks, images and volumes'
218225 echo ' options:'
226+ echo ' -f Force, for example ignores abstract contexts'
219227 echo ' -n Dry run, print docker command without running it'
220228 echo ' -q Quiet, do not print docker command'
221229 exit 0
240248
241249COMPOSE_FILE_ARGS=' '
242250NO_COMPOSE_FILE_ARGS=false
251+ ABSTRACT_COMPOSE_FILE_ARGS=false
243252ENV_FILE_ARGS=' '
244253
245254# If context is -, use default docker compose files (override if it exists)
@@ -274,8 +283,15 @@ if [ "$NO_COMPOSE_FILE_ARGS" = false ]; then
274283 ENV_FILE_ARGS=" $ENV_FILE_ARGS --env-file $dir /.env.local"
275284 fi
276285
277- if [ -f " $dir /docker-compose.yml" ]; then
278- COMPOSE_FILE_ARGS_1_DEFAULT=" -f $dir /docker-compose.yml"
286+ COMPOSE_FILE_PATH=" $dir /docker-compose.yml"
287+ if [ -f " $COMPOSE_FILE_PATH " ]; then
288+ COMPOSE_FILE_ARGS_1_DEFAULT=" -f $COMPOSE_FILE_PATH "
289+
290+ if cat " $COMPOSE_FILE_PATH " | grep -q " ^#:dockerc.abstract$" ; then
291+ ABSTRACT_COMPOSE_FILE_ARGS=true
292+ else
293+ ABSTRACT_COMPOSE_FILE_ARGS=false
294+ fi
279295 fi
280296
281297 if [ ! -z " $CONTEXT " ]; then
@@ -307,11 +323,18 @@ if [ "$NO_COMPOSE_FILE_ARGS" = false ]; then
307323 if [ -z " $COMPOSE_FILE_ARGS_2 " ]; then
308324
309325 # Look for docker-compose$PREFIX_1.$part.yml
310- if [ -f " $dir /docker-compose$PREFIX_1 .$MISSING_PARTS$part .yml" ]; then
311- COMPOSE_FILE_ARGS_1=" $COMPOSE_FILE_ARGS_1 -f $dir /docker-compose$PREFIX_1 .$MISSING_PARTS$part .yml"
326+ COMPOSE_FILE_PATH=" $dir /docker-compose$PREFIX_1 .$MISSING_PARTS$part .yml"
327+ if [ -f " $COMPOSE_FILE_PATH " ]; then
328+ COMPOSE_FILE_ARGS_1=" $COMPOSE_FILE_ARGS_1 -f $COMPOSE_FILE_PATH "
312329 PREFIX_1=" $PREFIX_1 .$MISSING_PARTS$part "
313330 MISSING_PARTS=' '
314331
332+ if cat " $COMPOSE_FILE_PATH " | grep -q " ^#:dockerc.abstract$" ; then
333+ ABSTRACT_COMPOSE_FILE_ARGS=true
334+ else
335+ ABSTRACT_COMPOSE_FILE_ARGS=false
336+ fi
337+
315338 else
316339 # Part was not found, invalidate PREFIX_1
317340 PREFIX_1=' '
@@ -326,10 +349,17 @@ if [ "$NO_COMPOSE_FILE_ARGS" = false ]; then
326349 if [ -z " $PREFIX_2 " ]; then
327350
328351 # Look for docker-compose-$part.yml
329- if [ -f " $dir /docker-compose-$MISSING_PARTS$part .yml" ]; then
330- COMPOSE_FILE_ARGS_2=" $COMPOSE_FILE_ARGS_2 -f $dir /docker-compose-$MISSING_PARTS$part .yml"
352+ COMPOSE_FILE_PATH=" $dir /docker-compose-$MISSING_PARTS$part .yml"
353+ if [ -f " $COMPOSE_FILE_PATH " ]; then
354+ COMPOSE_FILE_ARGS_2=" $COMPOSE_FILE_ARGS_2 -f $COMPOSE_FILE_PATH "
331355 PREFIX_2=" -$MISSING_PARTS$part "
332356 MISSING_PARTS=' '
357+
358+ if cat " $COMPOSE_FILE_PATH " | grep -q " ^#:dockerc.abstract$" ; then
359+ ABSTRACT_COMPOSE_FILE_ARGS=true
360+ else
361+ ABSTRACT_COMPOSE_FILE_ARGS=false
362+ fi
333363 fi
334364
335365 fi
@@ -339,10 +369,17 @@ if [ "$NO_COMPOSE_FILE_ARGS" = false ]; then
339369 if [ ! -z " $PREFIX_2 " ]; then
340370
341371 # Look for docker-compose$PREFIX_2.$part.yml
342- if [ -f " $dir /docker-compose$PREFIX_2 .$part .yml" ]; then
343- COMPOSE_FILE_ARGS_2=" $COMPOSE_FILE_ARGS_2 -f $dir /docker-compose$PREFIX_2 .$part .yml"
372+ COMPOSE_FILE_PATH=" $dir /docker-compose$PREFIX_2 .$part .yml"
373+ if [ -f " $COMPOSE_FILE_PATH " ]; then
374+ COMPOSE_FILE_ARGS_2=" $COMPOSE_FILE_ARGS_2 -f $COMPOSE_FILE_PATH "
344375 PREFIX_2=" $PREFIX_2 .$part "
345376
377+ if cat " $COMPOSE_FILE_PATH " | grep -q " ^#:dockerc.abstract$" ; then
378+ ABSTRACT_COMPOSE_FILE_ARGS=true
379+ else
380+ ABSTRACT_COMPOSE_FILE_ARGS=false
381+ fi
382+
346383 else
347384 # Part was not found, invalidate PREFIX_2
348385 PREFIX_2=' '
384421
385422 elif [ -z " $CONTEXT " ] || [ " $CONTEXT " = ' dev' ]; then
386423
387- if [ -f " $dir /docker-compose.override.yml" ]; then
388- COMPOSE_FILE_ARGS=" $COMPOSE_FILE_ARGS_1_DEFAULT -f $dir /docker-compose.override.yml"
424+ COMPOSE_FILE_PATH=" $dir /docker-compose.override.yml"
425+ if [ -f " $COMPOSE_FILE_PATH " ]; then
426+ COMPOSE_FILE_ARGS=" $COMPOSE_FILE_ARGS_1_DEFAULT -f $COMPOSE_FILE_PATH "
427+
428+ if cat " $COMPOSE_FILE_PATH " | grep -q " ^#:dockerc.abstract$" ; then
429+ ABSTRACT_COMPOSE_FILE_ARGS=true
430+ else
431+ ABSTRACT_COMPOSE_FILE_ARGS=false
432+ fi
433+
389434 break
390435
391436 elif [ -z " $CONTEXT " ]; then
413458 exit 1
414459 fi
415460
461+ # Unless force option is set,
462+ # If compose file arguments are abstract, exit with error
463+ if [ " $FORCE " = false ] && [ " $ABSTRACT_COMPOSE_FILE_ARGS " = true ]; then
464+ echo ' Error: Abstract context found'
465+ exit 1
466+ fi
467+
416468fi
417469
418470# Check for shell arguments preset shortcut
@@ -732,11 +784,11 @@ elif [ "$(echo "$ARGS" | cut -c1)" = '@' ]; then
732784 echo ' @bp build --pull'
733785 echo ' @bf build --pull --no-cache'
734786 echo ' @bn build --dry-run --pull --no-cache'
735- echo ' @w watch'
736- echo ' @wq watch --quiet'
737- echo ' @ww watch --no-up'
738- echo ' @wqw watch --quiet --no-up'
739- echo ' @wn watch --dry-run'
787+ echo ' @w watch'
788+ echo ' @wq watch --quiet'
789+ echo ' @ww watch --no-up'
790+ echo ' @wqw watch --quiet --no-up'
791+ echo ' @wn watch --dry-run'
740792 echo ' @d down'
741793 echo ' @da down --remove-orphans'
742794 echo ' @dr down --remove-orphans --rmi local'
@@ -792,6 +844,7 @@ elif [ "$(echo "$ARGS" | cut -c1)" = '@' ]; then
792844 echo ' @rfv rm -f -v'
793845 print_context_help
794846 echo ' options:'
847+ echo ' -f Force, for example ignores abstract contexts'
795848 echo ' -n Dry run, print docker compose command without running it'
796849 echo ' -q Quiet, do not print docker compose command'
797850 exit 0
0 commit comments