My preference for this would be option 3., on the grounds that: * I'd rule out 1 because of the slight backwards incompatibility (which can affect people - I remember a deploy script failing because of a changed exit code for a Mercurial command). In particular, currently there are other conditions when you get a non-zero exit code - for the case of some crash due to incorrect setup or other runtime error. This is a distinct case from "this command errored because there were no migrations to make".
* I'd rule out 2 because it really makes --dry-run behave differently from normal, which breaks expectations Basically, having a flag like "--exit" is nice and explicit. Luke On 29/10/14 01:22, Tim Heap wrote: > Hi all, > > I have created a ticket for this > (https://code.djangoproject.com/ticket/23728) but I would like some > input before I work on it. I will copy the content of the ticket below > for ease of reading: > > It would be very useful for continuous deployment, testing, commit > hooks, and other applications if django-admin makemigrations signaled > via an exit code if any migrations were found. Commits in projects could > be rejected if migrations were outstanding, continuous deployment > systems could fail the build on outstanding migrations, and potentially > other uses. No more would hasty commits break things when developers > forgot to make migrations! > > Changes to the code to make this happen are easy enough, but I am unsure > how the command should behave. The grep unix utility is a example to > copy. Under normal operation, grep always exits 0 unless an error > happens, regardless of whether it found any matches. Invoking grep with > the -q/--quiet flag causes grep to be silent, not printing anything, as > well as exiting 0 if matches are found and 1 if nothing is found. > > I am proposing django-admin makemigrations should exit with 1 (or > anything non-zero) if no migrations to make were found, or exit 0 if > migrations to make were found. As the command is instructed to make > migrations, not making any is the error case. > > I am unsure how this new functionality should be selected by the user > when invoking makemigrations. The options I see are: > > 1. Enable this always. This is very simple to implement and easy to > understand. Good unixy tools use error codes extensively to signal > errors. This may be surprising behaviour when compared to grep > though, and breaks backwards compatibility in a minor way. > 2. Enable this when the --dry-run flag is enabled. Now this flag can be > used to check for migrations that need to be created both visually > via the printed text, and composed in shell commands. > 3. Add a new flag -e/--exit (or similar). The sole purpose of this flag > would be to exit with 1 when no migrations were found. This could be > combined with --dry-run to just check for migrations that need to be > made. > 4. Add a new flag -q/--quiet that copies the behaviour of greps > -q/--quiet flag: silences output and exits with 1 when no migrations > were found. This duplicates functionality though, as logging can be > silenced using -v0 already. > > My personal preference is for option 2. I was surprised when enabling > --dry-run did not signal its result via the exit code. 3 would be the > cleanest and most composable option, as 4 could be emulated using -ev0. > > I will implement this change using 2, unless other people have opinions > on the matter. > > Regards, > Tim > > -- > You received this message because you are subscribed to the Google > Groups "Django developers (Contributions to Django itself)" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to django-developers+unsubscr...@googlegroups.com > <mailto:django-developers+unsubscr...@googlegroups.com>. > To post to this group, send email to django-developers@googlegroups.com > <mailto:django-developers@googlegroups.com>. > Visit this group at http://groups.google.com/group/django-developers. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-developers/92203dcb-a775-4c17-a831-97d01ce8af3c%40googlegroups.com > <https://groups.google.com/d/msgid/django-developers/92203dcb-a775-4c17-a831-97d01ce8af3c%40googlegroups.com?utm_medium=email&utm_source=footer>. > For more options, visit https://groups.google.com/d/optout. -- "I was sad because I had no shoes, until I met a man who had no feet. So I said, "Got any shoes you're not using?" (Steven Wright) Luke Plant || http://lukeplant.me.uk/ -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/5453873E.8080502%40cantab.net. For more options, visit https://groups.google.com/d/optout.