+}
+
+sub refresh () {
+ srcdir_check();
+ run_hooks(refresh => sub { shift->() });
+ @files=@{find_src_files()};
+ process_new_files();
+ process_del_files();
+
+ my @needsbuild=find_needsbuild();
+ run_hooks(needsbuild => sub { shift->(\@needsbuild) });
+
+ foreach my $file (@needsbuild, @del) {
+ calculate_old_links($file);
+ }
+
+ foreach my $file (@needsbuild) {
+ scan($file);
+ }
+
+ calculate_links();
+
+ foreach my $file (@needsbuild) {
+ render($file, sprintf(gettext("building %s"), $file));
+ }
+ foreach my $file (@internal, @internal_change) {
+ derender_internal($file);
+ }
+
+ foreach my $file (@needsbuild, @del) {
+ calculate_changed_links($file);
+ }
+
+ foreach my $file (@new, @del) {
+ render_linkers($file);
+ }
+
+ if (@needsbuild || @del || @internal || @internal_change) {
+ 1 while render_dependent();
+ }
+
+ render_backlinks();
+ remove_unrendered();