Μια άσκηση εξάσκησης σε μια διαδρομή στο Exercism υλοποιείται συχνά από μια προδιαγραφή στο αποθετήριο exercism/problem-specifications.
Το Exercism απαιτεί σκόπιμα κάθε άσκηση να έχει το δικό της αντίγραφο ορισμένων αρχείων (όπως το .docs/instructions.md), ακόμα κι όταν αυτή η άσκηση υπάρχει στο problem-specifications.
Γι' αυτό το configlet διαθέτει μια εντολή sync, η οποία μπορεί να ελέγξει αν τέτοιες ασκήσεις εξάσκησης σε μια διαδρομή είναι συγχρονισμένες με αυτήν την πηγή upstream, και μπορεί να τις ενημερώσει όταν υπάρχουν διαθέσιμες ενημερώσεις.
Υπάρχουν τρία είδη δεδομένων που μπορούν να ενημερωθούν από το problem-specifications: η τεκμηρίωση, τα μεταδεδομένα και οι δοκιμές.
Υπάρχει επίσης ένα είδος δεδομένων που μπορεί να συμπληρωθεί από το αρχείο config.json της διαδρομής: οι διαδρομές αρχείων στα αρχεία config των ασκήσεων.
Περιγράφουμε τον έλεγχο και την ενημέρωση αυτών των ειδών δεδομένων σε ξεχωριστές ενότητες παρακάτω, αλλά ως γρήγορη σύνοψη:
configlet sync λειτουργεί μόνο σε ασκήσεις που υπάρχουν στο αρχείο config.json της διαδρομής.
Επομένως, αν υλοποιείς μια νέα άσκηση σε μια διαδρομή και θέλεις να προσθέσεις τα αρχικά αρχεία με το configlet sync, πρόσθεσε πρώτα την άσκηση στο αρχείο config.json της διαδρομής.
Αν η άσκηση δεν είναι ακόμα έτοιμη να είναι ορατή στους χρήστες, όρισε την τιμή status της σε wip.configlet sync δεν κάνει καμία αλλαγή στη διαδρομή και ελέγχει κάθε είδος δεδομένων για κάθε άσκηση.--docs, --filepaths, --metadata και --tests.--update.--update --yes.--update --tests include --exercise prime-factors.problem-specifications, πρόσθεσε --offline --prob-specs-dir /path/to/local/problem-specifications
configlet sync προσπαθεί να διατηρήσει τη σειρά των κλειδιών στα αρχεία .meta/config.json των ασκήσεων όταν ενημερώνει.
Για να γράψεις αυτά τα αρχεία σε κανονική μορφή χωρίς συγχρονισμό, χρησιμοποίησε την εντολή configlet fmt.
Ωστόσο, το configlet sync προσθέτει (πιθανώς κενά) υποχρεωτικά κλειδιά (authors, files, blurb) όταν λείπουν.
Αυτό είναι λιγότερο "σαν συγχρονισμός", αλλά πιο εργονομικό: όταν υλοποιείς μια νέα άσκηση, μπορείς να χρησιμοποιήσεις το sync για να δημιουργήσεις ένα αρχικό αρχείο .meta/config.json.configlet sync αφαιρεί κλειδιά που δεν υπάρχουν στην προδιαγραφή.
Τα προσαρμοσμένα ζεύγη κλειδιού/τιμής εξακολουθούν να υποστηρίζονται: πρέπει να γράφονται μέσα σε ένα αντικείμενο JSON με όνομα custom.Σημείωσε ότι στις εκδόσεις του configlet 4.0.0-alpha.34 και παλαιότερες, η εντολή sync λειτουργούσε μόνο σε δοκιμές.
Η εντολή sync μπορεί να χρησιμοποιηθεί για να ελέγξει ή να ενημερώσει την τεκμηρίωση, τα μεταδεδομένα και τις δοκιμές μιας άσκησης εξάσκησης από το "problem-specifications".
Μπορεί επίσης να ελέγξει ή να συμπληρώσει τιμές files που λείπουν για ασκήσεις εννοιών/εξάσκησης από το "config.json" της διαδρομής.
configlet [global-options] sync [command-options]
Global options:
-h, --help Show this help message and exit
--version Show this tool's version information and exit
-t, --track-dir <dir> Specify a track directory to use instead of the current directory
-v, --verbosity <verbosity> The verbosity of output. Allowed values: q[uiet], n[ormal], d[etailed]
Options for sync:
-e, --exercise <slug> Only operate on this exercise
-p, --prob-specs-dir <dir> Use this 'problem-specifications' directory, rather than cloning temporarily
-o, --offline Do not check that the directory specified by --prob-specs-dir is up to date
-u, --update Prompt to update the seen data that are unsynced
-y, --yes Auto-confirm prompts from --update for updating docs, filepaths, and metadata
--docs Sync Practice Exercise '.docs/introduction.md' and '.docs/instructions.md' files
--filepaths Populate empty 'files' values in Concept/Practice exercise '.meta/config.json' files
--metadata Sync Practice Exercise '.meta/config.json' metadata values
--tests [mode] Sync Practice Exercise '.meta/tests.toml' files.
The mode value specifies how missing tests are handled when using --update.
Allowed values: c[hoose], i[nclude], e[xclude] (default: choose)
Μια άσκηση εξάσκησης που προέρχεται από το αποθετήριο problem-specifications πρέπει να έχει ένα αρχείο .docs/instructions.md (και πιθανώς και ένα αρχείο .docs/introduction.md) που να περιέχει την τεκμηρίωση της άσκησης από το problem-specifications.
Για να ελέγξεις κάθε άσκηση εξάσκησης στη διαδρομή για διαθέσιμες ενημερώσεις τεκμηρίωσης (με έξοδο με μη μηδενικό κωδικό εξόδου αν υπάρχει τουλάχιστον μία διαθέσιμη ενημέρωση):
configlet sync --docs
Για να ενημερώσεις διαδραστικά την τεκμηρίωση για κάθε άσκηση εξάσκησης, πρόσθεσε την επιλογή --update (ή -u για συντομία):
configlet sync --docs --update
Για να ενημερώσεις μη διαδραστικά την τεκμηρίωση για κάθε άσκηση εξάσκησης, πρόσθεσε την επιλογή --yes (ή -y για συντομία):
configlet sync --docs --update --yes
Για να λειτουργήσεις σε μία μόνο άσκηση εξάσκησης, χρησιμοποίησε την επιλογή --exercise (ή -e για συντομία).
Για παράδειγμα, για να ενημερώσεις μη διαδραστικά την τεκμηρίωση της άσκησης prime-factors:
configlet sync --docs -uy -e prime-factors
Κάθε άσκηση σε μια διαδρομή πρέπει να έχει ένα αρχείο .meta/config.json.
Για μια άσκηση εξάσκησης που προέρχεται από το αποθετήριο problem-specifications, αυτό το αρχείο πρέπει να περιέχει τα ζεύγη κλειδιού/τιμής blurb, source και source_url που υπάρχουν στο αντίστοιχο αρχείο metadata.toml upstream.
Για να ελέγξεις κάθε άσκηση εξάσκησης για διαθέσιμες ενημερώσεις μεταδεδομένων (με έξοδο με μη μηδενικό κωδικό εξόδου αν υπάρχει τουλάχιστον μία διαθέσιμη ενημέρωση):
configlet sync --metadata
Για να ενημερώσεις διαδραστικά τα μεταδεδομένα για κάθε άσκηση εξάσκησης, πρόσθεσε την επιλογή --update (ή -u για συντομία):
configlet sync --metadata --update
Για να ενημερώσεις μη διαδραστικά τα μεταδεδομένα για κάθε άσκηση εξάσκησης, πρόσθεσε την επιλογή --yes (ή -y για συντομία):
configlet sync --metadata --update --yes
Για να λειτουργήσεις σε μία μόνο άσκηση εξάσκησης, χρησιμοποίησε την επιλογή --exercise (ή -e για συντομία).
Για παράδειγμα, για να ενημερώσεις μη διαδραστικά τα μεταδεδομένα της άσκησης prime-factors:
configlet sync --metadata -uy -e prime-factors
Αν μια διαδρομή υλοποιεί μια άσκηση για την οποία υπάρχουν δεδομένα δοκιμών στο αποθετήριο problem-specifications, η άσκηση πρέπει να περιέχει ένα αρχείο .meta/tests.toml.
Ο σκοπός του αρχείου tests.toml είναι να παρακολουθεί ποιες δοκιμές υλοποιούνται από την άσκηση.
Οι δοκιμές σε αυτό το αρχείο αναγνωρίζονται από το UUID τους και κάθε δοκιμή έχει μια τιμή Boolean (λογική τιμή) που δείχνει αν υλοποιείται από αυτήν την άσκηση.
Ένα αρχείο tests.toml έχει αυτήν τη μορφή:
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.
[1e22cceb-c5e4-4562-9afe-aef07ad1eaf4]
description = "basic"
[79ae3889-a5c0-4b01-baf0-232d31180c08]
description = "lowercase words"
[ec7000a7-3931-4a17-890e-33ca2073a548]
description = "invalid input"
include = false
comment = "excluded because we don't want to add error handling to the exercise"
Σε αυτήν την περίπτωση, η διαδρομή έχει επιλέξει να υλοποιήσει δύο από τις τρεις διαθέσιμες δοκιμές.
Αν μια διαδρομή χρησιμοποιεί μια γεννήτρια δοκιμών για να παράγει τη σουίτα δοκιμών μιας άσκησης, πρέπει να χρησιμοποιεί τα περιεχόμενα του αρχείου tests.toml για να καθορίσει ποιες δοκιμές θα συμπεριληφθούν στη σουίτα δοκιμών που παράγεται.
Για να ελέγξεις κάθε αρχείο tests.toml άσκησης εξάσκησης για διαθέσιμες ενημερώσεις δοκιμών (με έξοδο με μη μηδενικό κωδικό εξόδου αν υπάρχει τουλάχιστον μία περίπτωση δοκιμής που εμφανίζεται στα κανονικά δεδομένα της άσκησης αλλά όχι στο tests.toml):
configlet sync --tests
Για να ενημερώσεις διαδραστικά το αρχείο tests.toml για κάθε άσκηση εξάσκησης, πρόσθεσε την επιλογή --update:
configlet sync --tests --update
Για κάθε δοκιμή που λείπει, αυτό ζητά από τον χρήστη να επιλέξει αν θα τη συμπεριλάβει, θα την αποκλείσει ή θα την παραλείψει, και ενημερώνει ανάλογα το αντίστοιχο αρχείο tests.toml.
Το configlet γράφει το αρχείο tests.toml μιας άσκησης αφού ο χρήστης ολοκληρώσει τις επιλογές του για αυτήν την άσκηση.
Αυτό σημαίνει ότι μπορείς να τερματίσεις το configlet σε μια ερώτηση (για παράδειγμα, πατώντας Ctrl-C στο τερματικό) και να χάσεις τις αποφάσεις συγχρονισμού για μία το πολύ άσκηση.
Για να συμπεριλάβεις μη διαδραστικά κάθε περίπτωση δοκιμής που δεν έχει εμφανιστεί, χρησιμοποίησε --tests include.
Για παράδειγμα, για να το κάνεις αυτό για μια άσκηση με όνομα prime-factors:
configlet sync --tests include -u -e prime-factors
Μην ξεχάσεις να υλοποιήσεις πραγματικά αυτές τις δοκιμές στη διαδρομή!
Τέλος, η εντολή sync χειρίζεται επίσης τον "συγχρονισμό" από μια πηγή που δεν είναι το problem-specifications: το αρχείο config.json της διαδρομής.
Κάθε άσκηση εννοιών και άσκηση εξάσκησης πρέπει να έχει ένα αρχείο .meta/config.json με ένα αντικείμενο files που καθορίζει τις (σχετικές) τοποθεσίες των αρχείων που χρησιμοποιεί η άσκηση.
Τέτοιες διαδρομές αρχείων ακολουθούν συνήθως ένα απλό μοτίβο, οπότε το configlet μπορεί να συμπληρώσει τις τιμές σε επίπεδο άσκησης από μοτίβα στο κλειδί files του αρχείου config.json της διαδρομής.
Για να ελέγξεις ότι κάθε άσκηση εννοιών και άσκηση εξάσκησης στη διαδρομή έχει ένα πλήρως συμπληρωμένο κλειδί files (ή τουλάχιστον ένα που δεν μπορεί να συμπληρωθεί από το κλειδί files της διαδρομής):
configlet sync --filepaths
(Σημείωσε ότι το configlet lint θα παράγει επίσης ένα σφάλμα όταν μια άσκηση έχει κλειδί files που λείπει ή είναι κενό.)
Για να συμπληρώσεις κενές ή απούσες τιμές του κλειδιού files σε επίπεδο άσκησης για κάθε άσκηση εννοιών και άσκηση εξάσκησης, από τα μοτίβα στο κλειδί files της διαδρομής:
configlet sync --filepaths --update
Για να το κάνεις αυτό μη διαδραστικά και για μία μόνο άσκηση με όνομα prime-factors:
configlet sync --filepaths -uy -e prime-factors
sync όταν προσθέτεις μια νέα άσκηση σε μια διαδρομήΗ εντολή sync είναι χρήσιμη όταν προσθέτεις μια νέα άσκηση σε μια διαδρομή.
Αν προσθέτεις μια άσκηση εξάσκησης με όνομα foo που υπάρχει στο problem-specifications, μια πιθανή ροή εργασίας είναι:
config.json της διαδρομής για την άσκηση foo.
Έτσι η άσκηση γίνεται ορατή στο configlet sync.configlet sync --docs --filepaths --metadata -uy -e foo για να δημιουργήσεις την τεκμηρίωση της άσκησης και ένα αρχικό αρχείο .meta/config.json με συμπληρωμένες τιμές files, blurb και ίσως source και source_url..meta/config.json της άσκησης όπως θέλεις.
Για παράδειγμα, πρόσθεσε τον εαυτό σου στον πίνακα authors.configlet sync --tests include -u -e foo για να δημιουργήσεις ένα αρχείο .meta/tests.toml με κάθε δοκιμή συμπεριλημμένη..meta/tests.toml και πρόσθεσε include = false σε κάθε περίπτωση δοκιμής που η άσκηση δεν θα υλοποιήσει..meta/tests.toml.