@@ -97,7 +97,16 @@ nix_flake_lock_flags * nix_flake_lock_flags_new(nix_c_context * context, nix_fla
9797{
9898 nix_clear_err (context);
9999 try {
100- auto lockSettings = nix::make_ref<nix::flake::LockFlags>();
100+ auto lockSettings = nix::make_ref<nix::flake::LockFlags>(nix::flake::LockFlags{
101+ .recreateLockFile = false ,
102+ .updateLockFile = true , // == `nix_flake_lock_flags_set_mode_write_as_needed`
103+ .writeLockFile = true , // == `nix_flake_lock_flags_set_mode_write_as_needed`
104+ .failOnUnlocked = false , // == `nix_flake_lock_flags_set_mode_write_as_needed`
105+ .useRegistries = false ,
106+ .allowUnlocked = false , // == `nix_flake_lock_flags_set_mode_write_as_needed`
107+ .commitLockFile = false ,
108+
109+ });
101110 return new nix_flake_lock_flags{lockSettings};
102111 }
103112 NIXC_CATCH_ERRS_NULL
@@ -108,16 +117,68 @@ void nix_flake_lock_flags_free(nix_flake_lock_flags * flags)
108117 delete flags;
109118}
110119
120+ nix_err nix_flake_lock_flags_set_mode_virtual (nix_c_context * context, nix_flake_lock_flags * flags)
121+ {
122+ nix_clear_err (context);
123+ try {
124+ flags->lockFlags ->updateLockFile = true ;
125+ flags->lockFlags ->writeLockFile = false ;
126+ flags->lockFlags ->failOnUnlocked = false ;
127+ flags->lockFlags ->allowUnlocked = true ;
128+ }
129+ NIXC_CATCH_ERRS
130+ }
131+
132+ nix_err nix_flake_lock_flags_set_mode_write_as_needed (nix_c_context * context, nix_flake_lock_flags * flags)
133+ {
134+ nix_clear_err (context);
135+ try {
136+ flags->lockFlags ->updateLockFile = true ;
137+ flags->lockFlags ->writeLockFile = true ;
138+ flags->lockFlags ->failOnUnlocked = false ;
139+ flags->lockFlags ->allowUnlocked = true ;
140+ }
141+ NIXC_CATCH_ERRS
142+ }
143+
144+ nix_err nix_flake_lock_flags_set_mode_check (nix_c_context * context, nix_flake_lock_flags * flags)
145+ {
146+ nix_clear_err (context);
147+ try {
148+ flags->lockFlags ->updateLockFile = false ;
149+ flags->lockFlags ->writeLockFile = false ;
150+ flags->lockFlags ->failOnUnlocked = true ;
151+ flags->lockFlags ->allowUnlocked = false ;
152+ }
153+ NIXC_CATCH_ERRS
154+ }
155+
156+ nix_err nix_flake_lock_flags_add_input_override (
157+ nix_c_context * context, nix_flake_lock_flags * flags, const char * inputPath, nix_flake_reference * flakeRef)
158+ {
159+ nix_clear_err (context);
160+ try {
161+ auto path = nix::flake::parseInputAttrPath (inputPath);
162+ flags->lockFlags ->inputOverrides .emplace (path, *flakeRef->flakeRef );
163+ if (flags->lockFlags ->writeLockFile ) {
164+ return nix_flake_lock_flags_set_mode_virtual (context, flags);
165+ }
166+ }
167+ NIXC_CATCH_ERRS
168+ }
169+
111170nix_locked_flake * nix_flake_lock (
112171 nix_c_context * context,
113- nix_flake_settings * settings,
172+ nix_fetchers_settings * fetchSettings,
173+ nix_flake_settings * flakeSettings,
114174 EvalState * eval_state,
115175 nix_flake_lock_flags * flags,
116176 nix_flake_reference * flakeReference)
117177{
178+ nix_clear_err (context);
118179 try {
119180 auto lockedFlake = nix::make_ref<nix::flake::LockedFlake>(nix::flake::lockFlake (
120- *settings ->settings , eval_state->state , *flakeReference->flakeRef , *flags->lockFlags ));
181+ *flakeSettings ->settings , eval_state->state , *flakeReference->flakeRef , *flags->lockFlags ));
121182 return new nix_locked_flake{lockedFlake};
122183 }
123184 NIXC_CATCH_ERRS_NULL
0 commit comments